假设我有一些依赖于其他状态的状态(例如,当 A 更改时,我希望 B 更改)。
创建一个观察 A 并在 useEffect 钩子内设置 B 的钩子是否合适?
效果是否会级联,当我单击按钮时,第一个效果会触发,导致 b 发生变化,导致第二个效果在下一次渲染之前触发?像这样构建代码是否有任何性能劣势?
let MyComponent = props => { let [a, setA] = useState(1) let [b, setB] = useState(2) useEffect( () => { if (/*some stuff is true*/) { setB(3) } }, [a], ) useEffect( () => { // do some stuff }, [b], ) return ( <button onClick={() => { setA(5) }} > click me </button> ) }
即使您在一个效果内设置状态,效果也始终在渲染阶段完成后执行,另一个效果将读取更新的状态并仅在渲染阶段后对其进行操作。
话虽如此,最好以相同的效果采取两种行动,除非有可能b由于其他原因而改变,changing a在这种情况下,您也希望执行相同的逻辑
b
changing a