Javascript 为什么redux thunks需要绑定到dispatch?

Javascript 为什么redux thunks需要绑定到dispatch?,javascript,reactjs,redux,redux-thunk,Javascript,Reactjs,Redux,Redux Thunk,我想我缺少了一个基本的理解。我知道,为了创建一个动作,从而触发事件的redux链,必须使用dispatch调用动作创建者 但是,当我们有一个redux thunk返回一个函数,该函数将调用动作创建者上的dispatch,为什么还必须使用dispatch调用redux thunk 例如,以以下redux thunk为例: function savePerson(person: Person) { return async (dispatch: any) => { de

我想我缺少了一个基本的理解。我知道,为了创建一个动作,从而触发事件的redux链,必须使用
dispatch
调用动作创建者

但是,当我们有一个redux thunk返回一个函数,该函数将调用动作创建者上的
dispatch
,为什么还必须使用
dispatch
调用redux thunk

例如,以以下redux thunk为例:

function savePerson(person: Person) {
    return async (dispatch: any) => {
        delete person.cars;
        let newPerson = await axios.post('/api/people/addPeron', person);
        dispatch(addPersonSuccess(person));
    }
}

不使用
dispatch
调用这个savePerson函数不会触发redux流,我不明白为什么考虑到它返回的函数会使用
dispatch
调用我们的操作创建者。有人能澄清一下我在这里遗漏了什么吗

所有redux中间件遵循相同的总体布局:

const中间件=>store=>next=>action=>next(action)

为什么还必须使用
调度调用redux thunk

正如您在第一段中正确指出的,对于要由redux中间件链评估的操作/thunk,调用代码必须对其进行
dispatch
ed

我认为误解就在这里:

“…当我们有一个redux thunk返回一个函数 呼叫行动创建者的调度

虽然返回的函数分派一个动作是正确的,但这只是故事的一半。从技术上讲,您将调度两次:首先是
savePerson
,然后是
addPersonSuccess
。前者是一种恶作剧,后者很可能是一种简单的行为

现在,让我们考虑当前<代码> Rudix thox:

一旦分派
savePerson
,中间件就会将您的操作识别为一个函数。然后,它注入
dispatch
作为第一个参数,以便稍后允许分派其他操作。到目前为止,
dispatch
尚未在您的
addPersonSuccess
操作上调用。只有在异步调用添加人员后,才会在
addPersonSuccess
上调用调度

我喜欢将此视为在thunk(dispatch、getState等)中传递redux上下文

工具书类

将其视为另一个减速器。
function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => next => action => {
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }

    return next(action);
  };
}

...

export default thunk;