Redux еще не умер

Многие переживают за судьбу react redux и собственно redux в целом. У нас хорошие новости — все в порядке. Автор оригинальной статьи Mark Erikson

Mark Erikson

Разве Redux мертв, умирает, устарел, либо его вообще следует заменить?
-Нет.

Есть ли ситуации, в которых Redux не нужен?
-Конечно, без этого никак

Поясним подробнее

В последнее время появилось множество комментариев и статей, в которых люди задаются вопросом, не умер ли Redux, и утверждают, что очередной «инструмент X» заменит его. Я расскажу о некоторых источниках этой путаницы и объясню, что же происходит на самом деле.

«Redux переоценен»

Откуда это взялось?
Redux существует уже около трех лет. Для библиотеки JS это как… целая вечность:) Он очень быстро стал популярным, и многие люди бескомпромиссно начали использовать Redux, не понимая, когда он действительно необходим. Таким образом возникла определенная отрицательная реакция, и народ стал искать альтернативу, принимая на вооружение другие библиотеки управления состоянием и создавая собственные.

К этому относилась и волна твитов месячной давности о злоупотреблении Redux. Один из таких твитов, в частности, был от Cory House, известного в React-коммьюнити автора и преподавателя. Этот пост и многие другие жестко ретвиттились, и какое-то время по Твиттеру «рикошетила» мощная дискуссия.

Разгребаем путаницу

Сторонники Redux (в первую очередь Дэн Абрамов и Эндрю Кларк, а теперь Тим Дорр и, собственно, я) всегда говорили, что Redux вам может и не понадобиться. Для его применения есть отличные причины, но необязательно, что конкретно в вашем случае это лучшее решение. Как и для любого другого инструмента, прежде чем использовать Redux, необходимо взвесить все компромиссы и оценить преимущества.

В Твиттере я видел много комментариев, что люди отказываются от Redux в пользу чего-то иного. В то же время, по моим собственным подсчетом, Redux используется в 50-60 процентах от общего количества приложений React; если же добавить к этому его применение в других инфраструктурах JS, таких как Angular, Ember и Vue, то получится пользовательская база, которая не исчезнет за одну ночь. (Также существует разница между тем, что сиюминутно творится в социальных сетях и тем, что люди действительно делают в «реальном мире»).

Также следует отметить, что Redux не принадлежит Facebook — это отдельный проект с открытым кодом. Оба его создателя (Дэн Абрамов и Эндрю Кларк) теперь работают в Facebook, но ни Тим Дорр, ни я к Facebook не имеем отношения. Мы общаемся с командой React, чтобы помочь координировать дальнейшие планы, но Redux им не принадлежит.

«Новый Context API может заменить Redux»

Откуда это взялось?

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

Разгребаем путаницу

Да, новый Context API отлично подходит для передачи данных глубоко вложенным компонентам — он для этого разработан. Если вы используете Redux только для передачи props-ов, context может заменить Redux — но в таком случае Redux вам изначально не был нужен. Context не обеспечит вас инструментами, подобными Redux DevTools, возможностями отслеживать обновления состояния, промежуточным программным обеспечения для добавления централизованной логики приложений и другими мощными возможностями, которые есть у Redux.

«GraphQL может заменить Redux»

Откуда это взялось?

Нечто подобное происходит и вокруг GraphQL и Apollo Client. Некоторые статьи прямым текстом заявляли, что GraphQL позволит вам уйти от Redux. Помимо этого, у Apollo есть новый аддон apollo-link-state, который может обрабатывать состояние со стороны клиента, что также позволит использовать его вместо Redux.

Разгребаем путаницу

Я согласен, что выборка данных через GraphQL и, особенно, с Apollo, приведет к сокращению или вообще исключит код Redux, выполняющий то же самое. Но опять же, если вы использовали Redux только для этого, то после перемещения обработки данных в Apollo он вам больше не нужен. Скажу больше: apollo-link-state, вероятно, может справится с большей частью остальной логики состояния с клиентской стороны, и мне кажется, что Apollo в состоянии взять на себя настройки DevTools. Команда Apollo проделывает довольно грамотную работу, и хотя я не очень доволен, когда люди отказываются от Redux, но в конечном итоге, мы все хотим создавать «крутые приложухи», полезные для пользователей. Однако, как и в случае с context, хочу сказать, что определенно есть случаи, когда Redux сработает лучше, чем чем GraphQL + Apollo, и, возможно, в вашей архитектуре не потребуется столько бай-инов. Это особенно актуально, когда вы делаете нечто более сложное, чем просто извлечение данных или обновление парочки значений локального состояния, например, сохранение пользовательских данных или реализацию сложной логики рабочего процесса.

«Нечто от React заменит Redux»

Откуда это взялось?

Недавно Дэн Абрамов дал отличное выступление на JS Conf Iceland, где продемонстрировал два предстоящих аспекта «асинхронного рендеринга» React: «резка времени» (time slicing) позволит React разделить вычисления обновлений для большей их плавности, а «React Suspense» позволит глубоко вложенным компонентам отсрочить их рендеринг до тех пор, пока извлеченные данные не будут доступны. К сожалению, вскоре после выступления сайт, известный ошибочными и плохо написанными статьями о React, опубликовал пост, в котором утверждается, что «Дэн Абрамов анонсировал новую библиотеку «future-fetcher», которая заменит Redux», и прикрепил твит Кента С. Доддса с этим заявлением в качестве доказательства.

Разгребаем путаницу

Одна из проблем социальных сетей в том, что с их помощью легко дезинформировать. И в особенности это касается данного случая, поскольку эта широко распространенная статья о том, что Дэн якобы анонсировал «future-fetcher», была целиком и полностью неверной. Тот анонс Дэна касался исключительно асинхронных возможностей React и не имел ничего общего с Redux. Кроме того, твит Кента о замене Redux был в буквальном смысле шуткой в «live-commentary» Твиттера. В статье было либо полное непонимание экосистемы React, либо преднамеренная попытка внести путаницу или FUD («fear, uncertainty and doubt» — страх, неопределенность и сомнения).

Будущее Redux

Как мейнтейнер Redux, могу вас заверить, что он никуда не денется. Основная библиотека Redux стабильна, и у нас действительно есть бета-версия 4.0. Несмотря на увеличение номера версии, это всего лишь чистка некоторых крайних ситуаций и улучшение типизаций TypeScript. Помимо этого, экосистема Redux процветает.

В ближайшем будущем будет проводиться по-настоящему интересная работа с библиотекой React-Redux. Мы собираемся ее обновить, чтобы лучше работать с асинхронными возможностями React’а. У нас открыт вопрос для обсуждения, как Redux будет работать с асинхронным React, и я доказал концепцию PR, которая обновляет connect для использования нового context API. На протяжении следующим нескольких месяцев будет еще больше работы, однако мы постараемся сделать так, чтобы React и Redux оставались отличным выбором для разработки приложений.

Анонс redux 4.0

Буквально перед публикацией Тим Дорр твитнул, что версия 4.0 уже почти готова.

Никаких новых серьезных изменений, тем не менее — Redux жив! :)

Оригинал статьи: Redux not dead yet

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: