Подтвердить что ты не робот

В чем разница между редукцией и редукцией?

Насколько я знаю и исправлю меня, если я ошибаюсь, redux-thunk является промежуточным программным обеспечением, которое помогает нам отправлять функции асинхронной работы и отлаживать значения в самом действии, в то время как когда я использовал redux-promise, я не мог создавать асинхронные функции без реализации моего собственного механизма, поскольку Action генерирует исключение для отправки только простых объектов.

В чем основные отличия между этими двумя пакетами? Есть ли какие-либо преимущества использования обоих пакетов в одном приложении для работы с одной страницей или приклеивания к сокращению, будет достаточно?

4b9b3361

Ответ 1

redux-thunk позволяет вашим создателям действий возвращать функцию:

function myAction(payload){
    return function(dispatch){
        // use dispatch as you please
    }
}

redux-promise позволяет им вернуть обещание:

function myAction(payload){
    return new Promise(function(resolve, reject){
        resolve(someData); // redux-thunk will dispatch someData
    });
}

Обе библиотеки полезны, если вам нужно отправить асинхронное действие или условно. redux-thunk также позволяет вам отправлять несколько раз внутри одного создателя действия. Независимо от того, выбираете ли вы один, другой или оба полностью зависят от ваших потребностей/стиля.

Ответ 2

Вероятно, вы захотите/хотите оба вместе в своем приложении. Что касается того, когда вы будете использовать каждый из них, я думаю об этом с точки зрения сложности:

  • Если вам просто нужно отправить одно обещание (возможно, из сетевого вызова), чтобы обещать можно было развернуть, а его разрешенное значение было записано в хранилище с минимальным шаблоном, тогда redux-promise решит это.
  • Если вам больше сложнее управлять до отправки 1 или более promises, redux-thunk позволяет инкапсулировать эту сложность. Например, если вы хотите построить условную цепочку обещаний, а затем только отправить окончательный результат, используйте Thunk. Или, если вы хотите сразу отправить несколько promises, используйте Thunk. Но обратите внимание, что в любом случае вы будете использовать оба вместе: Thunk будет составлять последовательность, а затем redux-promise будет обрабатывать отдельный promises, сгенерированный последовательностью, чтобы избежать шаблона разворачивания сетевых ответов, а затем отправив их в магазин.
  • Один простой способ подытожить разницу: thunks (или sagas или подобное) позволяют вам отправлять несколько действий в ответ на одно оригинальное действие или асинхронный вызов. Таким образом, когда вам нужно несколько действий в нисходящем направлении, вам, скорее всего, понадобится ханк или сага или что-то подобное. Но когда вы этого не сделаете, сохраните жизнь просто и используйте сокращенное обещание (-среднее).

NOTES/REFS:

  • Я считаю, что redux-promise-middleware является более полной и понятной реализацией идеи оригинального redux-promise. Он находится под активным развитием, а также хорошо дополняется redux-promise-reducer.
  • для компоновки/последовательности ваших сложных действий есть дополнительные похожие средние: один очень популярный - redux-saga, который очень похож на redux-thunk, но основан на синтаксисе функций генератора. Опять же, вы, вероятно, используете его в сочетании с redux-promise.
  • Здесь отличная статья, непосредственно сравнивающая различные параметры асинхронной компоновки, включая thunk и redux-prom-middleware. (TL; DR: "Redux Promise Middleware значительно снижает шаблонность по сравнению с некоторыми другими параметрами"... "Мне кажется, что я люблю Saga для более сложных приложений (читай:" использует ") и Redux Promise Middleware для всего остального". )
  • Обратите внимание, что существует важный случай, когда вы можете подумать, что вам нужно отправить несколько действий, но вы действительно этого не сделаете, и вы можете просто хранить простые вещи. Это то, где вы просто хотите, чтобы несколько редукторов реагировали на ваш асинхронный вызов. Но нет никакой причины, почему несколько редукторов не могут контролировать один тип действия. Вы просто хотите убедиться, что ваша команда знает, что вы используете это соглашение, поэтому они не предполагают, что только один редуктор (с соответствующим именем) может обрабатывать данное действие.

Ответ 3

Полное раскрытие информации: Я относительно новичок в разработке Redux и сам боролся с этим вопросом. Я перефразирую самый краткий ответ, который я нашел:

ReduxPromise возвращает обещание в качестве полезной нагрузки при отправке действия, а затем промежуточное ПО ReduxPromise работает, чтобы разрешить это обещание и передать результат редуктору.

ReduxThunk, с другой стороны, заставляет создателя действия удержаться при фактической передаче объекта действия редукторам до тех пор, пока не будет вызвана отправка.

Вот ссылка на учебник, где я нашел эту информацию: https://blog.tighten.co/react-101-part-4-firebase.