【发布时间】:2022-10-19 12:03:14
【问题描述】:
假设我有这个简单的虚拟组件:
const Component = () => {
const [state, setState] = useState(1);
setState(1);
return <div>Component</div>
}
在此代码中,我将状态更新为相同像以前一样直接在组件主体中的值。但是,即使值保持不变,这也会导致过多的重新渲染。
据我所知,在 React.useState 中,如果状态值更新为与以前相同的值 -React 不会重新渲染组件.那么为什么会发生在这里呢?
然而,如果我尝试用 useEffect 做一些类似的事情而不是直接在组件主体中:
const Component = () => {
const [state, setState] = useState(1);
useEffect(()=>{
setState(1);
},[state])
return <div>Component</div>
}
这是不是导致无限循环并完全按照以下规则进行如果状态保持不变,React 将不会重新渲染组件。
所以我的问题是:为什么当我直接在组件主体中执行它时会导致无限循环,而在 useEffect 中却不会?
如果有人对此有一些“幕后”解释,我将不胜感激!
【问题讨论】:
标签: javascript reactjs react-hooks infinite-loop react-component