在我的React应用程序中,我使用Long-polling API。为了在每个响应上自动发送请求,我使用中间件。但在发送新请求之前,我必须将收到的数据保存在商店中。更重要的是,我想在我的中间件中发送另一个动作。所以我的结构看起来像这样:
InitLongPoll() - > SendRequest(数据) - > ReceiveResponse(数据)* - > sendRequest将(数据)
' *'是我的中间件。在那里,我使用store.dispatch(sendRequest(authData))
将数据保存到商店,并使用store.getState().authReducer
发送新请求。
使用RewriteRule (.*) $1.php [L]
接收authData是否可以?据我所知,我的中间件应该是一个纯函数,不应该依赖外部数据(存储)。提前谢谢。
答案 0 :(得分:3)
使用可以接收authData是否可以 store.getState()。authReducer?据我所知,我的中间件应该 是一个纯粹的功能,不应该依赖外部数据(商店)。
是的。中间件是将副作用引入redux循环的方法,它不能是纯函数。您自己的中间件有副作用 - 轮询服务器。
redux中间件是纯函数的反论点,定义为:
- 在给定相同参数值的情况下,函数始终评估相同的结果值。功能结果值不能依赖于任何 程序执行时可能发生变化的隐藏信息或状态 继续或在程序的不同执行之间,也不可能 取决于I / O设备的任何外部输入(通常见下文)。
- 评估结果不会导致任何语义上可观察到的副作用或输出,例如可变对象或输出的突变 到I / O设备(通常见下文)。
醇>
您还可以在redux-thunk源代码中看到它使用getState
:
function createThunkMiddleware(extraArgument) {
return ({ dispatch, getState }) => next => action => {
if (typeof action === 'function') {
return action(dispatch, getState, extraArgument);
}
return next(action);
};
}