我正在学习本地反应,我正在编写一个简单的应用程序来记录每天的睡眠时间。
当按下添加新寄存器的按钮时,我这样做
onPress={() => setUpdateAction(true)}
这将更改updateAction的值:
const [updateAction,setUpdateAction] = useState(false);
当updateAction的值更改时,将执行该操作:
useEffect(() => {
... code that add's the register to an array
setviewInfoAction(true);
setUpdateAction(false);
}, [updateAction]);
在内部调用setviewInfoAction(true);
是因为我想用插入的值更改显示的值。
const [viewInfoAction, setviewInfoAction] = useState(false);
useEffect(() => {
console.log("CALLED");
var seted = false;
for (var i = 0; i < registSleep.length; i++) {
if (
registSleep[i].day === selectedDay &&
registSleep[i].month === selectedMonth &&
registSleep[i].year === selectedYear
) {
setSelectedDayHours(registSleep[i].hours);
seted = true;
}
}
if (!seted) {
setSelectedDayHours(0);
}
setviewInfoAction(false);
}, [viewInfoAction]);
这样做,我期望第二个UseEffect能够执行,但不是...
答案 0 :(得分:0)
只有在selectedDay
更改的情况下,才能重新设置useEffect的使用方式。如果要使其在执行setInfoViewAction
时运行,请将viewInfoAction
添加到依赖项中。
更好,因为所有这些都与同一个sideEffect相关。通过删除第二个useEffect
并将其内部的代码添加到第一个useEffect
中,可以简化您的代码。这主要是因为您可以将所有相关的副作用逻辑放在一起。