Javascript 为什么要使用redux thunk?

Javascript 为什么要使用redux thunk?,javascript,reactjs,typescript,react-redux,redux-thunk,Javascript,Reactjs,Typescript,React Redux,Redux Thunk,我不明白有必要使用类似于redux-thunk的东西。据我所知,thunk是一个返回函数的函数。在我看来,包装表达式和中间件的使用似乎更能混淆正在发生的事情。取自redux thunk的示例代码 import thunk from 'redux-thunk'; // Note: this API requires redux@>=3.1.0 const store = createStore( rootReducer, applyMiddleware(thunk) ); //

我不明白有必要使用类似于
redux-thunk
的东西。据我所知,thunk是一个返回函数的函数。在我看来,包装表达式和中间件的使用似乎更能混淆正在发生的事情。取自redux thunk的示例代码

import thunk from 'redux-thunk';

// Note: this API requires redux@>=3.1.0
const store = createStore(
  rootReducer,
  applyMiddleware(thunk)
);


// Meet thunks.
// A thunk is a function t hat returns a function.
// This is a thunk.

function makeASandwichWithSecretSauce(forPerson) {

  // Invert control!
  // Return a function that accepts `dispatch` so we can dispatch later.
  // Thunk middleware knows how to turn thunk async actions into actions.

  return function (dispatch) {
    return fetchSecretSauce().then(
      sauce => dispatch(makeASandwich(forPerson, sauce)),
      error => dispatch(apologize('The Sandwich Shop', forPerson, error))
    );
  };
}

// Thunk middleware lets me dispatch thunk async actions
// as if they were actions!

store.dispatch(
  makeASandwichWithSecretSauce('Me')
);
上述代码可以编写得更加简洁直观:

fetchSecretSauce().then(
  sauce => store.dispatch(makeASandwich('Me', sauce)),
  error => store.dispatch(apologize('The Sandwich Shop', forPerson, error))
)

我的问题是什么需求是
redux-thunk
实现的,以及它如何改进与上述示例类似的现有解决方案。

redux-thunk教redux识别实际上是功能的特殊类型的操作

当动作创建者返回一个函数时,该函数将由Redux Thunk中间件执行。这个函数不需要是纯函数;因此允许它产生副作用,包括执行异步API调用。该函数还可以分派操作

thunk可用于延迟动作的调度,或仅在满足特定条件时才进行调度

如果启用了Redux Thunk中间件,则每当您尝试调度函数而不是操作对象时,中间件都会使用dispatch method本身作为第一个参数调用该函数

既然我们“教”了Redux认识这样的“特殊”动作创作者(我们称他们为thunk动作创作者),我们现在可以在任何地方使用他们,我们可以在任何地方使用常规动作创作者

看看丹·阿布拉莫夫本人的回答,它涵盖了一切:

请查看这些链接以了解更多信息:


假设您需要进行API调用,您可以编写一个thunk来解决或拒绝承诺,并相应地分派成功或失败的操作,并且从组件内部只需执行
loadMyTunk()
-所有分派的操作都被抽象为thunk。我有一个lib
redux实体
,它使用这样一种模式:谢谢Mohamed。我对这里的努力表示感谢。问题是我已经读过丹·阿布拉莫夫的那篇文章,但还是不满意。阅读所有这些材料,我发现thunk可以用来延迟动作的发送,但是你可以很容易地在没有thunk的情况下完成,正如我在上面的示例中所示。我发现的另一个原因是,您可以根据传递的getState有条件地进行分派,但也可以在不使用thunk的情况下完成分派,也不需要添加中间件库和另一个要学习的依赖层。我也看不出它对更大的应用程序有什么帮助。@micahblu,我看你已经掌握了redux thunk的概念,老实说,没有太多的解释需要补充。想法很简单,“推迟发货”。redux-redux和redux-thunk都实现了bad(设计透视图)。实际上,您只需创建一个对象并订阅其数据流,然后让react知道重新渲染。这两个图书馆都放得很满。动作创建者、动作、调度、减速器和最终存储。呸。相当(虚构)的术语。@serkan您精心设计的备选方案建议是什么?