Javascript 等待redux存储区的特定属性从React组件外部更新
通常情况下,我在React组件中要做的是使用Javascript 等待redux存储区的特定属性从React组件外部更新,javascript,reactjs,redux,redux-saga,redux-thunk,Javascript,Reactjs,Redux,Redux Saga,Redux Thunk,通常情况下,我在React组件中要做的是使用connect功能订阅redux存储,在这种情况下,我可以访问redux存储,并在它更新时感知它 我想等待存储从组件外部更新到.js文件 以下是我迄今为止所做的工作: //socket-client.js file import { store } from "../../Redux/store"; //socket.on() function socket.on( "setQuestionsArrayOnTheAccepter", asyn
connect
功能订阅redux存储,在这种情况下,我可以访问redux存储,并在它更新时感知它
我想等待存储从组件外部更新到.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 saga)发送一个同步的redux saga
因此,我希望能够在运行socket.emit()之前等待FetchGameResultArray成功操作被分派,并且gameResultArray被更新。您是否尝试过像redux saga这样的中间件?我使用的是saga middlewars,可能上面的代码不清楚。但我使用的是另一个模块中的传奇,单人传奇。由于我需要执行几乎完全相同的操作,所以我不想重新编写代码。这里的主要问题是代码运行在不同的磁带上,所以我依赖socket.io来通知我其他播放机已经完成了执行,但是这个操作不是同步的
// 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));
}
};
};