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

反应钩子:为什么一个异步函数中的几个USESTEAT设置器会导致几个重新编写器?

米楚青
2023-03-14

以下onClick回调函数将导致1次重新呈现:

const handleClickSync = () => {
  // Order of setters doesn't matter - React lumps all state changes together
  // The result is one single re-rendering
  setValue("two");
  setIsCondition(true);
  setNumber(2);
};

Reaction将所有三种状态的变化聚集在一起,并导致1个重新生成器。

const handleClickAsync = () => {
  setTimeout(() => {
    // Inside of an async function (here: setTimeout) the order of setter functions matters.
    setValue("two");
    setIsCondition(true);
    setNumber(2);
  });
};

您可以使用这个CodeSandBox来体验这种行为。

共有1个答案

张鹏鹍
2023-03-14

现在只在事件处理程序中对批处理syncsetstate进行响应。但是在React18中,它可以在settimeoutuseeffects等中使用。这里有来自Dan https://github.com/reactwg/reactwg/react-18/discussions/21的精彩解释

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

  • 在运行run函数时,我希望value变量的值为“new”,但即使是500毫秒,它仍然是“old”。为什么会发生这种情况,如何解决这个问题?

  • contentFor钩子方法 范围:这是一个插件的钩子方法。 用途:该方法可以在构建时被调用,直接在content-for标签的地方插入需要的内容。如果不是开发插件的话,就直接忽略他们就行了 描述:在默认生成的app/index.html里,有几处用到content-for标签,类似于{{content-for 'head'}}、{{content-for 'body'}},它们需要等待某个插件的

  • OutFile "常用API函数集.EXE" Name "常用API函数集" Section ;获得安装程序所在目录 System::Call 'kernel32::GetCurrentDirectory(i 1024,t .R1)' MessageBox MB_OK '安装程序所在目录:$R1' ;获得当前安装程序进程PID System::Call 'kernel32::GetCurrent

  • 我试图在缺货产品的单一产品页面上显示“缺货信息”。 我在 我得到以下错误: 注意:股票被错误地调用。不应直接访问产品属性。回溯:要求('wp-blog-header.php'),require_once('wp-包括/template-loader.php'),包括('/plugins/wooCommerce/模板/single-product.php'),wc_get_template_part

  • 问题内容: 为什么没有很多用Java编写的商业3D视频游戏(不是随机开放源2D游戏)?从理论上讲,这很有意义:您几乎免费地获得了生产力的提高和一个跨平台的应用程序,其中包括大量的Java库和内置的垃圾收集器(尽管我承认我我不确定后者是否是一件好事。那么为什么很少使用它呢?我只能想到为Java平台编写的几个流行的商业游戏。 是因为性能吗?如果是这样,GPU难道不是大部分的繁重工作吗? 问题答案: 游