您可以从thunk返回一个承诺,但是如果您想坚持使用sagas,除了更改redux存储状态之外,没有简单的方法让发送操作的组件知道saga已经完成。
因此,我将使用一个减速器,例如:
export (state = {checkingCode: false}, action) => {
switch (action.type) {
case APP_CHECK_CODE:
return {...state, checkingCode: true};
case APP_CHECK_CODE_WRONG:
case APP_CHECK_CODE_SUCCESS:
return {...state, checkingCode: false};
default:
return state;
}
}
然后显示/隐藏基于
checkingCode
价值
从理论上讲,如果您真的想让组件本身保持状态,您可以将类似于观察者的内容传递给传奇,然后等待。
// component
const observable = Observable.create(observer => {
this.setState({loading: true});
dispatch({type: APP_CHECK_CODE, observer});
});
observable.subscribe({
complete: () => this.setState({loading: false}),
});
// saga
const {code, observer} = yield take("APP_CHECK_CODE")
...
observer.complete();
但老实说,这感觉很神奇,会给我带来更多的麻烦。