什么';使用Redux Thunk与普通异步代码的区别是什么?[包括例子]

什么';使用Redux Thunk与普通异步代码的区别是什么?[包括例子],redux,react-redux,redux-thunk,Redux,React Redux,Redux Thunk,我一直努力想弄清楚Redux thunk,因为它真的不明白它有什么伟大的用途。例如,我在一个网站上找到了一个随机的Redux Thunk示例: export const addTodo = ({ title, userId }) => { return dispatch => { dispatch(addTodoStarted()); axios .post(ENDPOINT, { title, userId,

我一直努力想弄清楚Redux thunk,因为它真的不明白它有什么伟大的用途。例如,我在一个网站上找到了一个随机的Redux Thunk示例:

export const addTodo = ({ title, userId }) => {
  return dispatch => {
    dispatch(addTodoStarted());

    axios
      .post(ENDPOINT, {
        title,
        userId,
        completed: false
      })
      .then(res => {
        setTimeout(() => {
          dispatch(addTodoSuccess(res.data));
        }, 2500);
      })
      .catch(err => {
        dispatch(addTodoFailure(err.message));
      });
  };
};
看起来很简单,addTodo是一个函数,它接受标题和用户ID,并返回一个以dispatch作为参数的函数,然后使用dispatch一次又一次地响应HTTP请求。因为在本例中使用了Redux Thunk,所以只需执行
dispatch(addTodo(x,x))

为什么我不做这样的事呢

function addTodo(dispatch, title,userId){
  dispatch(addTodoStarted());

  axios
    .post(ENDPOINT, {
      title,
      userId,
      completed: false
    })
    .then(res => {
      setTimeout(() => {
        dispatch(addTodoSuccess(res.data));
      }, 2500);
    })
    .catch(err => {
      dispatch(addTodoFailure(err.message));
    });
}

然后从任何地方,我都可以调用
addTodo(dispatch,x,x)


为什么我要使用Redux Thunk而不是我自己的例子?

这里有几点我将试图解释为什么应该使用Redux Thunk

  • 它的中间件使分派和状态对象在您定义的每个操作中都可用,而无需接触组件代码

  • 当您传递来自props或mapDispatchToProps(react redux)的调度函数时,该函数将创建闭包。这个闭包会一直占用内存,直到asyc操作完成

  • 当您想要分派任何操作时,在完成或异步操作后,您需要传递分派函数,在这种情况下,您需要修改组件和操作等两个文件

  • 如果某些东西已经可用并经过大量努力和社区支持测试,为什么不使用它呢

  • 您的代码将更具可读性和模块化

  • 这两种方法最糟糕的情况是,在完成项目后,需要更改thunk方法,您可以轻松地用自定义中间件代码模拟thunk中间件并解决它,但在传递分派函数的情况下,它将重构所有代码并搜索和替换,并找到管理它的方法


  • 这里有几点我将试图解释为什么应该使用redux thunk

  • 它的中间件使分派和状态对象在您定义的每个操作中都可用,而无需接触组件代码

  • 当您传递来自props或mapDispatchToProps(react redux)的调度函数时,该函数将创建闭包。这个闭包会一直占用内存,直到asyc操作完成

  • 当您想要分派任何操作时,在完成或异步操作后,您需要传递分派函数,在这种情况下,您需要修改组件和操作等两个文件

  • 如果某些东西已经可用并经过大量努力和社区支持测试,为什么不使用它呢

  • 您的代码将更具可读性和模块化

  • 这两种方法最糟糕的情况是,在完成项目后,需要更改thunk方法,您可以轻松地用自定义中间件代码模拟thunk中间件并解决它,但在传递分派函数的情况下,它将重构所有代码并搜索和替换,并找到管理它的方法


  • 已经回答,请按照链接。已经回答,请按照链接。