我可以在useEffect挂钩中设置状态吗

假设我有一个依赖于其他状态的状态(例如,当A改变时,我希望B改变)

在useEffect钩子中创建一个观察a并设置B的钩子是否合适

效果是否会层叠,当我单击按钮时,第一个效果会激发,导致b发生变化,导致第二个效果激发,然后再进行下一次渲染?这样构造代码有没有性能方面的缺点

让MyComponent=props=>{
设[a,setA]=useState(1)
let[b,setB]=useState(2)
使用效果(
()=&gt{
如果(/*有些东西是真的*/){
挫折(3)
}
},
[a] ,,
)
使用效果(
()=&gt{
//做点什么
},
[b] ,,
)
返回(
<按钮
onClick={()=&gt{
setA(5)
}}
&燃气轮机;
点击我
</button>
)
}

一般来说,在useffect内部使用setState将创建一个无限循环,这很可能是您不想引起的。这条规则有几个例外,我将在后面讨论

每次渲染后都会调用useffect,当在其中使用setState时,它将导致组件重新渲染,该组件将调用useffect,依此类推

useffect内部使用useffect不会导致无限循环的常见情况之一是,当您将空数组作为第二个参数传递给useffect时,就像useffect(()=>{……},[])一样,这意味着应该在第一次装载/渲染之后调用一次效果函数。当您在组件中进行数据提取,并且希望将请求数据保存在组件的状态时,这一功能被广泛使用

发表评论