React 组件无限地重新渲染,并在 useEffect 钩子中设置相同的布尔值状态?



我正在尝试下面的代码片段,以了解 ReactuseStateuseEffect钩子的行为。

const [foo, setFoo] = React.useState<boolean>(true);
React.useEffect(() => {
console.log("Setting state foo to false ...");
setFoo(false);
}, [foo]);

使用当前的实现,效果应该在mount,依赖更改和unmount上触发。 由于foo一直false设置为相同的布尔值,因此我期望托管组件应该只渲染 2 次,即初始加载和状态footrue更改为false时。

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

堆栈溢出 - 57850595发布了一个类似的案例,调查为什么相同的状态触发了重新渲染,这引导我从 React 的状态更新机制中纾困。它说"React可能仍然需要在救助之前再次渲染该特定组件"。这不应该意味着我发布的代码片段最多会有 3 次渲染吗?

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

最新更新