如何使用 redux-observable 在 dom 元素上添加事件监听器

How add event listener on dom element with redux-observable

我需要帮助在 window 按键事件后调度一个动作

() => Observable.fromEvent(window, 'keyup').map(event => ({type: 'KEY_PRESSED', key: event.key, event}));

谢谢你

如果您一直想监听这些 keyup 事件并派发操作,Epic 非常简单:

const windowKeyUpEpic = () =>
  Observable.fromEvent(window, 'keyup')
    .map(event => ({
      type: 'KEY_UP',
      key: event.key,
      event
    }));

但这可能效率低下,因为您可能只想在某些特定情况下聆听。

您可以通过某种方式 enable/disable 这个全局侦听器:

const windowKeyUpEpic = action$ =>
  action$.ofType('START_LISTEN_FOR_KEYUP')
    .switchMap(() =>
      Observable.fromEvent(window, 'keyup')
        .map(event => ({
          type: 'KEY_UP',
          key: event.key,
          event
        }))
        .takeUntil(action$.ofType('STOP_LISTEN_FOR_KEYUP'))
    );