代码之家  ›  专栏  ›  技术社区  ›  rendom

redux saga:eventChannel和侦听器,它们对回调返回作出反应

  •  1
  • rendom  · 技术社区  · 7 年前

    在react native中 backhandler 监听器对回调函数作出反应并适当地进行操作。

    我需要阅读我的商店,并根据它,返回真或假。 但我不能在普通函数中使用select效果,也不能从“watchBackButton”函数中影响侦听器回调函数。

    export function* backButtonListen() {
      return eventChannel(emitter => {
        const backHandlerListener = BackHandler.addEventListener(
          "hardwareBackPress",
          () => {
            emitter("back pressed");
          }
        );
        return () => {
          backHandlerListener.remove();
        };
      });
    }
    
    export function* watchBackButton() {
      const chan = yield call(backButtonListen);
      try {
        while (true) {
          let back = yield take(chan);
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Martin Kadlec    7 年前

    select

    但是,可以直接访问商店。有多种方法可以将存储实例获取到事件通道。看到我的另一个答案了吗 here

    // 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);
        }
    }
    
    推荐文章