react中useState状态异步更新的问题

疑惑

相信刚开始使用react函数组件的小伙伴也遇到过一个坑,就是 useState 更新状态是异步更新的,但是react 并没有提供关于这个问题的解决方案。那我们能否使用自己的方法来解决这个问题呢?答案肯定是可以的。

状态异步更新带来的问题

就拿一个比较常见的场景来说。在react项目中,我们想在关闭对话框后再去处理其他业务。但是 useState 的状态是异步更新的。我们通过setVisible 更新状态后,状态并没有立马更新,这也就说明对话框并没有关闭,这也就造成了我们后面的逻辑在对话框没关闭时就执行了,这并不是我们想要的结果。下面来看我是如何来巧妙的解决这个问题的。

函数式组件解决方案

使用定时器
点击显示对话框,并且给form表单给与初始值。不用定时器的话,对话框还未渲染,自然获取不到里面的form ref。

  // 展示对话框
  const showModal2 = (item) => {
    // todo why???
    setIsModalOpen2(true) //异步
    setTimeout(() => {
      updateRormRef.current.setFieldsValue(item) //给form表单给与初始值
    }, 0)
    console.log(item)
  }

类组件解决方案

在类组件中,我们可以在 setState(newstate,callback) 第二个参数传一个回调来处理本次状态更新后的一些其他业务。

posted @ 2022-10-28 16:09  yunChuans  阅读(563)  评论(0编辑  收藏  举报