Некоторые пояснения по поводу того, что происходит с Redux

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

Первоначально опубликовано в моем блоге на blog.isquaredsoftware.com как часть моей серии Ответы в блогах.

TL;DR

Redux мертв, умирает, устарел или скоро будет заменен?

No.

Есть ли ситуации, когда вам не нужен Redux?

Конечно, но это всегда было правдой.

Более длинное объяснение

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

«Redux слишком часто используется»

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

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

В рамках этого около месяца назад прошла волна твитов о том, как злоупотребляют Redux. Один, в частности, был от Кори Хауса, известного автора / учителя в сообществе React. Этот твит и многие другие получили множество ретвитов, и последовавшая дискуссия на какое-то время рикошетила по Твиттеру.

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

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

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

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

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

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

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

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

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

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

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

«Redux заменяется чем-то из React»

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

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

Одна из проблем социальных сетей заключается в том, что дезинформация может быстро распространяться. И особенно в этом случае, потому что эта широко распространенная статья о том, что Дэн объявляет о библиотеке «будущего», была полностью и совершенно неверной! Объявление Дэна касалось исключительно возможностей async React и не содержало ничего делать с Redux. Вдобавок твит Кента о замене Redux был буквально шутливым твитом в ветке с комментариями в прямом эфире на тему разговора. Статья была либо полным непониманием экосистемы React, либо преднамеренной попыткой сеять путаницу и FUD.

Будущее Redux

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

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

Готовы изучить Redux?

Итак, имея все это в виду, самое время научиться использовать Redux. Как всегда, в заключение приведу несколько ссылок на дополнительные ресурсы:

Я также призываю людей действительно понять, когда и почему им следует использовать Redux. Некоторые предлагаемые статьи:

Изучите Redux лично у меня!

Помимо всех статей, сообщений и ссылок, я собираюсь провести серию семинаров «Основы Redux» через Workshop.me! Я очень рад возможности провести пару дней, помогая людям узнать, как именно работает Redux и как его использовать.

Мой первый семинар« Основы Redux состоится 19–20 апреля в Нью-Йорке», а другие места проведения семинаров и даты будут определены позже в этом году. Билеты на семинар в Нью-Йорке все еще доступны! Если вы не в Нью-Йорке или уже привыкли к Redux, сообщите об этом тем, кого вы знаете, кто может быть заинтересован! :)

Первоначально опубликовано на blog.isquaredsoftware.com.