Вопрос по redux-promise, reactjs, redux, redux-thunk – В чем разница между избыточным обещанием и избыточным обещанием?

77

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

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

Ваш Ответ

3   ответа
20

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

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

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

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

интересная точка зрения! Valter Júnior
...вроде, как бы, что-то вроде, Это своего рода ... побочные эффекты ... используемых моделей. ReduxPromise также не возвращает обещание в качестве полезной нагрузки. ReduxPromiseручки любые действия, которые вы отправляете, где обещаниеявляется полезная нагрузка. XML
99

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

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

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


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

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

отличный ответ. Я мог бы добавить, что thunk можно рассматривать как легкое обещание. Это помогает нормализовать время при управлении асинхронными действиями. Matt Catellier
Если вы используете обещания, вы можете использовать async / await с создателями действий robbie
71

вероятно, захотите / нуждаетесь в совместном использовании вашего приложения.Начните с redux-обещания для рутинных асинхронных задач, производящих обещания, а затем увеличивайте масштаб, добавляя Thunks (или Sagas и т. Д.) По мере увеличения сложности:

Когда жизнь проста, и вы просто выполняете базовую асинхронную работу с создателями, которые возвращают одно обещание, тогдаredux-promise улучшит вашу жизнь и упростит это, быстро и легко. (Короче говоря, вместо того, чтобы думать о «разворачивании» своих обещаний, когда они разрешаются, а затем писать / рассылать результаты, резервное обещание (-middleware) позаботится обо всех этих скучных вещах для вас.)Но жизнь становится более сложной, когда:Может быть, ваш создатель действий хочет дать несколько обещаний, которые вы хотите отправить как отдельные действия для отдельных редукторов?Или у вас есть сложная логика предварительной обработки и условной логики для управления, прежде чем решать, как и где отправлять результаты?

В этих случаяхпольза отredux-thunk является то, что он позволяет вам заключить сложность внутри вашего создателя действия.

Но учтите, чтоесли ваш Thunk производит и отправляет обещания, то вы захотите использовать обе библиотеки вместе:

Thunk будет составлять оригинальные действия и отправлять ихredux-promise затем будет обрабатывать развертывание в редукторе (-ах) отдельных обещаний, генерируемых вашим Thunk, чтобы избежать сопутствующего шаблона. (мог вместо этого делайте все в Thunks, сpromise.then(unwrapAndDispatchResult).catch(unwrapAndDispatchError)... а зачем тебе?)

Еще один простой способ подвести итог разницы в сценариях использования:начало против конца цикла действий Redux:

Thunks дляначало вашего потока Redux: если вам нужно создать сложное действие или инкапсулировать какую-то грубую логику создания действия, не допуская ее в своих компонентах и, конечно, в редукторах.redux-promise дляконец вашего потока, как только все сводится к простым обещаниям, и вы просто хотите развернуть их и сохранить их разрешенное / отклоненное значение в хранилищеПРИМЕЧАНИЯ / рефов:я нахожуredux-promise-middleware чтобы быть более полной и понятной реализацией идеи, стоящей за оригиналомredux-promise, Он находится в стадии активной разработки, а также хорошо дополняетсяredux-promise-reducer.есть дополнительные подобные промежуточные программы, доступные для составления / последовательности ваших сложных действий: одна очень популярнаяredux-saga, что очень похоже наredux-thunk, но основан на синтаксисе функций генератора. Опять же, вы, вероятно, будете использовать его в сочетании сredux-promise.Вототличная статья прямое сравнение различных опций асинхронной компоновки, включая thunk и redux-обещание-связующее ПО. (TL; ДР:«Redux Promise Middleware значительно сокращает количество шаблонов по сравнению с некоторыми другими вариантами» ...«Я думаю, что мне нравится Сага для более сложных приложений (читай: «использует»),и Redux Promise Middleware для всего остального ».)Обратите внимание, что есть важный случай, когда вы можете подумать, что вам нужно выполнить несколько действий, но на самом деле это не так, и вы можете сделать простые вещи простыми. Вот где вы просто хотите, чтобы несколько редукторов реагировали на ваш асинхронный вызов. Но,нет никаких причин, почему несколько редукторов не могут контролировать один тип действия.  просто хотели бы убедиться, что ваша команда знает, что вы используете это соглашение, поэтому они не предполагают, что только один редуктор (со связанным именем) может обработать данное действие.
Отличное объяснение! огромное количество библиотек просто кипит. :) Annjawn

Похожие вопросы