在我的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));
答案 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));。
看起来中间件也可以处理以上情况。