【问题标题】:'Calling' UseEffect from another 'UseEffect'从另一个“UseEffect”“调用”UseEffect
【发布时间】:2020-05-15 01:47:19
【问题描述】:

我正在学习 React Native,我正在编写一个简单的应用程序来记录每天的睡眠时间。

当按下添加新寄存器的按钮时,我会这样做

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 但它不是......

【问题讨论】:

  • 只需将由第一个 useEffect 更改的值添加到第二个 useEffect 依赖项中。在你的情况下,我猜应该是updateAction

标签: javascript reactjs react-native


【解决方案1】:

您设置 useEffect 的方式只有在 selectedDay 更改时才会重新运行。如果你想让它在执行setInfoViewAction 时运行,请将viewInfoAction 添加到依赖项中。

更好,因为所有这些都与同一个副作用相关的逻辑。我会通过删除第二个useEffect 并将其中的代码添加到第一个useEffect 中来简化您的代码。这主要是因为您可以将所有相关的副作用逻辑放在一起。

【讨论】:

  • 我对 UseEffect 的依赖项有 viewInfoAction,我必须更改它只是为了尝试其他方式,但它也不起作用。但我刚刚解决了这个问题。我认为它遇到了麻烦,因为自 setUpdateAction(false); 以来它同时执行了 2 个 UseEffects;将再次触发 UseEffect 并且我不想要这种行为,所以我的解决方案只是切换到 viewInfoAction 和 updateAction 的相反值
猜你喜欢
  • 2021-12-22
  • 2023-02-07
  • 1970-01-01
  • 2019-12-05
  • 2022-01-25
  • 2020-02-15
  • 2020-08-31
  • 2020-08-11
  • 2020-08-17
相关资源
最近更新 更多