Redux.js-构建一个侦听器中间件,该中间件侦听调度的重击操作

时间:2018-06-26 19:31:47

标签: javascript reactjs redux middleware

我正在尝试使用Redux构建一个侦听器中间件,该侦听器中间件监听调度的重击动作。

目标是当调度一个动作时,中间件使进程暂停并触发另一个动作(观察者)。我找到 NPM上一个不错的library,但似乎我的观察者没有抓住已调度的动作。调度第一个动作后,似乎没有触发监听器,什么也没发生。

我确保将中间件有效地注入到商店中。

这里是我的代码摘要:

react.js:

import { createMiddleware } from 'redux-listeners';
const listenMiddleware = createMiddleware(); 

listenMiddleware.addListener(POST_WORD_REQUEST, (dispatch) => {     
  // postFile is the listener action 
  // provided by mapDispatchToProps in an another file
  this.props.postFile(word, base64Data)
})

reduxAction.js:

// postWord is the observed action
export const postWord =  {...}  => {
    dispatch({
      type: POST_WORD_REQUEST,
      status: request
    });
}

middleware.js:

import thunkMiddleware from 'redux-thunk'
import {applyMiddleware} from "redux"

import { createMiddleware } from 'redux-listeners';
const listenMiddleware = createMiddleware();

const middleware = applyMiddleware(
  listenMiddleware,
  thunkMiddleware
)

export default middleware // then createStore(appReducer, initialState, middleware)

1 个答案:

答案 0 :(得分:1)

总结讨论中的问题,作为答案:

  • 提供给listenerMiddleware实例的回调错误地使用了this.props,因为它不在组件中,该回调将不存在
  • 似乎正在创建两个不同的中间件实例,并且正在将侦听器添加到不是连接到商店的中间件实例。

现在,您已经说过了:似乎您试图基于已调度的Redux动作触发React组件中的行为。如您所述,这是“奇怪的”,不是推荐的结构化应用程序的方法。如果可能的话,我建议找到另一种做事的方式。