Состояние реакции не обновляется после вызова диспетчеризации с использованием хука React useContext

Ура, ребята, здесь новичок в React.
По сути, я пытаюсь получить обновленное состояние с помощью React.useContext крючок.

В state устанавливается внутри вызова функции, в которой размещается отправка, а вызов функции привязывается к событию onClick кнопки.

Функция, в которой вызывается отправка:

const fetchLocation = async (id: number) => {
    const [, result] = await getLatestLocation()
    dispatch({ 
      type: "LOCATION_FETCHED", 
      payload: result 
    })
    console.log(result) //this prints the latest/updated location even on button first click
  }

Редуктор:

case "LOCATION_FETCHED": {
      return {
        ...state,
        location: payload,
      }
    }

Вызов функции в компоненте:

const { 
    fetchLocation, 
    location
   } = React.useContext(locationContext)
  const [fetchingLocation, setFetchingLocation] = useState(false)
  const getLocation = (id: number) => {
     fetchLocation(id)
      .then(() => {
        setFetchingLocation(true)
      })
      .finally(() => {
        setFetchingLocation(false)
        console.log(location) //this prints nothing or empty on the first button click
      })
  }

Кнопка onClick привязки функции:

onClick={() => getLocation(143)}

Я не уверен, что происходит, при первом щелчке ничего не регистрируется, но при втором щелчке я получил обновленное состояние местоположения.

1 ответ

Решение

Как говорится в комментариях, рассылка работает асинхронно. Итак, если вы хотите узнать новое значение, вам следует использовать хук useEffect, подобный этому.

useEffect(() => {
  console.log(location)
}, [location])

Подробнее об этом можно прочитать здесь: https://reactjs.org/docs/hooks-effect.html

Другие вопросы по тегам