reactjs - React setState 不立即更新

标签 reactjs redux state setstate

我正在开发一个待办事项应用程序。这是有问题的代码的一个非常简化的版本。我有一个复选框:

 <p><input type="checkbox"  name="area" checked={this.state.Pencil}   onChange={this.checkPencil}/> Writing Item </p>

这是调用复选框的函数:

checkPencil(){
   this.setState({
      pencil:!this.state.pencil,
  }); 
  this.props.updateItem(this.state);
}

updateItem 是一个映射到调度到 redux 的函数

function mapDispatchToProps(dispatch){
  return bindActionCreators({ updateItem}, dispatch);
}

我的问题是,当我调用 updateItem 操作和 console.log 状态时,它总是落后 1 步。如果该复选框未选中且不为 true,我仍然会将 true 状态传递给 updateItem 函数。我需要调用另一个函数来强制状态更新吗?

最佳答案

您应该调用第二个函数作为 setState 的回调,因为 setState 是异步发生的。像这样的东西:

this.setState({pencil:!this.state.pencil}, myFunction)

但是,在您的情况下,由于您希望使用参数调用该函数,因此您必须更有创意,也许可以创建自己的函数来调用 Prop 中的函数:

myFunction = () => {
  this.props.updateItem(this.state)
}

将它们组合在一起应该可以工作。

关于reactjs - React setState 不立即更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38558200/

相关文章:

javascript - 如何将 json 数据推送到 React-vis 的 XY 数组中?

javascript - 下一个JS : Right way to fetch client-side only data in a Functional Component

selenium - 如何使用 Selenium 测试 ReactJS Web 应用程序?

reactjs - 处理使用 Material-ui 风格化的 redux-form 的表单 props

javascript - 如何使用在 React 初始状态中声明的空数组?

Flutter 重建父部件

javascript - 在 SWR 获取请求中使用 Next.js 动态路由查询对象

javascript - 使用 Ramda 镜头更改对象中的值属性

angularjs - 如何使用 ng-model 更新 Redux 状态?

reactjs - 在另一个 axios 请求中使用 axios 响应数据