Javascript 为什么redux thunks需要绑定到dispatch?
我想我缺少了一个基本的理解。我知道,为了创建一个动作,从而触发事件的redux链,必须使用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
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;