как дождаться завершения вызова диспетчеризации redux - PullRequest
1 голос
/ 27 мая 2020

Я отправляю действие из моего кода в логин, которое содержит запрос API для входа и установки переменной currentUser в моем магазине. Сразу после отправки я хотел бы проверить, установлен ли currentUser, однако, поскольку отправка асинхронная, условие if сначала считывает текущего пользователя как "", и мне нужно дважды инициировать событие, чтобы переменная currentUser была прочитана с ожидаемым данные. Я попытался использовать asyn c -await, но проблема не исчезла. Как я могу завершить отправку перед переходом на следующую строку?

Откуда я отправляю:

async function handleSubmit() {
  const details = {
    "username": userName,
    "password": password
  }
  await props.login( details ) ### This is the dispatch ###
  if ( props.currentUser !== "" ) props.handleAuthentication()
}

Это мое действие, которое я вызываю в отправке:

export function login( details ) {
    const url = 'user/login'
    const requestOptions = {
      method: 'POST',
      credentials: 'include',
      body: JSON.stringify( details )
    };
    return ( dispatch ) => {
    return fetchReq( requestOptions, url ).then( ([response]) => {
        if( response.status === RESPONSE.OK ){
          dispatch( loginSuccess(details.username) )
      }
      else{
        dispatch( loginError() )
      }
    } )
  }
}

Вспомогательная функция для вышеуказанного действия:

export function fetchReq( options, endpoint ) {
  const url = 'api/' + endpoint
  return fetch(url, options)
    .then( response => Promise.all([response, response.json()]));
}

1 Ответ

1 голос
/ 27 мая 2020

использовать жизненный цикл реакции для обработки изменений в вашем состоянии redux, которое должно быть сопоставлено с props. componentDidUpdate для classi c react подойдет. если вы используете хуки, useEffect передается в качестве второго аргумента [props.currentUser], который является значением, которое вы хотите отслеживать.

...