Ожидайте не работает в использованииEffect с redux - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь получить некоторые данные из API и установить данные в моем хранилище избыточности. Тем не менее, когда я пытаюсь выполнить какую-либо операцию с данными из хранилища избыточных данных, эта переменная становится пустой. Я использовал await, но, похоже, это не работает. Тем не менее, после использованияEffect данные хранилища избыточных данных (данные API) видны и могут выполнять над ними операции. Любая помощь приветствуется. Обратите внимание, что мне нужно получить доступ к полю хранилища резервов, а не просто получить возвращенные данные из функции . Доступ к полю избыточного хранилища важен. Вот мой код:

useEffect(() => {
    async function loadData() {
      const startingDateYear = moment();
      const eventDates = generateDatesForYear(startingDateYear.year().toString());
      await dispatch(fetchData('0009', eventDates[0], eventDates[1]));
    }
    loadData();
    console.log(event.myDataArray) // event is a reducer and myDataArray is the field. It can be accessed outside the function with data incorporated but within useEffect I am not able to use the freshly fetched data.
    return {};
  }, []);


 export const fetchData = (p1, p2, p3) => {
  return async dispatch => {
    const path = `dataFromAPIURL`;
    try {
      dispatch({
        type: FETCH_STARTED,
      });

      const myDataArray = await RestService.get(path);
      dispatch({
        type: FETCH_FINISHED,
      });

      dispatch({
        type: UPDATE_REDUCER_STATE,
        payload: myDataArray,
      });

      return myDataArray;
    } catch (error) {
      // TODO: error handling
      dispatch({ type: FETCH_ERROR, payload: error });
    }
  };
};

1 Ответ

1 голос
/ 05 марта 2020

Вам нужен второй useEffect с зависимостью event.myDataArray

useEffect(() => {
  async function loadData() {
    const startingDateYear = moment();
    const eventDates = generateDatesForYear(startingDateYear.year().toString());
    await dispatch(fetchData("0009", eventDates[0], eventDates[1]));
  }
  loadData();
}, []);

useEffect(() => {
  console.log(event.myDataArray);
}, [event.myDataArray]);
...