我在我的组件中设置了一个效果,如果另一个状态属性发生变化,它会改变视图。但是由于某种原因,当组件挂载时,效果会运行,即使 detailIndex
的值没有改变。
const EventsSearchList = () => {
const [view, setView] = useState('table');
const [detailIndex, setDetailIndex] = useState(null);
useEffect(() => {
console.log('onMount', detailIndex);
// On mount shows "null"
}, []);
useEffect(
a => {
console.log('Running effect', detailIndex);
// On mount shows "null"!! Should not have run...
setView('detail');
},
[detailIndex]
);
return <div>123</div>;
};
为什么会这样?
更新:如果不清楚,我正在尝试在组件更新时运行效果,因为 detailIndex
发生了变化。不是在安装时。
原文由 Enrique Moreno Tent 发布,翻译遵循 CC BY-SA 4.0 许可协议
useEffect
来自 React Hooks 的默认情况下在每次渲染时执行,但您可以使用函数中的第二个参数来定义何时再次执行效果。这意味着该函数 始终 在挂载时执行。在您的情况下,您的第二个useEffect
将在启动时运行,并且当detailIndex
更改时。更多信息: https ://reactjs.org/docs/hooks-effect.html
资源: