gpt4 book ai didi

javascript - Redux 中一个 action 依赖另一个 async action 怎么办?

转载 作者:行者123 更新时间:2023-11-29 10:36:24 25 4
gpt4 key购买 nike

对不起我的英语,我希望你能理解我。

我使用 redux-thunk用于异步操作。

// actionA.js
export function actionA() {
return fetch('api call')
.then((data) => ({
type: 'actionA',
data: data
}))
}

// reducer.js
export function reducer(state, action) {
...
if(action.type === 'actionA') {
return {
...,
dataA: action.data,
...
};
}
}

// actionB.js
export function actionB() {
return (dispatch, getState) => {
if(!getState().dataA) {
dispatch(actionA());
}
doSomethingWithDataA(getState().dataA);
};
}

在某些情况下,我只需要调度 actionA不 dispatch actionB .但是当我调度 actionB , actionB将使用 dataA , 和 dataAactionA 创建.所以在 actionB ,我会检查是否有dataAStore ,如果没有,我会派actionA第一的。但是actionA是一个异步操作,我在actionA 时无法获取已经完成了。那么如何处理这个问题呢?

最佳答案

一般来说,当 dataA 准备好并且 actionB 发生时,您想做一些事情。您可以使用 middleware 来做到这一点

function myMiddleware() {
return store => next => action => {
const dataA = store.getState().dataA;
if(store.getState().dataA && action.type === 'actionB') {
doSomethingWithDataA(dataA);
}
};
}

然后你的actionB变成下面的

function lazyFetchDataA() {
return (dispatch, getState) => {
if(!getState().dataA) {
return dispatch(actionA());
} else {
return Promise.resolve();
}
}
}

export function actionB() {
return (dispatch, getState) => {
lazyFetchDataA().then(() => dispatch({type: 'actionB'}))
}
}

这看起来很难,但现在您可以在适当的地方使用少量代码来完成您的工作。

如果您提供更多信息doSomethingWithDataA 是什么,您可能不必做这么困难的事情,我会给出更好的答案。

关于javascript - Redux 中一个 action 依赖另一个 async action 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35742990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com