const [a, seta] = useState({})
const [b, setb] = useState(false)
Promise.resolve().then(() => {
seta({name:'xxxxx'})
setb(true)
})
useEffect(() => {
if (b) {
// do something
// 这里a是否一定被成功赋值
}
}, [b])
上面的代码我是想等 a
赋值完成后做一些操作(代码中的do something
),但是由于代码中seta
的地方比较多,所以就没法在useEffect
去监听a
的变化。
所以我在seta
后面加了一个setb
,然后在useEffect
中监听如果b
为true
的时候去做操作。
请问下代码中 do something
这里此时a
一定被赋值成功了吗?我现在在代码中这么写是能正常运行的,但是不知道会不会有什么bug
或者不严谨的地方,请大佬们指教下
react react-dom
版本16.13.1
首先,在 react 中不要直接在 函数组件 中直接调用 setState, 这就是一个错误用例。setState 会导致函数组件重新执行,这样写其实就是写了一个死循环
如果你的这段逻辑是一些初始化操作,那么应该放到 useEffect 中
下面再回到你的问题,通过正常的事件流去执行 setA,setB 是否有顺序问题,取决于你是在异步任务中去 setState,还是在同步任务中。