Javascript Object.keys映射不工作后的设置状态
我有一段数据,我正在通过道具传递,并将用于表格,因此我可以显示整个星期的开始和结束时间 这里的问题是,我无法在我创建的状态中保存此信息。我做错了什么Javascript Object.keys映射不工作后的设置状态,javascript,reactjs,Javascript,Reactjs,我有一段数据,我正在通过道具传递,并将用于表格,因此我可以显示整个星期的开始和结束时间 这里的问题是,我无法在我创建的状态中保存此信息。我做错了什么 constructor(props) { super(props); this.state = { weekDays: moment.weekdays(true), scheduleTime: [] } } componentDidM
constructor(props) {
super(props);
this.state = {
weekDays: moment.weekdays(true),
scheduleTime: []
}
}
componentDidMount() {
const openingSchedule = this.props.operationDays; //data passed by props
console.log(openingSchedule);
let scheduleTime;
console.log('1', scheduleTime)
Object.keys(openingSchedule).map(key => { //obj through a map
console.log('week day',key) //logs a week day, between monday and sunday
console.log('schedule for ' + key, openingSchedule[key]) //logs OpenHours {endTime: '23:00', startTime: '08:00'}
if (openingSchedule[key] && openingSchedule[key].startTime) {
scheduleTime = openingSchedule[key].startTime;
console.log('2', scheduleTime) // logs 08:00
}
})
console.log('3', scheduleTime)
this.setState({
scheduleTime: scheduleTime
})
console.log('4', this.state.scheduleTime) //logs scheduleTime: []
}
谢谢大家! 调用
setState
方法后,无法检查this.state.scheduleTime
的值,并获取新值,因为组件尚未重新渲染
this.setState({
scheduleTime: scheduleTime
})
console.log('4', this.state.scheduleTime) //logs scheduleTime: []
或者在componentdiddupdate
方法中检查新值,也可以这样编写:
this.setState({
scheduleTime: scheduleTime
}, () => console.log('4', this.state.scheduleTime))
调用
setState
方法后,无法检查this.state.scheduleTime
的值并获取新值,因为组件尚未重新呈现
this.setState({
scheduleTime: scheduleTime
})
console.log('4', this.state.scheduleTime) //logs scheduleTime: []
或者在componentdiddupdate
方法中检查新值,也可以这样编写:
this.setState({
scheduleTime: scheduleTime
}, () => console.log('4', this.state.scheduleTime))
这是因为
setState
处于异步状态。它将立即设置,您可以使用回调,例如
this.setState({scheduleTime}, () => {console.log(this.state.scheduleTime)})
这是因为
setState
处于异步状态。它将立即设置,您可以使用回调,例如
this.setState({scheduleTime}, () => {console.log(this.state.scheduleTime)})
这没什么区别,@DacreDenny.:/在状态下,您有一个数组
scheduleTime:[]
,但是在componentDidMount
中,您用一个时间值替换它。因此渲染可能会中断。尝试scheduleTime=[scheduleTime];this.setState({scheduleTime})
。另外,setState
是一个异步函数。因此,您将不会在此处获得更新的值:console.log('4',
)。如果要在状态更新后执行某些操作,请尝试this.setState({…},()=>{//your code})
setState函数不是同步的,因此在执行时日志4仍然为空是正常的:正如@loopingz所说,setState是异步的,console.log在此不起作用。您可以在render()中写入控制台日志方法并检查输出。它没有任何区别,@DacreDenny.:/在状态中,您有一个数组scheduleTime:[
,但是在componentDidMount
中,您用一个时间值替换它。因此您的渲染可能会中断。请尝试scheduleTime=[scheduleTime];此.setState({scheduleTime})
。另外,setState
是一个异步函数。因此,您不会在此处获得更新值:console.log('4',
。如果要在状态更新后执行某些操作,请尝试this.setState({…},()=>{//您的代码})
setState函数不是同步的,因此在执行时日志4仍然为空是正常的:正如@loopingz所说,setState是异步的,console.log在此不起作用。您可以在render()中写入控制台日志方法并检查输出。好的,这样我可以看到值确实被存储了!好的,这样我可以看到值确实被存储了!