【发布时间】:2021-06-08 18:37:47
【问题描述】:
此处的代码沙盒:https://codesandbox.io/s/restless-haze-v01wv?file=/src/App.js
我有一个用户组件(简化后)看起来像这样:
const Users = () => {
const [toastOpen, setToastOpen] = useState(false)
// functions to handle toast closing
return (
<EditUser />
<Toast />
)
}
const EditUser = () => {
[user, setUser] = useState(null)
useEffect(() => {
const fetchedUser = await fetchUser()
setUser(fetchedUser)
}, [])
// this approach results in UserForm's username resetting when the toast closes
const Content = () => {
if (user) return <UserForm user={user} />
else return <div>Loading...</div>
}
return <Content />
// if I do this instead, everything's fine
return (
<div>
{
user ? <UserForm user={user} /> : <div>Loading...</div>
}
</div>
)
}
const UserForm = ({ user }) => {
const [username, setUsername] = useState(user.name)
return <input value={username}, onChange={e => setUsername(e.target.value)} />
}
在 Toast 仍处于打开状态时查看用户窗体页面时,用户窗体状态会在 Toast 关闭时重置。
我发现问题在于EditUser 内部定义的Content 组件,但我不太清楚为什么这是一个问题。我很想在这里了解一下 React 引擎盖下发生的事情,以及在“幸福的道路”中发生的事情
【问题讨论】:
-
能否分享下Users组件的完整代码
标签: reactjs react-hooks closures use-state