Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 Object.keys映射不工作后的设置状态_Javascript_Reactjs - Fatal编程技术网

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()中写入控制台日志方法并检查输出。好的,这样我可以看到值确实被存储了!好的,这样我可以看到值确实被存储了!