Nano Hash - криптовалюты, майнинг, программирование

React Context против React Redux, когда мне следует использовать каждый из них?

React 16.3.0 был выпущен, а Context API больше не является экспериментальной функцией. Дэн Абрамов (создатель Redux) написал хороший комментарий здесь Об этом, но прошло 2 года, когда Контекст все еще был экспериментальной функцией.

Мой вопрос: по вашему мнению / опыту, когда мне следует использовать React Context вместо React Redux и наоборот?


  • Если вы сравниваете Redux и React Context API, это потому, что вы хотите, чтобы vars синхронизировались только между компонентами. Проверьте пакет duix npm. Это всего лишь простой диспетчер состояний с обратными вызовами, который очень легко реализовать. Чтобы было ясно: я создатель. 25.12.2018

Ответы:


1

Поскольку 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
  • Хорошо, а как насчет повторного использования? Контексты полностью повторно используются, как только redux + thunk и особенно redux + saga едва ли. 20.04.2018
  • @Daggett Одна вещь, которую нам нужно понять, это то, что redux - это не контекст, он построен поверх контекста, хранилище, которое у вас есть, передается по контексту, также можете ли вы уточнить, что вы имеете в виду под повторным использованием 20.04.2018
  • Даже разработка такой простой вещи, как многоразовый контейнер с побочными эффектами, становится кошмаром с redux. Redux тесно связан с уровнем приложения, и вы можете сказать, что он все еще многоразовый и т.д. и т.д., но говоря многоразовый, я имею в виду полностью многоразовый ... Без спагетти шипов, построен как отдельный пакет и может повторно использоваться независимо от настройки приложения . 20.04.2018
  • @YuriiHaiovyi Я согласен с вашими вопросами. Этот ответ в основном представляет собой скомпилированную версию того, что говорится в связанных сообщениях блога. Ничего о том, чтобы поделиться собственной точкой зрения, например . Я использовал только контекст, а затем я застрял и почувствовал, что это плохой выбор по некоторым причинам x, y, z, а затем перешел на Redux, Mobx, который решил это .. или обратная история например. В основном люди спрашивают или ищут это, чтобы увидеть, есть ли какие-нибудь плохие или хорошие истории, которые затем могут помочь читателям подумать и принять взвешенные решения ... Итак, мой вопрос, какой путь вы выберете? 15.09.2018
  • Какая часть redux не может использоваться повторно? Вы можете легко повторно использовать редукторы, селекторы, действия и создатели действий в другом приложении с redux (реагировать, даже angular). 30.10.2018

  • 2

    Если вы используете Redux только для того, чтобы не передавать свойства глубоко вложенным компонентам, вы можете заменить Redux на Context API. Он как раз предназначен для этого варианта использования.

    С другой стороны, если вы используете Redux для всего остального (наличие контейнера предсказуемого состояния, обработка логики вашего приложения вне ваших компонентов, централизация состояния вашего приложения с использованием Redux DevTools, чтобы отслеживать, когда, где, почему и как изменилось состояние вашего приложения, или с помощью таких плагинов, как Redux Form, Redux Saga, Redux Undo, Redux Persist, Redux Logger и т. Д.), То у вас нет абсолютно никаких причин отказываться от Redux. Context API ничего из этого не предоставляет.

    И я лично считаю, что расширение Redux DevTools - удивительный, недооцененный инструмент отладки, который сам по себе оправдывает использование Redux.

    Некоторые ссылки:

    30.03.2018

    3

    Я предпочитаю использовать redux с redux-thunk для выполнения вызовов API (также с использованием Axios) и отправки ответа редукторам. Он чистый и понятный.

    Контекстный API очень специфичен для части react-redux о том, как компоненты React подключаются к хранилищу. Для этого подойдет react-redux. Но если вы хотите, поскольку Context официально поддерживается, вы можете использовать Context API вместо response-redux.

    Итак, вопрос должен заключаться в Context API против response-redux, а не в Context API против redux. Кроме того, вопрос несколько самоуверенный. Поскольку я знаком с react-redux и использую его во всех проектах, я буду продолжать его использовать. (У меня нет стимула меняться).

    Но если вы изучаете redux только сегодня и нигде не использовали его, стоит попробовать Context API и заменить response-redux на свой собственный код Context API. Может, так намного чище.

    Лично это вопрос знакомства. Нет четкой причины выбирать одно перед другим, потому что они эквивалентны. А внутри react-redux все равно использует Context.

    30.03.2018

    4

    Единственные причины использовать Redux для меня:

    • Вам нужен объект глобального состояния (по разным причинам, например, возможность отладки, постоянство ...)
    • Ваше приложение велико или будет большим и должно масштабироваться для многих разработчиков: в таком случае вам, вероятно, понадобится уровень косвенности (например, система событий): вы запускаете события (в прошлом), а затем людей, которых вы не знаете, в своем организация действительно может их выслушать

    Вероятно, вам не нужен уровень косвенности для всего приложения, поэтому можно смешивать стили и использовать локальное состояние / контекст и Redux одновременно.

    28.05.2018

    5
    • Если вам необходимо использовать промежуточное ПО для различных целей. Например, ведение журнала действий, создание отчетов об ошибках, отправка других запросов в зависимости от ответа сервера и т. д.
    • Когда данные, поступающие из нескольких конечных точек, влияют на один компонент / представление.
    • Если вы хотите иметь больший контроль над действиями в своих приложениях. Redux позволяет отслеживать действия и изменение данных, это значительно упрощает отладку.
    • Если вы не хотите, чтобы ответ сервера напрямую менял состояние вашего приложения. Redux добавляет слой, на котором вы можете решить, как, когда и следует ли применять эти данные. Паттерн наблюдателя. Вместо того, чтобы создавать несколько издателей и подписчиков во всем приложении, вы просто подключаете компоненты к хранилищу Redux.

    От: Когда использовать Redux?

    13.12.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..