Зачем использовать redux-thunk?

Я не понимаю необходимости чего-то вроде redux-thunk. Из того, что я понимаю, thunk - это функция, которая возвращает функцию. Обернутые выражения и использование промежуточного программного обеспечения кажутся мне больше, чтобы запутать происходящее. Взято из кода примера redux-thunk

import thunk from 'redux-thunk';

// Note: this API requires [email protected]>=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 и как она улучшается в существующих решениях, аналогичных приведенному выше примеру.

Ответы

Ответ 1

Redux Thunk учит Redux распознавать особые виды действий, которые фактически являются функциями.

Когда создатель действия возвращает функцию, эта функция будет выполняться промежуточным программным обеспечением Redux Thunk. Эта функция не должна быть чистой; таким образом, он может иметь побочные эффекты, включая выполнение асинхронных вызовов API. Функция также может отправлять действия.

Thunk может использоваться для задержки отправки действия или для отправки только в том случае, если выполняется определенное условие.

Если промежуточное ПО Redux Thunk включено, при попытке отправить функцию вместо объекта действия, промежуточное программное обеспечение будет вызывать эту функцию с помощью самого метода отправки в качестве первого аргумента.

И так как мы "учили" Redux распознавать таких "специальных" создателей действий (мы называем их создателями thunk action), теперь мы можем использовать их в любом месте, где мы будем использовать создателей регулярных действий.

Отметьте этот отличный ответ от самого Дэна Абрамова, он охватывает все: fooobar.com/info/15781/...

Также проверьте эти ссылки для получения дополнительной информации:

https://github.com/gaearon/redux-thunk#motivation http://redux.js.org/docs/advanced/AsyncActions.html