Вы можете вернуть обещание из thunk, но если вы хотите придерживаться саг, нет простого способа сообщить компоненту, отправившему действие, о завершении саги, кроме изменения состояния хранилища с избыточностью.
Таким образом, я бы хотел обойти это, используя редуктор, такой как:
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();
Но, честно говоря, это кажется очень волшебным и может привести к большим неприятностям, чем стоит.