将useEffect值传递给定时循环

问题描述 投票:0回答:1

在以下情况下,如何在函数simulationOn中更新变量executeSimulation的值:

App this.state.simulationOn通过外部代码更改-> ...->重新渲染无状态组件(Robot)->用新值调用useEffect钩子-> executeSimulation未更新新值为simulationOn

    function Robot({ simulationOn, alreadyActivated, robotCommands }) {

        useEffect(() => {
            function executeSimulation(index, givenCommmands) {
                index += 1;
                if (index > givenCommmands.length || !simulationOn) {
                    return;
                }
                setTimeout(executeSimulation.bind({}, index, givenCommmands), 1050);
            }
            if (simulationOn && !alreadyActivated) {
                executeSimulation(1, robotCommands);
            }
        }, [simulationOn, alreadyActivated, robotCommands]);

    }

在上面的示例中,即使使用更新后的值调用useEffect(我使用console.log进行检查),simulationOn也永远不会更改为false。我怀疑这是因为simulationOn的新值从未传递到函数executeSimulation的范围,但是我不知道如何在函数executeSimulation内部传递新的钩子值>]。

NOTE:

在这个问题上,我忽略了非必需的代码,可以在here中找到。

如何在以下上下文中更新函数executeSimulation内部的变量SimulationOn的值:应用this.state.simulationOn通过外部代码进行更改-> ...-> React ...

javascript reactjs sleep
1个回答
0
投票
很遗憾,没有提供可执行代码。我不确定,但您是否尝试过此方法:
© www.soinside.com 2019 - 2024. All rights reserved.