简体   繁体   English

React Hook useState setter for prop 失败

[英]React Hook useState setter for prop fails

I initialise missingWeekDays as an empty array [] .我将missingWeekDays初始化为一个空数组[] I create an array of strings weekdays and assign to missingWeekDays .我创建了一个字符串数组weekdays并分配给missingWeekDays But when I console out weekdays has content but missingWeekDays is still empty.但是当我安慰weekdays有内容但missingWeekDays仍然是空的。 Why is that?这是为什么?

Some suggested that setMissingWeekDays should have a callback like old setState .有人建议setMissingWeekDays应该有一个像旧的setState一样的回调。 But I can't find any documentation on this callback... A link would be appreciated!但是我找不到有关此回调的任何文档...链接将不胜感激!

import React, { FC, useEffect, useState } from 'react'

const Component: FC = () => {

    const initialStart = moment()
        .year(2018)
        .week(5)
        .startOf('isoWeek')

    const [missingWeekDays, setMissingWeekDays] = useState<string[]>([])
    const [startDate, setStartDate] = useState(initialStart)

    useEffect(() => {
        const weekdays = createWeekdaysList(startDate.toDate())
        setMissingWeekDays(weekdays)
        console.log(missingWeekDays, weekdays)
    }, [startDate])

    return <CigarettesDetails onTimeChange={handleTimeChange} data={data} />
}

export default CigarettesDetailsContainer

const createWeekdaysList = (startDate: Date): string[] => {
    const weekdaysList: string[] = []

    let weekDay = 0
    while (weekDay < 7) {
        const date: string = moment(startDate)
            .clone()
            .add(weekDay, 'day')
            .format('YYYY-MM-DD')

        weekdaysList.push(date)
        weekDay += 1
    }

    return weekdaysList
}

Your setter from useState gets handled asynchronously.来自 useState 的设置器被异步处理。 This results in your console log not having the updated data.这会导致您的控制台日志没有更新的数据。 This thread adds more color for you:该线程为您添加了更多颜色:

useState set method not reflecting change immediately useState 设置方法不会立即反映更改

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM