我有一条要通过道具的数据,这些数据将用于桌子,因此我可以显示整个工作日的营业时间和营业时间。

这里的问题是我无法以创建状态保存此信息。我在这里做错了什么?

    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: []
}


谢谢!

最佳答案

您不能在调用this.state.scheduleTime方法后立即检查setState的值并获取新值,因为尚未重新渲染组件。

this.setState({
    scheduleTime: scheduleTime
})
console.log('4', this.state.scheduleTime) //logs scheduleTime: []


或者,您可以在componentDidUpdate方法中检查新值,也可以这样编写:

this.setState({
    scheduleTime: scheduleTime
}, () => console.log('4', this.state.scheduleTime))

10-04 22:46
查看更多