这是redux-thunk库的源代码:
function createThunkMiddleware(extraArgument) {
return ({ dispatch, getState }) => next => action => {
if (typeof action === 'function') {
return action(dispatch, getState, extraArgument);
}
return next(action);
};
}
const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;
export default thunk;
我无法理解“ thunk”和“ thunk.withExtraArguent”之间的区别。
const thunk=createThunkMiddleware()
//这是我们用于异步请求的中间件
然而thunk.withExtraArgument是相同的createThunkMiddleware函数,但这次仅作为参考传递。我们可以在此处传递参数,但不能将参数传递给thunk。
有人可以解释其中的区别吗?对我来说,[[thunk和thunk.withExtraArgument是相同的
由于简化器应该是“纯”的(它们不会在其范围之外进行任何更改,因此我们无法在简化器内部进行任何API调用或调度操作。如果您希望某个动作执行某项操作,则该代码需要存在于函数中。通常我们的动作只是简单的对象,我们只是将它们直接分派给reducer。 Redux-thunk是一个中间件,它查看通过系统的每个动作,如果它是一个函数,它将调用该函数。 Redux会将两个参数传递给thunk函数:
dispatch,以便他们可以在需要时分派新操作;和getState,因此它们可以访问当前状态。 REdux-thunk中间件使我们能够让动作创建者返回函数而不是动作对象。但是,未使用thunk函数定义extraArgument。
const thunk = createThunkMiddleware()
当我创建每个redux存储副本时,我还创建了axios的自定义实例,并将该自定义实例作为额外的第三个参数传递给redux thunk。然后,在我们的动作创建者中,每当我发出某种类型的网络请求时,我都会收到自定义的axios副本,而不是实际的模块本身。然后,我可以发出请求,而不必担心我们是在客户端还是在服务器上。 thunk.withExtraArgument
是定义了额外参数的中间件。因此,我使用thunk.withExtraArgument并传递axios实例。