React Context vs React Redux, коли я повинен використовувати кожен з них? [зачинено]


186

Випущено React 16.3.0, і API контексту вже не є експериментальною функцією. Ден Абрамов (творець Redux) написав хороший коментар тут про це, але це було 2 роки , коли контекст був ще особливість експериментальної.

Моє питання, на вашу думку / досвід, коли я повинен використовувати React Context над React Redux і навпаки?


Якщо ви порівнюєте API Redux і React Context, то це тому, що ви хочете лише тримати синхронізацію між компонентами. Перевірте duixпакет npm. Це лише простий менеджер штатів із зворотними дзвінками, дійсно простий у виконанні. Просто, щоб було зрозуміло: я творець.
Брода Ноель

Відповіді:


208

Оскільки Context більше не є експериментальною функцією, і ви можете використовувати Context у своїй програмі безпосередньо, і він буде чудовим для передачі даних до глибоко вкладених компонентів, для чого він був розроблений.

Як Марк Еріксон написав у своєму блозі :

Якщо ви використовуєте Redux лише для того, щоб уникнути передачі реквізиту, контекст може замінити Redux - але тоді вам, напевно, Redux не знадобився.

Контекст також не дає вам нічого подібного Redux DevTools, можливість відстежувати оновлення свого стану, middlewareдодавати централізовану логіку програми та інші потужні можливості, що це Redux дозволяє.

Reduxнабагато потужніший і надає велику кількість функцій, які Context Apiне надає, також, як згадував @danAbramov

React Redux використовує контекст внутрішньо, але він не викриває цей факт у відкритому API. Тож вам слід відчувати себе набагато безпечніше, використовуючи контекст через React Redux, ніж безпосередньо, тому що якщо він зміниться, тягар оновлення коду ляже на React Redux, а не на вас.

Його upto Redux фактично оновить свою реалізацію, щоб вона відповідала останнім контекстним API

Останній API контексту може бути використаний для програм, де ви просто використовуєте Redux для передачі даних між компонентами, однак додаток, який використовує централізовані дані та обробляє запит API у творців Action, використовуючи redux-thunkабо redux-sagaвсе ще потребує скорочення. Крім цього скорочення, пов'язані інші бібліотеки, redux-persistякі дозволяють зберігати дані зберігання в localStorage та повторно регідрувати оновлення, що те, що API API все ще не підтримує.

Як згадував @dan_abramov у своєму блозі, вам може не потрібен Redux , що у redux є корисна програма, як-от

  • Залиште стан до місцевого сховища, а потім завантажте його з коробки.
  • Попередньо заповніть стан на сервері, надішліть його клієнтові в HTML і завантажте з нього з вікна.
  • Серіалізуйте дії користувача та додайте їх разом із знімком стану до автоматизованих звітів про помилки, щоб розробники продуктів
    могли відтворити їх для відтворення помилок.
  • Передайте об’єкти дій по мережі для реалізації середовищ спільної роботи без різких змін у тому, як пишеться код.
  • Зберігайте історію скасування або впроваджуйте оптимістичні мутації без різких змін у тому, як пишеться код.
  • Подорожуйте між історією стану в розробці та переоцініть поточний стан з історії дій, коли код змінюється, a la TDD.
  • Забезпечте повний огляд та контроль можливостей для розробки інструментів, щоб розробники продуктів могли створювати власні інструменти для своїх
    додатків.
  • Надайте альтернативні інтерфейси користувача, використовуючи при цьому більшість бізнес-логіки.

Завдяки цим багатьом додаткам ще занадто рано говорити про те, що Redux буде замінений новим API контексту


Гаразд, а як щодо повторного використання? Контексти є повністю багаторазовими, коли тільки редукс + громовідвід, а особливо редукс + сага ледве.
Юрій Гайовий

4
@Daggett Одне, що нам потрібно зрозуміти, це редукс - це не контекст, він побудований поверх контексту; магазин, який ви перейшли, передається за контекстом, також ви можете пояснити, що ви маєте на увазі під повторним використанням
Shubham Khatri,

Навіть розвиток такої основної речі, як контейнер для багаторазового використання, з побічними ефектами стає кошмаром зі скороченням. Redux є жорстким до рівня програми, і ви можете сказати, він все ще може бути використаний для багаторазового використання і т. Д. І т.д. .
Юрій Гайовий

@YuriiHaiovyi Я згоден з вашими питаннями. Ця відповідь є в основному складеною версією того, про що йдеться у пов'язаних публікаціях блогу. Нічого щодо спільного використання власної точки зору, як я використовував лише контекст, а потім я застряг, і вважав, що це поганий вибір з якихось причин x, y, z, а потім перейшов до Redux, Mobx, який вирішив це .. або зворотного наприклад, історія . В основному люди запитують чи шукають це, щоб дізнатися, чи є якісь погані чи добрі історії, які можуть допомогти читачам думати та приймати обчислені рішення ... Тож моє питання, який шлях ви обираєте?
Arup Rakshit

4
Яка частина редукції не підлягає багаторазовому використанню? Ви можете легко використовувати редуктори, селектори, творці дій та дій в іншій програмі зі скороченням (реагувати, навіть кутовим).
Давид Молнар

85

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

З іншого боку, якщо ви використовуєте Redux для всього іншого (мати передбачуваний контейнер стану, керувати логікою вашого додатка поза компонентами, централізувати стан програми, використовувати Redux DevTools для відстеження, коли, де, чому і як стан вашої програми змінивши або використовуючи плагіни, такі як Redux Form , Redux Saga , Redux Undo , Redux Persist , Redux Logger тощо…), то немає абсолютно ніяких причин відмовлятися від Redux. ContextAPI не надає будь - якого з цього.

І я особисто вважаю, що розширення Redux DevTools є дивовижним, заниженим інструментом налагодження, який виправдовує себе, продовжуючи використовувати Redux.

Деякі посилання:


12

Я вважаю за краще використовувати redux з функцією redux-thunk для здійснення дзвінків API (також використовуючи Axios) та відправлення відповіді на редуктори. Це чисто і легко зрозуміти.

API контексту дуже специфічний для частини реакції-редукції щодо того, як компоненти React підключаються до магазину. Для цього добре реагувати-редукція. Але якщо ви хочете, оскільки Context офіційно підтримується, ви можете використовувати API контексту замість react-redux.

Отже, питання повинно бути в контексті API Context vs react-redux, а не Context API vs redux. Також питання злегка сумнівно. Оскільки я знайомий з реагуванням-редуксом і використовую його у всіх проектах, буду продовжувати його використовувати. (Для мене немає стимулу змінюватися).

Але якщо ви сьогодні вивчаєте редукс, і ви його ніде не використовували, варто спробувати API контексту та замінити реакцію-редукцію на свій спеціальний код API контексту. Можливо, так набагато чистіше.

Особисто це питання знайомства. Немає чітких причин вибирати одне над іншим, оскільки вони рівнозначні. І внутрішньо, реакція-редукс використовує Context так чи інакше.


10

Єдині причини використовувати Redux для мене:

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

Ймовірно, вам не потрібен рівень непрямості для всього вашого додатка, тому добре змішувати стилі та використовувати локальний стан / контекст та Redux одночасно.


1
  • Якщо вам потрібно використовувати проміжне програмне забезпечення для різних цілей. Наприклад, реєстрація дій, повідомлення про помилки, відправлення інших запитів залежно від відповіді сервера тощо.
  • Коли дані, що надходять з декількох кінцевих точок, впливають на один компонент / представлення.
  • Коли ви хочете мати більший контроль над діями у своїх програмах. Redux дозволяє відстежувати дії та зміни даних, це значно спрощує налагодження.
  • Якщо ви не хочете, щоб відповідь сервера безпосередньо змінила стан вашої програми.Redux додає шар, де ви можете вирішити, як, коли і якщо ці дані слід застосовувати. Шаблон спостерігача. Замість створення декількох видавців та передплатників у всьому додатку ви просто підключите компоненти до магазину Redux.

Від: Коли використовувати Redux?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.