我有一个select字段和onselect事件,我有三个setStates调用来更新本地状态.

观察:写入的setStates数会导致大量的重新呈现.当我 comments setState时,它相应地减少了.

前任:

<select name="cars" id="cars" onselect={(e) => handleSelect(e)}>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

const handleSelect = e => {
    setInvalid(false);
    setValue("some value");
    setError("some error");
};


我的理解是,它将进行批处理,只会导致一次渲染.但得到了3次重新渲染.对此有何解释?

推荐答案

默认情况下,当应用react18自动批处理时,如果在函数中返回n个状态更新,react将只重新渲染组件一次.如果要停止此行为,可以使用flushSync

import { flushSync } from "react-dom";
 const clickMe = () => {
    setName("abc");
    flushSync(() => {
      setCount(30);
      // react will create a re-render here
    });
    setAge(30);
    setPin(1111);
  };

因此,对于上面的示例,当单击clickMe()函数时,react将重新渲染组件两次,但如果您在older version < 18上,则重新渲染将发生n次.

Javascript相关问答推荐

D3多线图显示1线而不是3线

使用axios.获取实时服务器时的404响应

v—自动完成不显示 Select 列表中的所有项目

如何从Intl.DateTimeFormat中仅获取时区名称?

如何解决useState错误—setSelect Image不是函数''

Eval vs函数()返回语义

如何将未排序的元素追加到数组的末尾?

确保函数签名中的类型安全:匹配值

检索相加到点的子项

使用Nuxt Apollo在Piniastore 中获取产品细节

OpenAI转录API错误请求

以编程方式聚焦的链接将被聚焦,但样式不适用

如何确保预订系统跨不同时区的日期时间处理一致?

未捕获语法错误:Hello World中的令牌无效或意外

MongoDB通过数字或字符串过滤列表

无法使用Redux异步函数读取未定义的useEffect钩子的属性';map';

递归地将JSON对象的内容上移一级

与find()方法一起使用时,Mongoose中的$or运算符没有提供所有必需的数据

如何将PNG图像放在wix站点的Open Streemap map 上,使PNG图像成为 map 不可分割的一部分?

如何将.jsx转换为.tsx