说我有一个动作创建者功能,如下所示:
import {v4 as uuidv4} from uuid;
export const doSomething = (task) => (dispatch) => {
dispatch({
const id = uuidv4();
dispatch({
type: "SET_TASK",
payload: {id, task}
})
})
}
当我调用它来更新另一个动作创建器函数中的商店状态时,必须将其包装在dispatch
方法中的逻辑是什么?
即:
import {setAlert} from "./doSomething"
// another action creator
export const anotherActionCreator = () => dispatch => {
...
dispatch(doSomething("Laundry"));
...
}
当我删除dispatch
方法包装时,它不会调用reducer并更新redux存储中的状态。我认为该操作某种程度上与商店无关,但我不知道该怎么做。我以为,当您致电doSomething("Laundry")
时,其中的调度已经更新了商店-但不知何故-为什么呢?
答案 0 :(得分:2)
默认情况下,Redux存储仅了解如何接受传递给dispatch
的简单操作对象,例如:
store.dispatch({type: "todos/todoAdded", payload: "Buy milk"};
如果将函数传递给dispatch()
,则商店将引发错误。
但是,中间件包装了dispatch
函数,并且可以拦截传递给dispatch()
的所有内容。这样,中间件就可以“教商店如何接受非操作值”,例如将函数传递给dispatch(someFunction)
。
这是redux-thunk
中间件的工作方式。它会查找实际上是函数而不是操作对象的任何东西,然后拦截该函数并调用它。