是否可以使用update object
来setState
?我尝试了这段代码:
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
更新对象,但是运行此代码时什么也没发生。
答案 0 :(得分:1)
您已经说过“什么都没有发生”,但是该代码显然用仅有this.state.pressedDate
属性的新对象替换了 updateDay
。
如果您要添加/更新updateDay
而没有完全替换pressedDate
(也就是说,如果它具有其他属性),则可以通过制作副本然后更新副本来实现。使用属性传播的惯用方式:
this.setState(({pressedDate}) => ({
pressedDate: {
...pressedDate,
updateDay : {dots: [vacation, massage, workout], selected: true}
}
}));
这里要注意的两个关键事项:
setState
的回调版本。由于state updates are asynchronous,因此您必须在基于现有状态({{1}的其余部分,除{{1}之外)设置状态(更新的pressedDate
)时使用回调版本}}。pressedDate
将当前版本的属性扩展到正在创建的新对象中。然后我们添加updateDay
,它将覆盖以前的任何一个。