javascript - ReactJS 中的 setState 方法没有更新字段

标签 javascript reactjs

存储受控表单元素的数据后,我想将输入类型的值重置为空。 在下面的这个方法中,setState 没有将其设置为空。不知道为什么。

 handleSubmit = event => {
        event.preventDefault();
        this.props.dispatch(passengerActions.addPassenger(this.state.passenger));
        this.setState({ ...this.state.passenger, firstName: "", lastName: "" });
  };

下面的方法有效

handleSubmit = event => {
    event.preventDefault();
    this.props.dispatch(passengerActions.addPassenger(this.state.passenger));
    const passenger = {
      ...this.state.passenger,
      firstName: "",
      lastName: ""
    };
    this.setState({ passenger });
};

请帮助我理解为什么第一种方法不起作用。我是 ReactJS 新手。

最佳答案

在第一个中,您将 passenger 对象分布在您所在州的顶层级别,并添加 firstNamelastName 也在顶层。

您可能想要更新 passenger,这就是您在第二个中所做的:

this.setState({passenger: { ...this.state.passenger, firstName: "", lastName: "" }});
// −−−−−−−−−−−−^^^^^^^^^^−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^

但是,每当根据现有状态(您要复制的 passenger 中的其他字段)更新状态时,通常最好使用回调表单,因为状态会更新是异步的并且可以一起批处理:

this.setState(({passenger}) => ({passenger: { ...passenger, firstName: "", lastName: "" }}));

关于javascript - ReactJS 中的 setState 方法没有更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466563/

相关文章:

javascript - 如果 styleName 存在,则检查 React 组件

javascript - 为什么 React 在 onChange 上更新状态而不在 onSubmit (输入)上更新状态?

reactjs - Heroku 重定向 Next.js React 客户端应用程序 http 到 https

javascript - 使用ajax在while循环中更新MySql数据库记录 - 仅更新第一行

javascript - User.Identity.Name 在 Safari 浏览器上为空

javascript - 支持 WebGL 模板缓冲区

javascript - 使用 React.js 使用react-chartjs 在条形图中显示最新标签

reactjs - 这两种rootSaga配置有什么区别

javascript - 在 div 内拖动而不是滚动

javascript - 如何使用 Fetch API 下载和保存文件? ( Node .js)