当前位置: 首页 > 知识库问答 >
问题:

为什么异步函数中的多个setState调用会导致多个呈现?

郑富
2023-03-14

这个问题在这里总结得很好;基本上,如果您在useEffect中有一个异步函数(这是您期望的函数),您将导致每个更新状态的组件的重新呈现。我通常不想像作者的解决方案/变通方法那样把事情堆在一起,对我来说,这种行为没有意义(您希望所有的状态更新都一起发生)。

export default function App (): JSX.Element {
  const [user, setUser] = useState(null)
  const [pending, setPending] = useState(false)
  
  useEffect(() => {
    setPending(true)
    fetchUser().then((fetchedUser) => {
      setPending(false)
      setUser(fetchedUser) // This updated value won't initially be seen by other effects dependant on 'pending'
    })
  }, [])
  // …
}

共有1个答案

黄修永
2023-03-14

最终弄明白了这一点;看这个。当前需要使用reactdom.unstable_batchedUpdates(()=>{...})手动批处理。尽管有这个名字,但它似乎被广泛认为是相当稳定的。

在React的当前正在开发的并发模式中,它也得到了修正。

 类似资料:
  • 我正在尝试创建多个JavaFX应用程序,直到现在,当我尝试添加时,还没有遇到任何问题。我可以有一个全新的文件,并包括初始化的一行,这将导致异常。我在网上找遍了,什么也没有得到。仅仅添加TextField就会导致异常甚至出现在其他先前运行的k程序中。以下示例: 到目前为止我创建的程序:

  • 本文向大家介绍react多个setState调用的原理是什么?相关面试题,主要包含被问及react多个setState调用的原理是什么?时的应答技巧和注意事项,需要的朋友参考一下 当遇到多个setState调用时,它会提取单次传递给setState的对象,把它们合并在一起形成一个新的单一的对象,并用这个单一的对象去做setState的事情

  • 问题内容: 该功能运行什么?它只会运行吗? 问题答案: setState()将按以下顺序运行函数: 如果您的组件正在接收道具,它将使用上述功能运行该功能。

  • 我从C代码中调用Java方法。每次调用时,我调用AttachCurrentThread,调用后,我调用DetachCurrentThread。 这可以很好地工作,但问题是,我看到了由此导致的ECSESSIVE垃圾收集,即几乎每个通过JNI的调用。VisualVM图形上的小集合基本上都是绿色的!从本机代码到Java的调用速率是每秒数百次。在调用过程中,我还可以看到创建了过多的Java线程,如Thre

  • 我调用了多个ajax调用,但代码只在所有ajax调用执行之后才到达API。 JavaScript: AppFactory API 链接工作很好,但我需要运行两个独立,我真的想知道发生了什么。 谢谢!!!

  • 我正在研究promsies和async/await的用法。 我编写了以下代码,它执行以下操作: 它获取一些数据库数据(使用Knex.js), 处理该数据, 将处理的数据分配到指定的属性中 这3个步骤执行了多次(在下面的代码中,执行了两次),并且始终等待执行: 现在,我正在尝试编写与等效的promise链,这就是我想到的: 但这不太管用。发生的是,在第一个返回之后,中的结束了它的等待,这导致返回-并