React без Redux, как водка без пива — деньги на ветер. Если React решает вопрос "интерфейс — функция состояния", то Redux предлагает архитектуру движения данных в приложении. Но вот незадача, что выбрать для взаимодействия с бекендом? В случае с REST-API, можно дергать Fetch, или взять чуть более функциональный Axios. Для WebSocket-ов есть Socket.io (крайне рекомендую к прочтению). А какие могут быть инструменты уровнем повыше? Реализация транспорта данных между фронтeндом и бекендом — не наша печаль.
Например, FeatherJS — можно переключать внутри протокол между REST и SocketIO без изменения API взаимодействия клиента, там просто Redux-интерфейс. Ещё есть Apollo и Logux, как две противоположности, но их тоже объединяет Redux-интерфейс.
Подключаешь требуемые React-компоненты к Redux и они дергаются по мере изменения данных. Запросы на такие изменения тоже проходят через "черный ящик" Redux. При всем разнообразии реализаций, мы получаем одинаковый результат. Красота.
А если вспомнить изоморфный Meteor (с которым я попрощался год назад), там много интересного: Data Distribution Protocol, Pub/Sub-взаимодействие и MiniMongo на клиенте с Optimistic Updates. Как обстоят дела в Meteor сейчас — React там давно, но что про подключение всего этого к Redux?
Индийский разработчик Abhi Aiyer опубликовал на Medium серию статей, вроде бы разобрав все возможные аспекты (насколько я проштудировал Meteor-форум):
How we Redux? — прямое подключение MiniMongo к Redux.
Reactivity with Redux and Meteor — как обеспечить Optimistic Updates через Redux Middleware.
Building Reactive Props with Meteor and Recompose — альтернативный подход, композиция в Redux штатной библиотеки React-Meteor-Data.
- И финалочка, 10 tips to get off the Meteor — гы-гы, основные пункты:
- Replace Minimongo/Tracker/ReactiveVar/Session
- Microservice Feature Development
- Get on Apollo
- For Legacy systems that still need DDP, use Asteroid, if you want to share login state between this SPA and your main Meteor app (comment down below I can help you out). With Asteroid you can still hit your Meteor backend for legacy pub/sub and meteor methods. (But you should be using GraphQL right?)
Пожалуйста, поделитесь опытом применения React+Redux в Meteor.
P.S. Да, я знаю о существовании MobX, не применял на практике, может оно и упростит магию реактивности в Meteor, но пока видится совсем избыточным и неидематичным :)
Комментарии (10)
vasIvas
02.08.2017 16:29то Redux предлагает архитектуру приложения.
Это фатальная ошибка из-за которой ругают Redux. Redux предлагает слой, связывающий слой данных со слоем компонентов. отбросьте парадигмы, постройте грамотную архитектуру приложения и поймете, что слой на котором можно поместить Redux является прослойкой между datastorage, моделью и компонентом.
r-moiseev
Доводилось ли вам слышать про GraphQL? А про Apollo с функцией GraphQL over websockets?
Что до метеора, я что то не готов настолько прочно связывать клиент и сервер.
Zav
Как человек более 2х лет разрабатывающий на метеоре хочу сказать что метеор, сам по себе, не накладывает никаких ограничений. Всегда есть возможность сделать что надо и как надо.
r-moiseev
Ограничение собственно одно — метеор. На бэкенде.
Zav
Вы хотели сказать NodeJS? :-) Потому что на бекенде именно он.
Как бы если вам не нужен NodeJS на бекенде то да, метеор не подойдет.
В остальном ограничений нет от слова совсем.
Zav
Хотя, на самом деле, можно извратиться и запустить на другом бекенде без особых проблем. Но я в этом смыла не вижу вообще.
comerc
Очевидно, вы пролистали на мою заметку по диагонали, Apollo упоминается два раза. Но суть уловили верно. Задача развязать клиент и сервер в рамках существующего долгоиграющего проекта (без Apollo). И Redux мне в этом поможет.