带有额外参数的redux如何工作?

问题描述 投票:0回答:1

这是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是相同的

reactjs redux axios server-side-rendering redux-thunk
1个回答
0
投票
在我的通用JavaScript应用中,我在客户端和服务器上创建了axios实例和redux存储。我将客户端axios实例传递给客户端存储,并将服务器端axios实例传递给服务器端存储。

由于简化器应该是“纯”的(它们不会在其范围之外进行任何更改,因此我们无法在简化器内部进行任何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实例。
© www.soinside.com 2019 - 2024. All rights reserved.