我觉得问这个问题可能很傻,但相信我,我是个新手.谁能给我解释一下为什么我们在ReactjS中使用prevState.我努力go 理解,但失败了.

Here is my code. Please Help me to understand

 state = {
    placeName : '',
    places : []
}



placeSubmitHanlder = () => {
    if(this.state.placeName.trim()===''){
      return;
    }
    this.setState(prevState => {
      return {
        places : prevState.places.concat(prevState.placeName)
      };
    });
  };

推荐答案

prevState是传递给setState回调函数的参数的名称.它所持有的是setState被React触发之前的状态值;由于setState进行批处理,因此,当您想要基于前一状态值更新新状态时,了解前一状态是什么有时很重要.

因此,如果多个setState调用正在更新同一个状态,批处理setState调用可能会导致设置不正确的状态.考虑一个例子:

state = {
   count: 0
}
updateCount = () => {
    this.setState({ count: this.state.count + 1});
    this.setState({ count: this.state.count + 1});
    this.setState({ count: this.state.count + 1});
    this.setState({ count: this.state.count + 1});
}

在上面的代码中,您可能希望count的值是4,但实际上它是1,因为对setState的最后一次调用将在批处理期间覆盖之前的任何值.解决此问题的方法是使用函数设置状态:

updateCount = () => {
    this.setState(prevstate => ({ count: prevstate.count + 1}));
    this.setState(prevstate => ({ count: prevstate.count + 1}));
    this.setState(prevstate => ({ count: prevstate.count + 1}));
    this.setState(prevstate => ({ count: prevstate.count + 1}));
}

Reactjs相关问答推荐

react-hook-form问题:为什么getValues不返回大多数当前值?

Firebase删除UserWithEmail AndPassword仅创建匿名用户

Reaction-路由v6动态路径RegExp

生成Reaction Vite应用程序的停靠容器时无法识别环境变量

在构建或部署Reaction应用程序时出错

如何使用.Aggregate从多个集合中获取数据,包括使用Mongoose+NextJS的SUM值

GitHub页面配置

无法在REACTION TANSTACK查询中传递参数

useEffect firebase 清理功能如何工作?

错误:操作必须是普通对象.使用自定义中间件进行异步操作. Redux/工具包

UseEffect 似乎不适用于页面的首次渲染

如何将 npm 包添加到我的 Vite + React 应用程序中?

无法通过react 路由中的链接传递信息

改变输入的默认值时出现问题:number react-hook-form

react 本机日历

react 页面更新

Lodash 在命名导入中导入整个包

将鼠标悬停在仅适用于该类的第一个实例的 p5.js 类上

我在使用 Elements of stripe 时使用 React router v6

如何在组件文件夹内的react 组件文件中导入外部css文件?