假设我有一个依赖于其他状态的状态(例如,当A改变时,我希望B改变)
在useEffect钩子中创建一个观察a并设置B的钩子是否合适
效果是否会层叠,当我单击按钮时,第一个效果会激发,导致b发生变化,导致第二个效果激发,然后再进行下一次渲染?这样构造代码有没有性能方面的缺点
让MyComponent=props=>;{
设[a,setA]=useState(1)
let[b,setB]=useState(2)
使用效果(
()=>{
如果(/*有些东西是真的*/){
挫折(3)
}
},
[a] ,,
)
使用效果(
()=>{
//做点什么
},
[b] ,,
)
返回(
<;按钮
onClick={()=>{
setA(5)
}}
&燃气轮机;
点击我
<;/button>;
)
}
一般来说,在useffect内部使用setState将创建一个无限循环,这很可能是您不想引起的。这条规则有几个例外,我将在后面讨论
每次渲染后都会调用useffect,当在其中使用setState时,它将导致组件重新渲染,该组件将调用useffect,依此类推
在useffect内部使用useffect不会导致无限循环的常见情况之一是,当您将空数组作为第二个参数传递给useffect时,就像useffect(()=>;{……},[])一样,这意味着应该在第一次装载/渲染之后调用一次效果函数。当您在组件中进行数据提取,并且希望将请求数据保存在组件的状态时,这一功能被广泛使用