Javascript 如何更新状态对象键值?
我声明dateRangePicker字段处于组件状态,如下所示Javascript 如何更新状态对象键值?,javascript,reactjs,setstate,Javascript,Reactjs,Setstate,我声明dateRangePicker字段处于组件状态,如下所示 dateRangePicker: { selection: { startDate: new Date(), endDate: new Date(), key: 'selection', }, } 以后的开始日期和结束日期更改如下 let startDate = "2019-04-16"; let endDate = "2019-05-16"; 但是,在遵循代码块之后,我无法在状态中更新这些值 t
dateRangePicker: {
selection: {
startDate: new Date(),
endDate: new Date(),
key: 'selection',
},
}
以后的开始日期和结束日期更改如下
let startDate = "2019-04-16";
let endDate = "2019-05-16";
但是,在遵循代码块之后,我无法在状态中更新这些值
this.setState({
dateRangePicker.selection.startDate : startDate,
dateRangePicker.selection.endDate : endDate,
})
我想相应地更新开始和结束日期,但它没有按照您显示的方式工作。应该是这样的:
this.setState(ps=>({
...ps,
dateRangePicker:{
...ps.dateRangePicker, // Copy old data
selection: {
...ps.dateRangePicker.selection, // Same here
startDate: startDate
endDate: endDate
},
}
}))
我们使用setState的函数,因为您可以看到,在某一点上,我们访问以前状态的数据:ps.selection它的工作方式与您显示的不一样。应该是这样的:
this.setState(ps=>({
...ps,
dateRangePicker:{
...ps.dateRangePicker, // Copy old data
selection: {
...ps.dateRangePicker.selection, // Same here
startDate: startDate
endDate: endDate
},
}
}))
我们使用setState的函数,因为您可以看到,在某一点上,我们从以前的状态访问数据:ps.selection该状态是一个不可变的对象,因此您不能修改它,而是创建一个新的状态,因此使用spread。。。表达式来创建新状态 状态是一个不可变的对象,因此您不能修改它,而是创建一个新的对象,因此使用spread。。。表达式来创建新状态 你想要达到的是改变深层/嵌套结构的状态 对象在setState中 或者 你想要达到的是改变深层/嵌套结构的状态 对象在setState中 或者
更新整个对象,而不是其一部分更新整个对象,而不是其选择的一部分在dateRangePicker对象中可用?选择在dateRangePicker对象中可用?
// copy without reference..
const dateRangePicker = { ...this.state.dateRangePicker }
dateRangePicker.selection = {
startDate: startDT,
endDate: endDT,
}
this.setState({ dateRangePicker })