Javascript 使用setState对本机更新对象作出反应
是否可以使用Javascript 使用setState对本机更新对象作出反应,javascript,react-native,Javascript,React Native,是否可以使用setState更新对象?我尝试了以下代码: import moment from 'moment'; constructor() { super(); this.state = { pressedDate:{ }, } } updateState = (day) => { let updateDay = moment(day.dateString).format(_format); //When I co
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
更新我的对象,但运行此代码时什么也没发生 您说过“什么都没有发生”,但该代码显然将此.state.pressedDate替换为一个新对象,该对象仅具有updateDay
属性
如果您想添加/更新updateDay
而不完全替换pressedDate
(即,如果它有其他属性),您可以制作一份副本,然后更新副本。使用属性扩展的惯用方法是:
this.setState(({pressedDate}) => ({
pressedDate: {
...pressedDate,
updateDay : {dots: [vacation, massage, workout], selected: true}
}
}));
需要注意的两个关键事项:
setState
。因为,无论何时根据现有状态设置状态(更新的pressedDate
),您都必须使用回调版本(除updateDay
之外的pressedDate
)…按EdDate
将当前版本的属性展开到正在创建的新对象中。然后我们添加updateDay
,这将覆盖以前的任何一个你凭什么认为什么都没发生?确实发生了一些事情,您用一个新对象替换
此.state.pressedDate
。请使用演示问题的工具更新您的问题,最好是使用堆栈片段([]
工具栏按钮)运行的工具。堆栈代码段支持React,包括JSX。(我知道您使用的是React Native,但React示例足以说明问题并让人们帮助您解决问题。)谢谢您的回答。我认为你是对的,但我有一个问题。当我说什么都没有发生时,我的意思是updateDay
,它是2019-06-30
在我调用setState
时没有被替换。事实上,当我遵循您的代码后,当我console.log(this.state.pressedDate)
时,它仍然不会将updateDay
替换为“2019-06-30”。@kirimi-这是因为。但更新状态将使React重新呈现组件(也是异步的)。如果在状态更新后需要回调,可以为setState
,提供第二个函数。