Reactjs 使用useEffect挂钩中设置的相同布尔值状态无限地重新渲染React组件?

Reactjs 使用useEffect挂钩中设置的相同布尔值状态无限地重新渲染React组件?,reactjs,react-hooks,Reactjs,React Hooks,我在下面的代码片段上进行实验,以了解ReactuseState和useffect钩子的行为 const[foo,setFoo]=React.useState(true); React.useffect(()=>{ log(“将状态foo设置为false…”); setFoo(假); },[foo]); 对于当前的实现,应该在装载、依赖项更改和卸载时触发该效果。由于foo一直被设置为相同的布尔值false,因此我希望宿主组件只呈现2次,即初始加载和状态foo从true更改为false 但事实上,

我在下面的代码片段上进行实验,以了解React
useState
useffect
钩子的行为

const[foo,setFoo]=React.useState(true);
React.useffect(()=>{
log(“将状态foo设置为false…”);
setFoo(假);
},[foo]);
对于当前的实现,应该在
装载
、依赖项更改和
卸载
时触发该效果。由于
foo
一直被设置为相同的布尔值
false
,因此我希望宿主组件只呈现2次,即初始加载和状态
foo
true
更改为
false

但事实上,我观察到的是,这段代码创建了一个无限重渲染循环


发布了一个类似的案例,调查为什么相同的状态触发了重新渲染,这让我了解了React的机制。它说“React可能仍然需要在退出之前再次渲染该特定组件”。这难道不意味着我发布的代码段最多只能呈现3次吗?

正如Ben在第一条评论中指出的,代码段实际上可以按预期工作。这是我的一个错误,导致提交了一个包含假阴性的问题。

你能发布你用来测试这个问题的整个组件吗?我只是把那个片段放到一个空的组件中,它只呈现了两次。@Ben哦,是的,你完全正确。谢谢你指出这一点。我在这件事上太粗心了。实际上是用酶浅层渲染来测试这一点,在
useffect
hook上创建了一个模拟。。。应该更加小心,在浏览器中或通过故事书进行渲染。