Поскольку Context больше не является экспериментальной функцией, и вы можете использовать Context в своем приложении напрямую, он отлично подходит для передачи данных глубоко вложенным компонентам, для которых он был разработан.
Как написал Марк Эриксон в своем блоге:
Если вы используете Redux только для того, чтобы не передавать реквизиты, контекст может заменить Redux, но тогда вам, вероятно, вообще не нужен Redux.
Контекст также не дает вам ничего вроде Redux DevTools
, возможности отслеживать обновления вашего состояния, middleware
для добавления централизованной логики приложения и других мощных возможностей, которые Redux
предоставляет.
Redux
намного мощнее и предоставляет большое количество функций, которые Context Api
не предоставляет, также как упоминал @danAbramov
React Redux внутренне использует контекст, но не раскрывает этот факт в общедоступном API. Таким образом, вы должны чувствовать себя намного безопаснее, используя контекст через React Redux, чем напрямую, потому что, если он изменится, бремя обновления кода будет лежать на React Redux, а не на вас.
Его задача Redux - фактически обновить свою реализацию, чтобы она соответствовала последнему контекстному API.
Последнюю версию Context API можно использовать для приложений, в которых вы просто используете Redux для передачи данных между компонентами, однако приложение, которое использует централизованные данные и обрабатывает запросы API в создателях действий, использующих redux-thunk
или redux-saga
, по-прежнему будет нуждаться в redux. Помимо этого, у redux есть другие связанные библиотеки, такие как redux-persist
, которые позволяют сохранять данные хранилища в localStorage и восстанавливать их при обновлении, что API контекста по-прежнему не поддерживает.
Как отметил @dan_abramov в своем блоге, Вам может не понадобиться Redux , у этого redux есть полезное приложение, например
- Сохранять состояние в локальном хранилище, а затем загружаться из него прямо из коробки.
- Предварительно заполните состояние на сервере, отправьте его клиенту в формате HTML и загрузитесь с него прямо из коробки.
- Сериализируйте действия пользователя и прикрепляйте их вместе со снимком состояния к автоматическим отчетам об ошибках, чтобы разработчики продукта
могли воспроизвести их для воспроизведения ошибок.
- Передайте объекты действий по сети для реализации сред совместной работы без существенных изменений в написании кода.
- Сохраняйте историю отмены или внедряйте оптимистичные мутации без кардинальных изменений в написании кода.
- Путешествуйте между историей состояний в разработке и повторно оценивайте текущее состояние из истории действий при изменении кода, как TDD.
- Обеспечьте полный контроль и возможности контроля для инструментов разработки, чтобы разработчики продуктов могли создавать собственные инструменты для своих приложений
.
- Предоставьте альтернативные пользовательские интерфейсы при повторном использовании большей части бизнес-логики.
С таким большим количеством приложений слишком рано говорить о том, что Redux будет заменен новым Context API.
30.03.2018