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)


  1. r-moiseev
    02.08.2017 16:04
    +1

    Доводилось ли вам слышать про GraphQL? А про Apollo с функцией GraphQL over websockets?

    Что до метеора, я что то не готов настолько прочно связывать клиент и сервер.


    1. Zav
      02.08.2017 16:30

      Как человек более 2х лет разрабатывающий на метеоре хочу сказать что метеор, сам по себе, не накладывает никаких ограничений. Всегда есть возможность сделать что надо и как надо.


      1. r-moiseev
        02.08.2017 16:48
        +1

        Ограничение собственно одно — метеор. На бэкенде.


        1. Zav
          02.08.2017 17:10

          Вы хотели сказать NodeJS? :-) Потому что на бекенде именно он.
          Как бы если вам не нужен NodeJS на бекенде то да, метеор не подойдет.
          В остальном ограничений нет от слова совсем.


          1. Zav
            02.08.2017 17:11

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


    1. comerc
      02.08.2017 16:46

      Очевидно, вы пролистали на мою заметку по диагонали, Apollo упоминается два раза. Но суть уловили верно. Задача развязать клиент и сервер в рамках существующего долгоиграющего проекта (без Apollo). И Redux мне в этом поможет.


  1. vasIvas
    02.08.2017 16:29

     то Redux предлагает архитектуру приложения.
    

    Это фатальная ошибка из-за которой ругают Redux. Redux предлагает слой, связывающий слой данных со слоем компонентов. отбросьте парадигмы, постройте грамотную архитектуру приложения и поймете, что слой на котором можно поместить Redux является прослойкой между datastorage, моделью и компонентом.


    1. comerc
      02.08.2017 16:39

      Я неточно выразился. Представляю себе Redux, как архитектуру движения данных в приложении. Так лучше?


      1. vasIvas
        02.08.2017 17:38
        -1

        Нет, это стейтманагер.


        1. taujavarob
          02.08.2017 20:33

          это стейтманагер.
          «Как много нам открытий чудных готовит… » (С)