在以下情况下 ,如何更新simulationOn
函数内部变量的值:executeSimulation
通过外部代码更改应用this.state.simulationOn
程序 --> ... --> React 无状态组件 ( 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]);
}
在上面的示例中,simulationOn
永远不会更改为false
,即使使用更新的值调用 useEffect (我使用 console.log 检查)。我怀疑这是因为新的值simulationOn
永远不会传递给函数的范围executeSimulation
,但我不知道如何在函数内部传递新的钩子值executeSimulation
。