Дождитесь обновления определенного свойства хранилища приставки извне компонента React - PullRequest
0 голосов
/ 06 ноября 2019

Обычно, что я буду делать внутри компонента React, это использовать функцию connect для подписки на хранилище с избыточностью, в этом случае у меня есть доступ к хранилищу с избыточностью и я знаю, когда он обновляется.

Я хочу дождаться обновления хранилища снаружи компонента и файла .js.

Вот что я сделал до сих пор:

//socket-client.js file

import { store } from "../../Redux/store";
//socket.on() function
socket.on(
  "setQuestionsArrayOnTheAccepter",
  async ({ questionsArray, roomNameOnTheStore }) => {

    await store.dispatch(setQuestionsArray(questionsArray)); // this await on the setQuestionArray has no effect
    store.dispatch(setGameProgress());

    const { game } = store.getState();
    const { gameQuestionArray, gameResultArray } = game;

    // gameResultArray = [] will be empty here, and I want the saga to finish before the socket.emit

    socket.emit("sendSetQuestionsArrayOnTheSender", {
      gameQuestionArray,
      gameResultArray,
      roomNameOnTheStore
    });
  }
);

Проблема заключается в том, что gameResultArrayпусто ([]) по умолчанию, и из действия setQuestionsArray я отправляю асинхронную реду-сагу с использованием Axios (саги fetchGameResultStart)

// set QuestionsArray action
export const setQuestionsArray = (
  questionsArray,
  shouldShuffle = true,
  multiplayer = false,
  gameResultArray = null
) => {
  if (shouldShuffle) questionsArray = getRandom(questionsArray, 10);

  // using thunk middelware
  return dispatch => {
    dispatch({ type: GAME_TYPES.SET_QUESTIONS_ARRAY, payload: questionsArray });

    if (!multiplayer) {
      dispatch(fetchGameResultArrayStart(questionsArray, shouldShuffle));
    } else if (gameResultArray) {
      dispatch(fetchGameResultArraySuccess(gameResultArray));
    }
  };
};

Итак, я хочу иметь возможность ждатьотправка действия fetchGameResultArraySuccess и обновление gameResultArray перед выполнением socket.emit ()

...