javascript - react 中的异步功能不会对状态变化使用react

标签 javascript reactjs

我想要我的 aysnc function对状态变化使用react,以便它可以在状态变化时终止。我发现它对改变状态没有反应。
在提供的示例中,我正在从函数内部更改状态,但是我已经对其进行了测试并更改了状态 从函数外部 (按钮点击)它也不起作用 .

const [testVariable, setTestVariable] = useState(false);

useEffect(()=> {
  testFunction();
}, [])

const testFunction = async () => {
  await timeout(1000);

  console.log("Setting test variable to: " + true);
  setTestVariable(true);

  await timeout(1000);
  
  console.log("Test variable is: " + testVariable);
}
预期的结果是看到变量更改为 true,但是我看到的是:
enter image description here

最佳答案

状态变量永远不会改变它们的值。 (请注意,您可以、拥有并且应该使用 const 声明它们,因为它们不会改变)。
组件函数的后续调用将获得一个具有相同名称和不同值的新状态变量。
您的 testFunction函数已关闭旧状态变量。

我怀疑你可以通过引用解决这个问题:

const [testVariable, setTestVariable] = useState(false);
const reference = useRef();
reference.current = testVariable;
… 然后让你的函数测试 reference.current 的值而不是 testVariable .

然而,这确实像 XY Problem真正的解决方案是“使用您传递给 useEffect 的函数的返回值来停止您想要停止的任何内容”(并使用 testVariable 作为 useEffect 的依赖项)。

关于javascript - react 中的异步功能不会对状态变化使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68097901/

相关文章:

javascript - 在Reactjs中,是否可以仅更新满足特定条件的组件的状态

javascript - 从纬度和经度获取海拔高度 (HERE-API)

javascript - 未触发操作 - React-Redux 计数器示例

javascript - 在手机上点击下拉菜单时使容器保持原位

javascript - React 中实际应该渲染的内容

javascript - 如何在 Material UI 中删除芯片

php - AngularJS 和 php 数组数据

javascript - 10 秒后结束 JavaScript 函数

javascript - input 的 event.target 在 this.setState [React.js] 中为 null

react : useRef current getting null