React Hook useState для установки пропала - PullRequest
0 голосов
/ 03 октября 2019

Я инициализирую missingWeekDays как пустой массив []. Я создаю массив строк weekdays и присваиваю missingWeekDays. Но когда у меня консоль weekdays имеет контент, а missingWeekDays все еще пуст. Почему это так?

Некоторые предположили, что setMissingWeekDays должен иметь обратный вызов, как старый setState. Но я не могу найти никакой документации по этому обратному вызову ... Ссылка была бы признательна!

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
}

1 Ответ

0 голосов
/ 03 октября 2019

Ваш установщик из useState обрабатывается асинхронно. Это приводит к тому, что в журнале вашей консоли нет обновленных данных. Эта тема добавляет больше цвета для вас:

метод использования useState, не отражающий немедленное изменение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...