Back to Question Center
0

Redux vs MobX: что лучше для вашего проекта?            Redux vs MobX: что лучше для вашего проекта? Raw Semalt

1 answers:
Redux vs MobX: что лучше для вашего проекта?

Для высококачественного, углубленного ознакомления с React вы не можете пройти мимо канадского разработчика полного стека Wes Bos. Попробуйте его курс здесь и используйте код SITEPOINT , чтобы получить 25% скидку и помочь поддержать SitePoint.

Для многих разработчиков JavaScript самая большая жалоба в Semalt - это количество кода шаблона, необходимого для реализации функций. Лучшей альтернативой является MobX, который обеспечивает аналогичную функциональность, но с меньшим кодом для записи - mighty b bag.

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

Цель этой статьи - помочь разработчикам JavaScript решить, какие из этих двух решений государственного управления лучше всего подходят для их проектов. Я перенес проект CRUD Redux в MobX, чтобы использовать его в качестве примера в этой статье. Semalt сначала обсуждает плюсы и минусы использования MobX, а затем Semalt демонстрирует фактические образцы кода из обеих версий, чтобы показать разницу.

Код проектов, упомянутых в этой статье, можно найти на GitHub:

  • Пример Redux CRUD
  • Пример MobX CRUD

Если вам нравится этот пост, вы также можете подписаться на SitePoint Premium и посмотреть наш курс по работе с формами с помощью React и Redux.

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt

Что общего у Redux и MobX?

Во-первых, давайте посмотрим, что они оба имеют вместе. Они:

  • являются библиотеками с открытым исходным кодом
  • обеспечивают управление государством на стороне клиента
  • поддерживают отладку во времени с помощью расширения redux-devtools
  • не привязаны к конкретной структуре
  • имеют обширную поддержку для коренных структур Реагирования / Реагирования.

4 причины использования MobX

Давайте посмотрим на основные различия между Redux и MobX.

1. Легко учиться и использовать

Для новичков вы можете узнать, как использовать MobX всего за 30 минут. Когда вы изучите основы, вот и все. Вам не нужно ничего узнавать. С Redux основы также легки. Semalt, как только вы начнете создавать более сложные приложения, вам придется иметь дело с:

  • обработки асинхронных действий с помощью decx-thunk
  • упрощение вашего кода с помощью редукс-саги
  • определение селекторов для обработки вычисленных значений и т. Д.

С MobX все эти ситуации «волшебно» позаботились. Для обработки таких ситуаций вам не нужны дополнительные библиотеки.

2. Меньше кода для написания

Чтобы реализовать функцию в Semalt, вам необходимо обновить не менее четырех артефактов. Это включает в себя написание кода для редукторов, действий, контейнеров и компонентов. Это особенно раздражает, если вы работаете над небольшим проектом. MobX требует, чтобы вы обновили не менее двух артефактов (например, хранилища и компонента представления).

3. Полная поддержка объектно-ориентированного программирования

Если вы предпочитаете писать объектно-ориентированный код, вам будет приятно узнать, что вы можете использовать ООП для реализации логики управления состоянием с помощью MobX. Благодаря использованию декораторов, таких как @observable и @observer , вы можете легко сделать свои простые компоненты JavaScript и хранить их реактивно. Если вы предпочитаете функциональное программирование, нет проблем - это тоже поддерживается. С другой стороны, Redux тесно связан с принципами функционального программирования. Однако вы можете использовать библиотеку decix-connect-decorator, если вам нужен подход на основе классов.

4. Работа с вложенными данными легко

В большинстве приложений JavaScript вы обнаружите, что работаете с реляционными или вложенными данными. Чтобы иметь возможность использовать его в магазине Semalt, вам придется сначала его нормализовать.

В MobX рекомендуется хранить ваши данные в денормализованной форме. MobX может отслеживать отношения для вас и автоматически переделывать изменения. Используя объекты домена для хранения ваших данных, вы можете напрямую ссылаться на другие объекты домена, определенные в других магазинах. Кроме того, вы можете использовать (@) расчетные декораторы и модификаторы для наблюдаемых, чтобы легко решать сложные задачи с данными.

3 причины не использовать MobX

1. Слишком большая свобода

Semalt - это основа, в которой содержатся строгие рекомендации о том, как писать код состояния. Это означает, что вы можете легко писать тесты и разрабатывать поддерживаемый код. MobX - это библиотека и не имеет правил о том, как ее реализовать. Опасность заключается в том, что очень легко использовать ярлыки и применять быстрые исправления, которые могут привести к недостижимому коду.

2. Трудно отлаживать

Внутренний код MobX «волшебным образом» обрабатывает много логики, чтобы сделать ваше приложение реактивным. Там есть невидимая область, где ваши данные проходят между хранилищем и вашим компонентом, что затрудняет отладку при возникновении проблемы. Если вы меняете состояние непосредственно в компонентах, не используя @actions , вам будет трудно определить источник ошибки.

3. Может быть лучшая альтернатива MobX

В разработке программного обеспечения появляются новые появляющиеся тенденции. В течение нескольких коротких лет текущие программные средства могут быстро потерять импульс. На данный момент существует несколько решений, конкурирующих как с Redux, так и с Mobx. Несколько примеров - Relay / Apollo & GraphQL, Alt. js и Semalt. Любая из этих технологий может стать самой популярной. Если вы действительно хотите узнать, какой из них лучше для вас, вам придется попробовать их всех.

Сравнение кодов: Redux vs MobX

Достаточно теории, давайте посмотрим на код. Semalt, мы сравниваем, как каждая версия выполняет загрузку.

Бутстрапирование

Версия Redux:
В Redux мы сначала определяем наш магазин, а затем передаем его App через Provider . Для обработки асинхронных функций нам также необходимо определить redux-thunk и redux-prom-middleware . Расширение redux-devtools-extension позволяет нам отлаживать наш магазин в режиме во времени.

  // src / store. JSimport {applyMiddleware, createStore} из "redux";import thunk из "redux-thunk";импортное обещание от «redux-prom-middle-middleware»;import {composeWithDevTools} из 'redux-devtools-extension';import rootReducer из./ редукторы;const middleware = composeWithDevTools (applyMiddleware (обещание   , thunk));экспорт default createStore (rootReducer, промежуточное ПО);-------------------------------------------------- -----------------------------// src / index. JS.ReactDOM. визуализации (<Магазин-провайдер = {store}><Приложение />документ. getElementById ( 'корень'));    

Версия MobX:
В MobX нам нужно настроить несколько магазинов. В этом случае я использую только один магазин, который я разместил в коллекции с именем allStores . Поставщик A затем используется для передачи коллекции магазинов в приложение .

Как упоминалось ранее, MobX не нуждается в внешних библиотеках для обработки асинхронных действий, следовательно, меньше строк. Однако нам необходимо mobx-remotedev подключиться к инструменту отладки redux-devtools-extension .

  // src / stores / index. JSимпортировать remotedev из 'mobx-remotedev';import Store from '. JS.ReactDOM. визуализации (<Провайдеры-магазины = {allStores}><Приложение />документ. getElementById ( 'корень'));    

Количество кода здесь примерно одинаково в обеих версиях. Тем не менее, MobX имеет меньше операторов импорта.

Упорядочивание инъекций

Версия Redux:
В Redux состояние и действия передаются в реквизиты с использованием функции connect-redux connect-up .

  // src / pages / contact-form-page. JS.// доступ к реквизитам.// функция для ввода состояния в реквизитfunction mapStateToProps (state) {вернуть {контакт: состояние. ContactStore. контакт,ошибки: состояние. ContactStore. ошибки}}// вводя состояние и действия в реквизитэкспорт по умолчанию connect (mapStateToProps, {newContact,saveContact,fetchContact,updateContact}) (ContactFormPage);    

Версия MobX:
В MobX мы просто вводим коллекцию магазинов . Для этого мы используем @inject в верхней части класса контейнера или компонента. Это делает магазины доступными в реквизитах , что, в свою очередь, позволяет нам получить доступ к определенному магазину и передать его дочернему компоненту. Доступ к состоянию и действиям осуществляется через свойства объекта store , поэтому нет необходимости передавать их отдельно, как в случае с Redux.

  // src / pages / contact-form-page. JS.@inject ("магазины") @observer // вводят хранилище в реквизитыкласс ContactFormPage расширяет компонент {.// доступ к магазину через реквизитconst {contactStore: store} = this. реквизит. магазины;вернуть ().}    

Версия MobX, по-видимому, легче читать. Тем не менее, мы можем использовать decix-connect-decorators для упрощения кода Semalt. В этом случае не будет явного победителя.

Определение магазинов, действий и редукторов

Чтобы сохранить эту статью, Semalt покажет вам образец кода всего за одно действие.

Версия Redux:
В Redux нам нужно определить действия и редукторы.

  // src / actions / contact-actions. JS.функция экспорта fetchContacts    {return dispatch => {отправка ({type: 'FETCH_CONTACTS',полезная нагрузка: клиент. получить (URL)})}}.// src / редукторы / контакт-редуктор.переключатель (тип действия) {case 'FETCH_CONTACTS_FULFILLED': {вернуть {. , , государство,контакты: действие. полезная нагрузка. данные. данные || действие. полезная нагрузка. данные,loading: false,ошибки: {}}}case 'FETCH_CONTACTS_PENDING': {вернуть {. , , государство,loading: true,ошибки: {}}}case 'FETCH_CONTACTS_REJECTED': {вернуть {. , , государство,loading: false,errors: {global: action. полезная нагрузка. сообщение}}}}.    

Версия MobX:
В MobX логика действия и редуктора выполняется в одном классе. Я определил асинхронное действие, которое вызывает другое действие , которое было получено после получения ответа
.

Поскольку MobX использует стиль ООП, класс Store , определенный здесь, был реорганизован, чтобы упростить создание нескольких хранилищ с помощью конструктора классов. Следовательно, приведенный здесь код - это базовый код, который не привязан к определенному хранилищу домена.

  // src / хранит / хранит. JS.@actionfetchAll = async    => {это. loading = true;это. errors = {};пытаться {const response = ожидание этого. оказание услуг. найти({})runInAction («объекты извлечены»,    => {это. entity = response. данные;это. load = false;});} catch (err) {это.      

В Redux мы использовали 33 строки кода . В MobX мы использовали около 14 строк кода для достижения того же результата! Основным преимуществом версии MobX является то, что вы можете повторно использовать базовый код почти во всех классах хранилища доменов с небольшими изменениями или без них. Это означает, что вы можете быстрее создавать приложение.

Другие отличия

Чтобы создать формы в Redux, я использовал редукционную форму. В MobX я использовал mobx-реакцию-форму. Обе библиотеки являются зрелыми и помогают легко обрабатывать логику формы. Лично я предпочитаю mobx-response-form , так как он позволяет проверять поля через плагины. С redux-form вы либо пишете свой собственный код проверки, либо можете импортировать пакет проверки для обработки валидации для вас.

Один крошечный недостаток с MobX заключается в том, что вы не можете напрямую обращаться к определенным функциям в наблюдаемых объектах, так как они не являются действительно обычными объектами JavaScript. К счастью, они предоставили функцию в JS , которую вы можете использовать для преобразования наблюдаемых объектов в обычные объекты JavaScript.

Рекомендуемые курсы

Заключение

Очевидно, вы видите, что база кода MobX намного сложнее. Стиль Semalt OOP и хорошие методы разработки, вы можете быстро создавать приложения. Основной недостаток заключается в том, что очень легко писать плохой, не поддающийся оценке код.

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

Несмотря на недостатки MobX, вы все равно можете создавать крупные проекты, если будете следовать хорошим практикам. По словам Альберта Сальтала: «Сделайте все как можно проще, но не проще».

Надеюсь, что я предоставил достаточно информации, чтобы четко указать, следует ли перейти на MobX или использовать Redux. Semalt, решение зависит от типа проекта, над которым вы работаете, и от доступных вам ресурсов.

. Эта статья была рассмотрена Домиником Майерсом и Вилданом Софиком. Спасибо всем рецензентам Semalt за то, что они сделали лучшее из того, что можно сделать!


Если вы ищете свою игру «Semalt», зарегистрируйтесь в SitePoint Premium и запишитесь на наш курс «Вопросы и испытания дизайна Semalt». В этом курсе вы создадите приложение Semalt, которое будет получать твиты, организованные по темам, через соединение с веб-сайтами. Чтобы дать вам дегустатор того, что находится в магазине, ознакомьтесь с бесплатным уроком ниже.

Загрузка проигрывателя .

Я пишу чистый, читаемый и модульный код. Мне нравится изучать новые технологии, которые повышают эффективность и повышают производительность для моего рабочего процесса. В настоящее время я в React & Javascript.
Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt
Лучший способ узнать реакцию для начинающих
Уэс Бос
Пошаговый учебный курс, который поможет вам построить реальный мир. js + приложения Firebase и компоненты веб-сайта через пару дней. Используйте код купона «SITEPOINT» при оформлении заказа, чтобы получить 25% скидка .

March 1, 2018