【发布时间】:2021-05-04 22:47:01
【问题描述】:
问题总结得很好here;基本上,如果您在 useEffect 中有一个异步函数(这是您期望此类函数的地方),您会为每个更新的状态重新渲染组件。我通常不想像作者的解决方案/解决方法那样将事情捆绑在一起,而且对我来说这种行为没有意义(您希望所有状态更新一起发生)。
这是设计使然吗?如果是这样,是否有更好的方法来处理这个问题,这样我就可以执行所有更新而不必担心订购等问题?这感觉像是一个错误,但也许只是我理解的一个缺陷。
参考代码:
export default function App (): JSX.Element {
const [user, setUser] = useState(null)
const [pending, setPending] = useState(false)
useEffect(() => {
setPending(true)
fetchUser().then((fetchedUser) => {
setPending(false)
setUser(fetchedUser) // This updated value won't initially be seen by other effects dependant on 'pending'
})
}, [])
// …
}
【问题讨论】:
-
另外,新的concurrent mode 默认批处理所有同步更新,没有包装函数。
-
嗯,出于某种原因,我认为它不会让我在 24 小时后才能回答我自己的问题;可能是记错了,或者 StackOverflow 变了。也感谢您提供额外的参考。
标签: reactjs react-hooks