我正在做一个待办事项应用程序。这是违规代码的非常简化的版本。我有一个复选框:
<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函数。我需要调用另一个函数来强制状态更新吗?
Ben对于如何解决眼前的问题有很好的答案,但是我也建议您避免重复状态
如果状态处于redux中,则您的复选框应从prop或存储中读取其自身的状态,而不是同时在其自己的组件和全局存储中跟踪检查状态
做这样的事情:
一般规则是,如果您在多个地方找到需要的状态,则将其提升到一个公共父级(并非总是重做),以保持只有一个真实来源