如何更新状态对象键值?
How to update state object key value?
我在组件状态中声明 dateRangePicker 字段,如下所示
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
的函数 form,因为您可以看到我们在某一时刻访问了先前状态的数据:ps.selection
状态是一个不可变的对象,所以你不能修改它,只能创建一个新的,所以使用spread ...表达式来创建一个新的状态。
what your'e tryin to acheive is to change the state of a deep/nested
object in setState..
const startDT = "new start date"
const endDT = "new end date"
this.setState(prevState => ({
...prevState,
dateRangePicker: {
...prevState.dateRangePicker,
selection: {
...prevState.dateRangePicker.selection,
startDate: prevState.startDate = startDT,
endDate: prevState.endDate = endDT,
}
}})
)
或者,
// copy without reference..
const dateRangePicker = { ...this.state.dateRangePicker }
dateRangePicker.selection = {
startDate: startDT,
endDate: endDT,
}
this.setState({ dateRangePicker })
我在组件状态中声明 dateRangePicker 字段,如下所示
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
的函数 form,因为您可以看到我们在某一时刻访问了先前状态的数据:ps.selection
状态是一个不可变的对象,所以你不能修改它,只能创建一个新的,所以使用spread ...表达式来创建一个新的状态。
what your'e tryin to acheive is to change the state of a deep/nested object in setState..
const startDT = "new start date"
const endDT = "new end date"
this.setState(prevState => ({
...prevState,
dateRangePicker: {
...prevState.dateRangePicker,
selection: {
...prevState.dateRangePicker.selection,
startDate: prevState.startDate = startDT,
endDate: prevState.endDate = endDT,
}
}})
)
或者,
// copy without reference..
const dateRangePicker = { ...this.state.dateRangePicker }
dateRangePicker.selection = {
startDate: startDT,
endDate: endDT,
}
this.setState({ dateRangePicker })