React Context vs React Redux, когда я должен использовать каждый из них?
React 16.3.0 был выпущен и контекст API больше не является экспериментальной функцией. Дан Абрамов (создатель Redux) написал хороший комментарий здесь об этом, но это было 2 года, когда контекст был все еще экспериментальная функция.
мой вопрос, по вашему мнению / опыт, когда я должен использовать Реагировать Контексте over React Redux и наоборот?
4 ответа:
как контекст больше не является экспериментальной функцией, и Вы можете использовать контекст в своем приложении напрямую и будет отлично подходит для передачи данных в глубоко вложенные компоненты, для которых он был разработан.
как написал Марк Эриксон в своем блог:
если вы используете только Redux, чтобы избежать передачи реквизитов, контекст может замените Redux - но тогда вам, вероятно, не нужен Redux в первом место.
контекст также не дает вам ничего подобного
Redux DevTools
, в возможность отслеживать обновления состояния,middleware
добавить централизованного логика приложения и другие мощные возможности, которыеRedux
давать возможность.
Redux
является гораздо более мощным и обеспечивает большое количество функций, которыеContext Api
не обеспечивает, также как и @danAbramov указаноReact Redux использует контекст внутри, но это не разоблачает этот факт в публичный API. Поэтому вы должны чувствовать себя намного безопаснее, используя контекст через среагировать Возвращение, чем напрямую, потому что если она изменяет, бремя обновления код будет на React Redux, а не вы.
его до Redux на самом деле обновить его реализацию, чтобы придерживаться последней API контекста
последний контекст API может использоваться для приложений, где вы просто будете использовать Redux для передачи данных между компонентами, однако приложение которые используют централизованные данные и обрабатывают запрос API в создателях действий с помощью
redux-thunk
илиredux-saga
все равно потребуется redux. Помимо этого redux имеет другие библиотеки, связанные какredux-persist
которые позволяют сохранять данные хранилища в localStorage и регидрировать при обновлении, что по-прежнему не поддерживает контекстный API.как @dan_abramov упомянул в своем блоге возможно, Вам не понадобится Redux, что Redux имеет полезное приложение, как
- сохраняйте состояние в локальном хранилище, а затем загружайтесь из него, из коробки.
- предварительно заполните состояние на сервере, отправьте его клиенту в HTML и загрузите с него, из коробки.
- сериализовать действия пользователя и присоединить их вместе со снимком состояния к автоматическим отчетам об ошибках, чтобы разработчики продукта
можно воспроизвести их, чтобы воспроизвести ошибки.- передача объектов действия по сети для реализации среды совместной работы без существенных изменений в способе написания кода.
- поддерживать историю отмены или реализовать оптимистические мутации без резких изменений в том, как код написан.
- перемещение между историей состояний в разработке и переоценка текущего состояния из истории действий при изменении кода, a Ла ТДД.
- обеспечивает полный контроль и возможности управления инструментальным средствам разработки, так что разработчики могут создавать собственные инструменты для их
приложения.- обеспечить альтернативные UIs при повторном использовании большей части бизнес-логики.
С этими многими приложениями его слишком рано говорить, что Redux будет заменен новым контекстным API
Если вы используете Redux только для того, чтобы избежать передачи реквизитов до глубоко вложенных компонентов, тогда вы можете заменить Redux на
Context
API. Он точно предназначен для этого случая использования.С другой стороны, Если вы используете Redux для всего остального (наличие предсказуемого контейнера состояний, обработка логики вашего приложения за пределами ваших компонентов, ведение истории обновлений состояния, использование Возвращение Инструменты Разработчика,Redux Отменить,Redux Persist, Redux Form,Redux Saga,Redux Logger и т. д...), то нет абсолютно никакой причины для вас, чтобы заменить вместе с
Context
API.ссылки:
Я предпочитаю использовать redux с redux-thunk для выполнения вызовов API (также используя Axios) и отправки ответа на редукторы. Это чисто и легко понять.
контекстный API очень специфичен для части react-redux о том, как компоненты React подключаются к хранилищу. Для этого react-redux хорош. Но если вы хотите, так как контекст официально поддерживается, вы можете использовать контекстный API вместо react-redux.
Итак, вопрос должен быть контекст API vs реагировать-возвращение, но не в контексте API и против обертывание. Кроме того, вопрос немного самоуверенный. Поскольку я знаком с react-redux и использую его во всех проектах, я буду продолжать его использовать. (У меня нет стимула меняться).
но если вы изучаете redux только сегодня, и вы нигде его не использовали, стоит дать Context API выстрел и заменить react-redux своим пользовательским кодом API контекста. Может быть, так гораздо чище.
лично, это вопрос о знакомстве. Нет никакой ясной причины выбирать одно над другим, потому что они эквивалентны. И внутренне, react-redux использует контекст в любом случае.
единственные причины использовать Redux для меня являются:
- вы хотите глобальный объект состояния (по разным причинам, как отладочность, персистентность...)
- ваше приложение является или будет большим и должно масштабироваться для многих разработчиков: в таком случае вам, вероятно, нужен уровень косвенности (т. е. система событий): вы запускаете события (в прошлом), а затем люди, которых вы не знаете в своей организации, могут их слушать
вам, вероятно, не нужен уровень косвенность для всего вашего приложения, поэтому можно смешивать стили и использовать локальное состояние/контекст и Redux одновременно.