React操作如何访问调度?

时间:2020-06-25 18:00:46

标签: reactjs redux react-redux redux-thunk redux-store

在我的react项目中,我有一个如下所示的动作文件:

$data = Model::all();
$data->makeHidden('price');

因此在此示例中,我知道调度来自price,并且const startLoad = () => async (dispatch) => { dispatch({ type: CONTENT_LOAD, }); }; // Get all content export const getContents = () => async (dispatch) => { dispatch(startLoad()); // some more code... }; 可以访问它,因为它是使用middleware映射的。因此,我假设调用getContents时,它的调用方式实际上是这样的-> mapDispatchToProps,但是可以在纯JavaScript中复制吗,这样我就可以知道实际情况了吗?如果我对getContents为什么可以访问dispatch(getContents)的原因有误,请告诉我。

例如,getContents仅因为dispatch被称为startLoad就能使用dispatch?我注意到,如果我这样称呼它,它也将起作用:dispatch

将分派传递到startLoad实际上对我来说更有意义,所以我不明白为什么不需要这样做。

编辑:这是我可以自己提出的最接近的示例。

dispatch(startLoad(dispatch));

1 个答案:

答案 0 :(得分:2)

所以我假设当调用getContents时,它真的像 这个-> dispatch(getContents),但是可以简单地复制 JavaScript,所以我可以看到实际情况是什么?如果我错了 为什么getContents可以发送信息,请让我知道。

redux-thunk has quite simple implementation

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

    return next(action);
  };
}

如您所见,它检查动作是否是函数。

还有奖金,如果您愿意,可以在派发后在params中获取整个状态和额外的参数

例如,isstartLoad如何仅因为 调度名为startLoad?我已经注意到,如果我 这样称呼它:dispatch(startLoad(dispatch));。

看起来中间件也可以处理以上情况。