Redux & RxJS, есть сходства?
Я знаю, что Redux-это лучшая "реализация" Flux, или лучше сказать, что это редизайн для упрощения вещей (управление состоянием приложения).
Я много слышал о реактивном программировании (RxJS), но я еще не нырнул, чтобы узнать его.
Итак, мой вопрос: есть ли какое-либо пересечение (что-то общее) между этими двумя технологиями или они дополняют друг друга? ...или совсем другой?
5 ответов:
короче говоря, они очень разные библиотеки для очень разных целей, но да есть некоторые смутные сходства.
Redux-это инструмент для управления состоянием во всем приложении. Он обычно используется в качестве архитектуры для UIs. Подумайте об этом как об альтернативе (половине) углового.
RxJS-это реактивная библиотека программирования. Обычно он используется в качестве инструмента для выполнения асинхронных задач в JavaScript. Думаю, это как альтернатива Обещает выделить.
реактивное программирование-парадигма (способ работы и мышления), где изменения данных наблюдал издалека. Данных нет изменено на расстоянии.
вот пример изменено на расстоянии:
// In the controller.js file model.set('name', 'George');
The модель изменяется от контроллера.
вот пример наблюдается с расстояние:
// logger.js store.subscribe(function (data) { console.log(data); });
в регистраторе мы наблюдаем изменения данных, которые происходят в хранилище (на расстоянии), и записываем в консоль.
Redux использует реактивную парадигму только немного: магазин является реактивным. Вы не устанавливаете его содержание на расстоянии. Вот почему нет
store.set()
in Redux. Магазин наблюдает за действиями на расстоянии и изменяет себя. И магазин позволяет другим наблюдать его данные на расстоянии.RxJS также использует реактивную парадигму, но вместо того, чтобы быть архитектурой, она дает вам основные строительные блоки,параметры, чтобы выполнить это" наблюдение на расстоянии " шаблон.
В заключение, очень разные вещи для разных целей, но поделиться некоторыми идеями.
Это очень разные вещи.
RxJS может использоваться для реактивного программирования и представляет собой очень тщательную библиотеку с 250+ операторами.
и Redux, как описано в репозитории github "Redux-это предсказуемый контейнер состояний для приложений JavaScript".
Redux-это просто инструмент для обработки состояния в приложениях. Но для сравнения вы можете построить полное приложение только в RxJS.
надеюсь, что это помогает :)
короче говоря:
Redux: Flux вдохновил библиотека используется для Государственного Управления.
RxJS: это еще одна библиотека Javascript, основанная на философии реактивного программирования, используемая для работы с "потоками" (наблюдаемыми и т. д.) [Прочитайте о реактивном программировании, чтобы понять концепции потока].
Я просто хотел добавить некоторые прагматические отличия от того, когда я делал Redux-вдохновленный RxJS-код.
я сопоставил каждый тип действия с экземпляром субъекта. Каждый компонент с отслеживанием состояния будет иметь субъект, который затем отображается в функцию редуктора. Все потоки редуктора совмещены с
merge
а тоscan
выводит состояние. Значение по умолчанию устанавливается сstartWith
передscan
. Я использовалpublishReplay(1)
для государства, но может удалить его позже.реакция чистая функция рендеринга будет только в том месте, где вы производите данные о событиях, отправляя всех производителей/субъектов.
если у вас есть дочерние компоненты, вам нужно описать, как эти государства объединяются в твое.
combineLatest
может быть хорошей отправной точкой для этого.заметные различия в реализации:
нет промежуточного ПО, только операторы rxjs. Я думаю, что это самая большая сила и слабость. Вы все еще можете заимствовать концепции, но мне трудно получите помощь от сестринских сообществ, таких как redux и cycle.js, так как это еще одно пользовательское решение. Вот почему мне нужно написать "я "вместо" Мы " в этом тексте.
нет переключатель / случай или строки для типов действий. У вас есть более динамичный способ разделения действий.
rxjs может быть использован в качестве инструмента в другом месте, и не содержится в управлении состоянием.
меньше производителей, чем типы действий(?). Я не уверен об этом, но вы можете иметь много реакций в родительских компонентах, которые слушают дочерние компоненты. Это означает меньший императивный код и меньшую сложность.
вы владеете решением. Никаких рамок не требуется. Хорошо и плохо. Вы в конечном итоге напишете свою собственную структуру в любом случае.
это гораздо более фрактально, и вы можете легко подписаться на изменения из поддерева или нескольких частей дерева состояний приложения.
- угадайте, как это просто это делать эпики, как redux-obseravble делать? Действительно простой.
Я также работаю над гораздо большими преимуществами, где дочерние компоненты описываются как потоки. Это означает, что нам не нужно дополнять родительское и дочернее состояния в редукторах, поскольку мы можем просто ("просто") рекурсивно объединять состояния на основе структуры компонентов.
Я также думаю о пропуск реагировать и идти с snabbdom или что-то еще, пока React обрабатывает реактивные состояния лучше. Почему мы должны строить наше государство вверх, чтобы снова сломать его с помощью реквизита? Поэтому я постараюсь сделать версию 2 этого шаблона с Snabbdom.
вот более продвинутый, но небольшой фрагмент, где государство.файл ts создает поток состояний. Это состояние компонента ajax-form, который получает объект полей (входов) с правилами проверки и стилями css. В этом файле мы просто используем имена полей (ключи объектов), чтобы объединить все состояния детей в форму государство.
export default function create({ Observable, ajaxInputs }) { const fieldStreams = Object.keys(ajaxInputs) .map(function onMap(fieldName) { return ajaxInputs[fieldName].state.stream .map(function onMap(stateData) { return {stateData, fieldName} }) }) const stateStream = Observable.combineLatest(...fieldStreams) .map(function onMap(fieldStreamDataArray) { return fieldStreamDataArray.reduce(function onReduce(acc, fieldStreamData) { acc[fieldStreamData.fieldName] = fieldStreamData.stateData return acc }, {}) }) return { stream: stateStream } }
хотя код не может сказать много в изоляции, он показывает, как вы можете построить состояние вверх, и как вы можете легко создавать динамические события. Цена, которую нужно заплатить, заключается в том, что вам нужно понять другой стиль кода. И я люблю платить эту цену.
вы можете "реализовать" Redux в одной строке RxJS. Если вы думаете о Rx по другим причинам (для обещаний кожи, чтобы использовать его на сервере и клиенте), то пропустите Redux и перейдите на все Rx.