在以下情况下,如何在函数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 ...