Я некоторое время искал хуки React, и в моей голове постоянно возникал один вопрос. Смогут ли хуки свергнуть редукс? Это довольно старая дискуссия, поэтому сначала немного контекста:
Многие люди (включая команду React) считают, что редукс и ему подобные просто адаптируются к новому API, делая подход HOC устаревшим, но мой вопрос:
С пользовательскими хуками, использовать редуктор и хорошо продуманной логикой, зачем мне вообще нужен Redux? Я имею в виду, не более ли продуктивно отправлять свои действия на один редьюсер? Я нашел много материала об этом, но ни один из них, кажется, не имеет окончательного ответа (может быть, потому, что его нет?), поэтому я хотел бы знать, что вы думаете о будущем Redux?
Нет, определенно нет.
Я обратился к этому в моем Выступление Reactathon 2019 на тему «Состояние Redux».
Подводя итог: хуки в основном предлагают способы делать те же вещи, которые вы уже могли бы делать, например, состояние локального компонента и избегание детализации поддержки через контекст. Если это все, для чего вы использовали Redux, то вам, вероятно, вообще не нужен Redux. Но у хуков есть свои ограничения, и есть много дополнительных вариантов использования Redux.
Также обратите внимание, что мы в настоящее время работает над разработкой общедоступного API хуков типа useRedux()
для React-Redux..
Будущее Redux: не забывайте также, что Redux используется не только с React — это контейнер состояния, не зависящий от фреймворка/библиотеки. Таким образом, даже если разработчики React перестанут с ним работать, Redux по-прежнему будет доступен другим разработчикам (Angular/Vue и т. д.) для использования в своих проектах.
Я думаю, что этот ответ становится менее актуальным, поскольку все больше людей узнают, как комбинировать useReducer с useContext и т. д.... Похоже, что Redux неизбежно становится все менее и менее актуальным.
Нисколько! Redux по-прежнему очень широко используется — по моим оценкам, он используется примерно в 50% приложений React. Кроме того, хотя useReducer
+ useContext
— хорошая комбинация, она имеет много ограничений и решает другой набор вариантов использования, чем Redux. Смотрите мой пост Редукс - еще не умер! для более подробной информации. Кроме того, наш официальный пакет Redux Toolkit упрощает использование Redux.
Сейчас действительно трудно сказать. Команда Redux активно обновляет продукт, добавляя в него несколько приятных функций. Однако один из создателей Redux (https://github.com/acdlite), похоже, находится на пути к уничтожению своих старых приложений в пользу новых функций в React.
При этом Redux — это проверенная и известная библиотека, с которой многие люди довольны. Я не считаю плохой идеей начать новый проект с редуксом сегодня, завтра или через год. Технологии не умирают за одну ночь. если он служит цели, он будет жить дальше.
Тем не менее, я думаю, что контекст и хуки — отличная альтернатива редуксу, но сообщество просто еще не знает, как его использовать.
Прошло больше года с момента публикации этого вопроса.
Хочу добавить, что на мой взгляд Redux потерял актуальность немного...
На мой взгляд, 2 игрока украли большую долю позиции Redux на рынке React:
Люди научились комбинировать useReducer с useContext для реализовать гораздо более простое решение и без третьей стороны зависимости. С тем преимуществом, что за этим стоит команда React; что означает, что мы будем получать постоянные улучшения, тесно интегрированные с фреймворком React.
MobX расширяет свою пользовательскую базу. Главным образом потому, что он предоставляет шаблон наблюдателя, который требует гораздо меньше шаблонного кода, чем Redux. (Об этом можно было бы поспорить).
Поэтому, несмотря на то, что Redux по-прежнему широко используется для проектов React, я предвижу, что это будет постепенно уменьшенный сверхурочно... - без каламбура... ну может быть немного ;) -
Специально для развития с нуля!
useReducer()
не централизована сама по себе. Это просто еще один способ иметь состояние внутри компонента (функции). Вы уже можете поместить все состояние вашего приложения в свой корень<App>
, используяthis.state
, если хотите, так что ничего существенного в этом нет сuseReducer()