В чем разница в подходах Redux и Vuex?

После Vue + Vuex начал изучать React + Redux и основное, что бросается в глаза это иммутабельность состояния в Redux. То есть все эти трюки в редьюcерах чтобы вернуть новый объект (например добавление элемента в todo):
return {
   ...state,
    tasks: {
       ...state.tasks,
        {id: uuid(),  task_text: 'some_text'}
   }
}

Я как бы понимаю, что redux не делает deep-search в объекте для экономии ресурсов и ему нужно явно знать, что объект новый.
Но в то же время в Vuex, состояние можно менять простым присваиванием и кажется, что это намного проще, даже в плане написания меньшего объема кода. Возникает вопрос, а где подвох?) То есть в чем профит/недостатки обоих подходов и почему реакт все еще популярен если приходится сложнее делать простые вещи?
  • Вопрос задан
  • 2307 просмотров
Пригласить эксперта
Ответы на вопрос 4
Важно понимать, что flux и redux - разные архитектуры. Redux является эволюцией Flux, у которого излишняя свобода и усложненность флоу (несколько сторов, мутабельность) приводили к геморрою с сопровождением сложных проектов и трудноотлавливаемым багам. Поэтому Redux полагается на "чистые" функции и редьюсеры для устранения сайд-эффектов.

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

Это я к тому, что vuex - имплементация flux, а не redux. Поэтому сравнивать ее нужно именно с flux.

А еще вью просто сыроват. Саги там тоже урезанные, в отличие от шикарных реактовских.
Ответ написан
@sergeyiljin
То есть в чем профит/недостатки обоих подходов и почему реакт все еще популярен если приходится сложнее делать простые вещи?

Принцип один - поместить данные в отдельное хранилище и отделить от кучи компонентов, каждый из которых отдельно с ним взаимодействует. Реакт популярен, так как он старичок и на нём уже куча всего написана. И ещё он имеет более низкоуровневый подход в разработке. Меньше абстракций. Во Vue минимум абстракций только для того, чтобы программисту можно было более комфортно работалось + в нём пытались реализовать аналог паттерна MVVM. Модель - JS код, вид - шаблон. Данные перегоняются из модели в вид и обратно путём директив в HTML. Учли пожелания верстальщиков, чтобы править не JSX, а только шаблон.
Ответ написан
Я как бы понимаю, что redux не делает deep-search в объекте для экономии ресурсов и ему нужно явно знать, что объект новый.

Причина иммутабельности не в этом. В реакте идет сильный уклон на функциональное программирование, а иммутабельность это одна из главных вещей в ФП.

Но в то же время в Vuex, состояние можно менять простым присваиванием и кажется, что это намного проще, даже в плане написания меньшего объема кода. Возникает вопрос, а где подвох?) То есть в чем профит/недостатки обоих подходов и почему реакт все еще популярен если приходится сложнее делать простые вещи?

В Реакте используется подход one-way-data-binding в отличие от большинства остальных, где используется two-way-data-binding. То есть проще говоря в Реакте данные идут сверху вниз и никогда обратно. Иммутальность данных при этом гарантирует, что данные не поменяет какой-нибудь нижлежащий дочерний компонент, тем самым неявно повлияв на родительский. Чтобы понять причины почему реакт сделан так, а не иначе, надо почитать про ФП и все станет ясно.
Ответ написан
@grinat
На самом деле они ничем не отличаются, там суть одна и та же, есть некая переменная, и в нее записаны данные. Просто у вуе висит магия на всех свойствах объекта, поэтому если ты напрямую изменишь данные, то будет реакция, у реакта это просто объект, поэтому ничо не обновится, нужен конектор, в котором волшебные единороги. У обеих иммутабельность только на бумаге.
Есть смысл сравнивать redux/vuex vs angular2+(rxjs)/svelte3, потому что первые на магии, а у вторых обычно надо явно подписываться на изменения.
Вуе делался разрабом и для разрабов как улучшенный клон angularjs, react делался фэйсбуком для своих целей, angular пытались сделать как решение для энтерпрайза, а получилось тяжелое и неуклюжее говно, самый нормальный это svelte3, но когда я на нем апликуху писал, то тогда не было ни роутера под него, ни возможности запускать юнит тесты без хромиума. В общем, на самом деле они все имеют свои проблемы и потрахаться на пустом месте можно с каждым.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Myagi Минск
от 3 000 до 4 000 usd.
от 90 000 до 220 000 руб.
Seotlt Тольятти
от 2 000 до 3 000 usd.