获取状态并从中间件发送

时间:2017-01-16 19:21:27

标签: reactjs redux redux-thunk

在我的React应用程序中,我使用Long-polling API。为了在每个响应上自动发送请求,我使用中间件。但在发送新请求之前,我必须将收到的数据保存在商店中。更重要的是,我想在我的中间件中发送另一个动作。所以我的结构看起来像这样:

InitLongPoll() - > SendRequest(数据) - > ReceiveResponse(数据)* - > sendRequest将(数据)

' *'是我的中间件。在那里,我使用store.dispatch(sendRequest(authData))将数据保存到商店,并使用store.getState().authReducer发送新请求。

使用RewriteRule (.*) $1.php [L]接收authData是否可以?据我所知,我的中间件应该是一个纯函数,不应该依赖外部数据(存储)。提前谢谢。

1 个答案:

答案 0 :(得分:3)

  

使用可以接收authData是否可以   store.getState()。authReducer?据我所知,我的中间件应该   是一个纯粹的功能,不应该依赖外部数据(商店)。

是的。中间件是将副作用引入redux循环的方法,它不能是纯函数。您自己的中间件有副作用 - 轮询服务器。

redux中间件是纯函数的反论点,定义为:

  
      
  1. 在给定相同参数值的情况下,函数始终评估相同的结果值。功能结果值不能依赖于任何   程序执行时可能发生变化的隐藏信息或状态   继续或在程序的不同执行之间,也不可能   取决于I / O设备的任何外部输入(通常见下文)。
  2.   
  3. 评估结果不会导致任何语义上可观察到的副作用或输出,例如可变对象或输出的突变   到I / O设备(通常见下文)。
  4.   

您还可以在redux-thunk源代码中看到它使用getState

function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => next => action => {
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }

    return next(action);
  };
}