5 Причин, Почему Вам Следует Забыть О Redux В React-Приложениях

Я работаю с React уже почти 3 года, использовал и Redux, и MobX, и на данный момент у меня есть вопрос.

Почему подавляющее большинство фронтенд-разработчиков продолжают твердо верить, что Redux + Redux Saga + Reselect + 100 500 других библиотек, «облегчающих жизнь», — лучшее решение на данный момент? Я приведу 4 причины, почему вам следует использовать MobX вместо Redux в вашем следующем проекте.



MobX позволяет писать более чистый и понятный код.

Давайте сравним 2 фрагмента кода, которые делают одно и то же.

Вот как выглядит редюсер в Redux:

5 причин, почему вам следует забыть о Redux в React-приложениях

Чтобы изменить состояние, вам нужно вызвать функцию, называемую действием в терминологии Redux:

5 причин, почему вам следует забыть о Redux в React-приложениях

И в большинстве случаев (не всегда, но это «лучшие практики», которые используются во многих проектах) вам понадобится написать такой шаблон:

5 причин, почему вам следует забыть о Redux в React-приложениях

Затем вам нужно будет инициализировать хранилище (это нужно будет сделать один раз, но все же):

5 причин, почему вам следует забыть о Redux в React-приложениях

И пробрасываем наше инициализированное хранилище дальше в приложение через провайдера (тоже разовая операция):

5 причин, почему вам следует забыть о Redux в React-приложениях

Теперь вы можете выполнять некоторые операции с данными в ваших компонентах:

5 причин, почему вам следует забыть о Redux в React-приложениях

Получается, что в случае с Redux, чтобы изменить данные в вашем хранилище, вы должны вызвать некоторые функции, которые создадут новый объект состояния.

Лично для меня это звучит полной ерундой.

Давайте посмотрим на ту же функциональность, которую выполняет MobX. Наш магазин:

5 причин, почему вам следует забыть о Redux в React-приложениях

И затем вы можете использовать его в компоненте:

5 причин, почему вам следует забыть о Redux в React-приложениях

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

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

Кстати, аналогичный подход, с классами, для хранения данных используется в Angularjs (Скрин взят отсюда angular.io/start/data ):

5 причин, почему вам следует забыть о Redux в React-приложениях



MobX позволяет писать меньше кода

Чтобы убедиться в этом, просто посмотрите на примеры выше.

И теперь вместо того, чтобы писать бесконечный шаблон, вы наконец можете сосредоточиться на написании бизнес-логики приложения, что не может не радовать.



Третье — оптимизация производительности

Если посмотреть примеры выше, то можно увидеть, что в случае с MobX я не использовал чистые компоненты и это не ошибка.

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

И да, вы можете забыть о Pure Components, mustComponentUpdate и обо всем, что вы используете в этих случаях.

В идеале каждый ваш компонент, который не является HOC и использует какие-то данные из хранилища, должен быть наблюдаемым и тогда вы навсегда забудете о проблемах оптимизации.



Четвертое — меньше зависимостей

Любой, кто использует Redux, должен не понаслышке знать, что в его состав входит множество «замечательных» библиотек.

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

понимать.

А доделать какой-то мелкий функционал или найти ошибку в этом продукте будет невероятно сложно и отнимает много времени.

MobX — ультимативное решение == не требует дополнительных библиотек, лишит вас всех этих прелестей, поэтому с ним бизнес-логика вашего приложения будет чиста, как слеза ребенка.

УПД.

Спасибо МаЗаАа

Пятая причина — возможность отказаться от setState

setState имеет ряд недостатков (краткий перевод статьи который вы можете прочитать в оригинале здесь ):

1. Это асинхронно.

Это может привести к неожиданному поведению:

5 причин, почему вам следует забыть о Redux в React-приложениях

На скриншоте выше в оповещении должно было быть 2, но поскольку setState асинхронный, он приходит позже.



2. setState приводит к ненужным перерисовкам компонента:

A. Он выполняет повторную визуализацию, даже если новое значение == старое значение.

б.

Бывают ситуации, когда изменение состояния не приведет ни к какому изменению, например, когда у нас есть условия для отображения, в которых состояние присутствует. На скриншоте ниже при нажатии произошел повторный рендеринг, хотя данные не должны рендериться из-за состояния fasle:

5 причин, почему вам следует забыть о Redux в React-приложениях

V. Иногда данные, которые обновляет setState, вообще не играют роли в рендеринге DOM (например, таймеры).

И все же компонент перерисовывается.



3. setState подходит не для всех случаев.

Существуют компоненты, которые используют перехваты/методы жизненного цикла компонентов, и в этом случае не только будет ненужная повторная отрисовка, но и эти события (перехваты) будут вызываться каждый раз, когда это делается, что может привести к странному поведению.

Использование MobX защитит вас от этих недостатков, ведь вы можете полностью отказаться от setState:

5 причин, почему вам следует забыть о Redux в React-приложениях

Если вы с чем-то не согласны или я чего-то не понимаю, приведите контраргументы в комментариях.

Ссылка на песочницу, из которой были сделаны скриншоты из MobX: codeandbox.io/s/mobxreact-s7db5 , с Redux: codeandbox.io/s/oj7px08qy9 Теги: #Разработка веб-сайтов #JavaScript #фронтенд-разработка #react.js #redux #mobx ##state-management #State Management

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.