Pull to refresh

Comments 28

Как заставить разработчика испытывать ненависть к React'у? И ярое желание перейти на Vue/Svelte побыстрее.
— Использовать голый React или React + Redux.

Как заставить разработчика полюбить React?
— Использовать его в связке с MobX, используя React чисто как View, а для управления состоянием использовать только MobX.
Использовать его в связке с MobX

В связке с MobX практически любые шаблонизаторы и компоненты работают просто прекрасно. Так что фиг знает насчёт любви именно к реакту.
Просто именно реакт сам по себе голый или в связке с редаксом — дно, по сравнению с остальными. А вот в связке с MobX получается мощный, полноценный и самодостаточный инструмент с полной поддержкой тайпскрипта в добавок.
У реакта на 100% типизированы шаблоны если использовать TypeScript. В том же Angular, который написан на TS и постоянно этим кичится, до сих пор нет способа на уровне типов гарантировать обязательность пропса, не говоря уже про более сложные сценарии, которые поддерживает TSX:
— Наследование пропсов: stackoverflow.com/a/45677919
— Generic компоненты: react-typescript-cheatsheet.netlify.app/docs/advanced/guides/generic_components
— Типизация children
У реакта на 100% типизированы шаблоны

Не «у реакта», а в jsx/tsx. Jsx/tsx доступен не только в реакте.
И jsx хоть и даёт определенную типизацию в шаблонах — но и не 100%, валидность html вам никто не проверит, например, не говоря уж про то, что jsx не имеет 1:1 соответствия с html, и это тоже мешает.
Так что это фича не из разряда прорывных, а из «шаг вперед, шаг назад».
Все зависит от вашего редактора кода
MobX и Redux оба имеют как плюсы, так и минусы. Выбор склоняется к предпочтениям самого программиста — кому с чем удобнее работать…

Для большинства главный минус MobX в том, что он слишком магический, нужно дольше разбираться, включать мозг. Большинству просто лень потратить пару вечеров, значительно облегчив себе дальнейшую жизнь. Да и зачем? Возросшая в полтора раза эффективность команды далеко не всегда очевидна руководству и вовсе не гарантирует симметричное увеличение ЗП.

Вся магия:
mobx 4 версия это getters/setters — learn.javascript.ru/descriptors-getters-setters
mobx 5 версия это proxy — learn.javascript.ru/proxy
А аргумент «потратить пару вечеров, значительно облегчив себе дальнейшую жизнь» я думаю более чем оправдан, т.к. это не просто облегчение дальнейшей жизни, это сильное облегчение дальнейшей жизни.
Вся магия:
mobx 4 версия это getters/setters

ну если достаточно такого уровня понимания, то да, всё просто и понятно — в аксессорах что-то там происходит и норм). Думаю многим хочется понимать чуть больше: как происходит выявление и поддержание в актуальном состоянии зависимостей вычисляемых ячеек, как происходит распространение изменений по цепочке вычисляемых ячеек и тд… Понимать это хочется на случай возможной отладки в каком то сложном кейсе и вот с этим пониманием как раз и появляются проблемы, поскольку алгоритм не так уж и примитивен и пару вдумчивых вечеров придётся ему уделить.


mobx 5 версия это proxy

с proxy как раз меньше всего проблем должно возникать, так как он просто обёртка над алгоритмом ничего о нём не знающем. Это просто способ уменьшить количество @observable в коде.


А аргумент «потратить пару вечеров, значительно облегчив себе дальнейшую жизнь» я думаю более чем оправдан, т.к. это не просто облегчение дальнейшей жизни, это сильное облегчение дальнейшей жизни.

да я то как раз не против и даже за, я просто пытаюсь найти объяснение, почему столь удобный подход получил столь малое распространение.

Какие минусы имеет MobX по сравнению с Redux по вашему? Размер библиотеки не в счет, так как то, что mobx весит потяжелее компенсируется тем, что с ним писанины кода гораздо меньше и за счет этого можно считать что итоговый размер связанный со стейт менеджментом одинаковый и там и там в реальном приложении. По этому хотелось бы услышать любые другие аргументы против.

Вообще-то у каждого есть свои предпочтения, кому-то нравится Редакс, а кому-то мобх, даже если ты разобрался с последним это не значит, что ты его будешь везде юзать.
Ну а так, я лично более жизанутый по этой теме) я написал свою либу, которая удовлетворяет мои потребности. Если интересно, react-stones. Легковесная, простая, быстрая. Буду рад ишуям всяким

Честно не знаю ни одного человека, который разобрался в MobX (да там особо разбираться нечего 1-2 вечера экспериментов и готово), применил его хоть на одном проекте и в итоге после этого дальше использует Redux вместо MobX, а людей которых я познакомил с MobX много. Возможно конечно существуют такие индивидумы, есть же люди которые реально любят боль и страдания, других причин я не вижу вообще.
Не уверен насчет собирания map{State,Dispatch}ToProps в одну функцию — на мой взгляд, локальность кода очень уж страдает. Чтобы понять, какие props получит компонента, придется листать эти километровые switch/case-штуки.

Мы их просто рядом с вызовом connect() пишем.
Согласен. В больших проектах не стоит так делать. Лучше разбивать mapState и mapDispatch на отдельные файлы для каждого компонента. А вообще можно не листать километровые кейсы, а найти по ключевым словам нужный кейс или быстро посмотреть в самом компонента через console.log(this.props). Но в любом случае выбор того или иного метода должен делатся в соотстветствии с требованиеми проекта и рассматриватся на этапе проэктирования.
Спасибо за статью! На мой взгляд, зря упущено описание базовой работы с хранилищем через хуки.

Почему во всех статьях и во всех уроках в редьюсере пишут эти уродливые switch case? Можно же сразу показать как правильно и удобно и красиво это сделать. Статья от этого больше не стала бы

для этого есть комменты, где ты можешь показать себя с лучшей стороны и пошарить пример как делать лучше)

Таков coding style от разработчиков redux (рекомендация разработчиков по использованию redux). Конечно можно это реализовывать и другими методами, но, наверное, лучше использовать общепринятые конструкции.

А ещё лучше просто это не использовать.

Потому что это стандарт. Все пишут редьюсеры таким образом. Что бы разные разработчики могли тебя понять.

Дык а как правильно и красиво-то?!

Большое спасибо за обзор. Только начинаю изучать Redux, у вас получился отличный справочник на первое время)
В пустую потратите время, смотрите лучше сразу на MobX, чтобы потом не жалеть об упущенном времени и тоннах говнокода которые можно было и не писать.
На проекте используется Redux, я тут условия диктовать не могу)
Несмотря на то, что на него все плюются, он все равно остается достаточно популярным.

Решил сделать следующий pet проект на React + Redux + TypeScript после Ангуляра.

Пытаюсь решить простую задачу, у меня есть state в нем поле tick, поле изменяется таймером.

Хочу чтобы циферки на таймере бежали.

Перечитал 100500 док с примерами не могу понять как сделать. По идее задача должна решаться в одну строчку, если вообще не автоматически. Но что-то не решается.

Близок к тому, чтобы сдаться и переделать на MobX

Конечно на Mobx это гораздо проще. Простой пример из доки на Mobx. Тут как раз таймер и обновления. А вот пример чуть посложнее - игра на Mobx c таймером, игру можно запустить локально.

Sign up to leave a comment.

Articles