使用setState的react-native更新对象

时间:2019-06-10 09:32:10

标签: javascript react-native

是否可以使用update objectsetState?我尝试了这段代码:

import moment from 'moment';

constructor() {
    super();
    this.state = {
      pressedDate:{
      },
    }
  }

updateState = (day) => {
    let updateDay = moment(day.dateString).format(_format);
    //When I console.log updateDay, I get this '2019-06-30' 
    console.log(updateDay,'updateDay')

   //I want to update pressedDate with updateDay which is '2019-06-30' 
    this.setState({
      pressedDate:{
         updateDay : {dots: [vacation, massage, workout], selected: true}
      }
    })
  }

我正在尝试使用updateDay更新对象,但是运行此代码时什么也没发生。

1 个答案:

答案 0 :(得分:1)

您已经说过“什么都没有发生”,但是该代码显然用仅有this.state.pressedDate属性的新对象替换了 updateDay

如果您要添加/更新updateDay而没有完全替换pressedDate(也就是说,如果它具有其他属性),则可以通过制作副本然后更新副本来实现。使用属性传播的惯用方式:

this.setState(({pressedDate}) => ({
    pressedDate: {
       ...pressedDate,
       updateDay : {dots: [vacation, massage, workout], selected: true}
    }
}));

这里要注意的两个关键事项:

  1. 它使用的是setState的回调版本。由于state updates are asynchronous,因此您必须在基于现有状态({{1}的其余部分,除{{1}之外)设置状态(更新的pressedDate)时使用回调版本}}。
  2. pressedDate将当前版本的属性扩展到正在创建的新对象中。然后我们添加updateDay,它将覆盖以前的任何一个。