Поскольку каналы событий не являются двунаправленными, я не думаю, что есть способ получить какое-то текущее состояние из саги в канал событий, используя эффект select
.
Однако, возможно получить доступ кхранить напрямую.Есть несколько способов получить экземпляр хранилища для канала событий.Смотрите мой другой ответ здесь .
Используя, например, метод контекста, вы можете сделать что-то вроде этого:
// redux.js
...
const store = createStore(...);
sagaMiddleware.runSaga(rootSaga, {store});
// root-saga.js
export default function * rootSaga(context) {
yield setContext(context);
yield fork(watchBackButton);
}
// watch-back-button.js
export function* backButtonListen() {
const store = yield getContext('store');
return eventChannel(emitter => {
const backHandlerListener = BackHandler.addEventListener(
"hardwareBackPress",
() => {
emitter("back pressed");
return store.getState().foo === 'bar';
}
);
return () => {
backHandlerListener.remove();
};
});
}
export function* watchBackButton() {
const chan = yield call(backButtonListen);
try {
while (true) {
let back = yield take(chan);
}
}