调度动作创建者功能如何工作?

时间:2020-09-12 22:40:54

标签: reactjs redux redux-thunk

说我有一个动作创建者功能,如下所示:

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")时,其中的调度已经更新了商店-但不知何故-为什么呢?

1 个答案:

答案 0 :(得分:2)

默认情况下,Redux存储仅了解如何接受传递给dispatch的简单操作对象,例如:

store.dispatch({type: "todos/todoAdded", payload: "Buy milk"};

如果将函数传递给dispatch(),则商店将引发错误。

但是,中间件包装了dispatch函数,并且可以拦截传递给dispatch()的所有内容。这样,中间件就可以“教商店如何接受非操作值”,例如将函数传递给dispatch(someFunction)

这是redux-thunk中间件的工作方式。它会查找实际上是函数而不是操作对象的任何东西,然后拦截该函数并调用它。