Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更新状态对象键值?_Javascript_Reactjs_Setstate - Fatal编程技术网

Javascript 如何更新状态对象键值?

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字段处于组件状态,如下所示

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 })