【发布时间】:2021-03-06 04:51:12
【问题描述】:
所以你可能知道,在正常模式下,我们使用更新依赖项来获取状态更新时的通知,如下所示:
const [val, setVal] = useState();
useEffect(() => {}, [val]]);
但就我而言,我的状态中有一个数组,我试图在我的 useEffect 中循环更新它,如下所示:
const [val, setVal ] = useState([...]);
useEffect(() => {
anotherArr.forEach(i => {
// get val and modify some indexes
setVal(modifiedValuesArray);
}
}, []);
在这种情况下,每次 forEach 循环运行时,我都会得到初始 val(我知道,因为 val 不是 useEffect 的依赖),但如果我把它作为一个依赖,它会更新两次。解决办法是什么?
编辑:基本上,我的意思是当我在 useEffect 的一轮循环中更新状态时,在下一轮,我没有得到更新的状态,而是进入循环之前的初始状态。我知道,这是因为 useEffect 的性质,它为我们提供了一个记忆的状态值(因为我们没有将它作为依赖项传递以避免额外的执行),但是在这些类型的场景中解决方案是什么。
【问题讨论】:
-
您应该只
setVal一次。计算转换后的数组,然后设置它。在那种情况下使用useEffect有什么重要的原因吗? -
@briosheje 实际上真正的代码比这个基本示例复杂得多。但是,是的,当所需的依赖项之一更新时,我需要使用 useEffect 来获得通知。(由于某些原因,我想一一更新索引)
-
@PouyaJabbarisani 为什么不在
setVal内发送一个箭头函数,它将先前的状态作为参数?
标签: javascript reactjs react-hooks