Есть ли альтернатива React?

Кейс:
Есть сложный компонент. Таблица с кастомными элементами. Берем React, берем Redux. Сейчас же так модно.

И получаем набор абстракций
Action
ActionCreator
Reducer
CombineReducer
Store

Нам нужно использовать connect, чтобы подружить React и Redux. Еще не забывайте про вложенность компонентов и вам тоже нужен.

В итоге приходим к тому, что один компонент состоит из 10-ти слоев абстракций и чтобы сделать простой Handler, скажем на отправку данных на сервер или на клик, нам нужно пройти 10-12 функций...

Для простых компонентов React сгодится, но неужели огромный пласт разработчиков сошел с ума и считает, что все эти абстракции - это нормально?!

Растет сложность, растет стоимость изменений. И вот уже ты правишь Handler у родителя, а до дочернего элемента тебя отделяют 5 слоев абстракций + обвязки в виде Provider, Connect и других страшных слов.

Неужели нет других фреймворков для JS, например с Message-like системой, где есть объекты и каждый друг другу отправляет сообщения на изменения состояния?

И не нужно ходить кругами через ActionCreator -> Action -> ActionDispatcher -> CombineReducer -> Reducer -> State -> и с самого верхнего уровня добираться до ребенка еще слоев 5-6.
  • Вопрос задан
  • 2374 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 4
fnnzzz
@fnnzzz
front-end dev
Порадовала формулировка "Сейчас же так модно." - никто не заставляет вас использовать Ридакс сразу же.
Ден Абрамов (автор Redux) об этом писал - https://medium.com/@dan_abramov/you-might-not-need...

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

Redux нужен вам, если ваше приложение разрастается и управлять потоком данных становится сложнее:
- допустим вам нужно вызвать коллбэк и обработать его в чайлде, который стоит на том же уровне но через N-детей, в ридаксе же вы вызываете dispatcher и не беспокоитесь о том как же передать этот коллбек туда.
- или если у вас есть данные, которые используются в разных компонентах, редублицировать их? (ноу вэй), удобнее вытаскивать их из одного большущего объекта в таком случае.
- плюс ридакс хорошо решает проблему гонки состояний (иначе вы не сможете наверняка знать, что и в каком порядке у вас происходит на страничке).
- ну и плюс миддлвары

поэтому такое кол-во абстракций вполне оправдано, если конечно у вас есть потребность в них.
А если вам просто нужно по клику на кнопочку что-то перерисовать на страничке, то берете Vue и радуетесь.
Не нужно выбирать технологии только потому, что сейчас они "хайповые".
Ответ написан
AppFA
@AppFA
Frontend developer at Yandex
Возможно вы выбрали немного сложную архитектуру, раз у вас возникают такие проблемы. Пользуюсь реактом уже порядка полу года +-, очень удобно работается. Спустя какое-то время при правках никаких проблем не возникает, большая реиспользуемость опять же при правильном подходе.
По поводу вопроса, возможно вам стоит посмотреть в сторону mobx, где тоже реактивный подход. Кода там нужно писать на порядок меньше из-за большой абстракции, но опять же это влечет за собой сложность в понимании происходящего. В redux же все на чистых функциях, никакой магии, все компоненты\редьюсеры\экшены легко покрываются тестами.
Ответ написан
@kodwi
https://moikrug.ru/kodwi
Angular 2 / Vue.js
Ответ написан
ozknemoy
@ozknemoy
яваскриптист
посмотрел, потрогал, не понравилось. после модульности ангулара1 для меня это джейквери анархия. как поддерживать громадное приложение не понятно. для небольших сайтов думаю пойдет. хвастают его малым размером . но за те 2 дня что я погрузился в него, я подключил еще несколько либ. обычно когда похвастать нечем начинают что то придумывать. типа на западе небо голубее и реклама красочнее. альтернатива это ангулар 1(сказки про его старость и медленность оставим гомнокодерам которые любой язык заставят работать плохо), но не двойка, с двойкой борешься с платформой а не продуктом. плюс еще можно добавить vue2. понравился значительно больше ангулара 2, многое ребята стащили с первого ангулара, плюс там можно запросто подключать jquery либы и пререндерить серверной нодой
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы