reactjs - 无法从孩子执行第二个 setState
问题描述
我无法在父状态下更新 filterTimeframe。它正在改变 filterDate 罚款。我没有包含代码,但 datePickerApply 从 DatePicker 库中获取值。第二个,setTimeframe 是来自选择下拉列表的 onChange。两者都在子组件中。
更新: 我为 Parent 复制粘贴了错误的代码。
class Child extends React.Component {
constructor(props) {
super(props);
this.state = null;
this.datePickerApply = this.datePickerApply.bind(this);
this.setTimeframe = this.setTimeframe.bind(this);
}
datePickerApply(event, picker) {
if (typeof this.props.setDate === 'function') {
this.props.setDate(picker.startDate.format('YYYY-MM-DD'));
}
}
setTimeframe(event) {
if (typeof this.props.setTimeframe === 'function') {
this.props.setTimeframe(event.target.value);
}
}
}
class Parent extends React.Component {
constructor(props) {
super(props);
this.state = {
filterDate: [],
filterTimeframe: [],
}
}
setDate = (filterDate) => {
this.setState((state) => {
return {filterDate: filterDate}
});
console.log(this.state.filterDate)
}
setTimeframe = (filterTimeframe) => {
this.setState((state) => {
return {filterTimeframe: filterTimeframe}
});
console.log(this.state.filterTimeframe)
}
render() {
return (
<div className="container">
<div className="container-fluid" id="main-header">
<Child filterDate={this.state.filterDate} filterTimeframe={this.state.filterTimeframe} setDate={this.setDate} setTimeframe={this.setTimeframe}} />
</div>
</div>
);
}
}
解决方案
你放console.log
错了位置。setState
函数是异步的。阅读更多:https ://stackoverflow.com/a/40408976/11285186
setDate = (filterDate) => {
this.setState((state) => {
return {filterDate: filterDate}
}, () => {
console.log(this.state.filterDate);
});
}
setTimeframe = (filterTimeframe) => {
this.setState((state) => {
return {filterTimeframe: filterTimeframe}
}), () => {
console.log(this.state.filterTimeframe);
});
}
推荐阅读
- swiftui - SwiftUI 无法将字符串从 Appstorage 转换为 Int。此外,在更新第二个视图时,它会在每次击键后创建一个新视图
- typescript - typescript Intellisense 没有显示变量的类型或带我去定义
- sql-server - 分布式sql服务器缓存中的执行超时已过期?
- python - 如何按嵌套值对字典进行排序?
- r - 从列表列表中提取一个元素/数据框
- reactjs - 在 nextjs 中正确编写 API 语法
- python - 远程结束关闭连接无响应
- angular - Angular 11 POST 方法不会发布查询参数
- java - Apache Flink - 将卷挂载到 Job Pod
- mysql - 设计一个数据库来举办类似 Kaggle 的比赛