Réagir Contexte vs Réagir Redux, quand devrais-je utiliser?

React 16.3.0 a été publié et le Context API N'est plus une caractéristique expérimentale. Dan Abramov (le créateur de Redux) a écrit un bon commentaire ici à ce sujet, mais il a été 2 ans où le contexte était encore une caractéristique expérimentale.

Ma question est, à votre avis/expérience quand dois-je utiliser Réagir Contexte plus Réagir Redux et inversement?

79
demandé sur GG. 2018-03-30 06:42:26

4 réponses

comme contexte n'est plus une caractéristique expérimentale et vous pouvez utiliser le contexte dans votre application directement et va être grand pour transmettre des données à des composants profondément imbriqués qui ce qu'il a été conçu pour.

comme Mark erikson a écrit dans son blog :

si vous utilisez seulement Redux pour éviter de transmettre des accessoires, le contexte pourrait remplacer Redux-mais ensuite vous probablement pas besoin de Redux dans le premier lieu.

Le contexte

ne vous donne pas non plus quelque chose comme le Redux DevTools , le possibilité de tracer vos mises à jour d'état, middleware pour ajouter centralisé logique d'application, et d'autres capacités puissantes que Redux permettre.

Redux est beaucoup plus puissant et fournit un grand nombre de fonctionnalités que le Context Api ne fournit pas, aussi comme @danAbramov mentionné

React Redux utilise le contexte en interne mais il n'expose pas ce fait en L'API publique. Vous devriez donc vous sentir beaucoup plus en sécurité en utilisant le contexte via React Redux que directement parce que si elle change, la charge de la mise à jour de la le code sera sur React Redux et pas vous.

jusqu'à Son Redux à fait de mise à jour de sa mise en œuvre afin de respecter les dernières contexte de l'API

le l'API de contexte le plus récent peut être utilisée pour les Applications où vous utilisez simplement Redux pour transmettre des données entre les composants, cependant l'application qui utilise des données centralisées et traite les créateurs de requêtes API en Action en utilisant redux-thunk ou redux-saga aurait encore besoin de redux. En dehors de ce redux a d'autres bibliothèques associées comme redux-persist qui vous permettent d'enregistrer des données de stockage dans localStorage et de se réhydrater sur refresh ce qui est ce que l'API de contexte ne supporte toujours pas.

As @dan_abramov a mentionné dans son blog vous pourriez ne pas avoir besoin de Redux , que redux a une application utile comme

  • Persistance de l'état d'un local de stockage, puis de démarrer à partir d'elle, hors de la boîte.
  • Pré-remplissage de l'état sur le serveur, l'envoi au client dans le HTML, et le démarrage à partir d'elle, hors de la boîte.
  • sérialiser les actions de l'utilisateur et les attacher, avec un État snapshot, à des rapports de bogue automatisés, de sorte que les développeurs de produits

    peut rejouer à reproduire les erreurs.
  • passer des objets d'action sur le réseau pour mettre en œuvre des environnements collaboratifs sans changements majeurs à la façon dont le code est écrit.
  • maintenir une histoire annulée ou mettre en œuvre des mutations optimistes sans changements majeurs à la façon dont le code est écrit.
  • voyage entre le l'histoire de l'état dans le développement, et de réévaluer l'état actuel à partir de l'histoire de l'action lorsque le code change, un la TDD.
  • fournir des capacités complètes d'inspection et de contrôle de l'outillage de développement afin que les développeurs de produits peuvent construire des outils personnalisés pour leur

    des apps.
  • fournit des UIs alternatifs tout en réutilisant la plupart de la logique commerciale.

avec ces nombreuses applications son bien trop tôt pour dire que Redux sera remplacé par le nouveau contexte API

103
répondu Shubham Khatri 2018-07-26 17:42:23

si vous utilisez Redux uniquement pour éviter de passer des accessoires vers des composants , vous pouvez remplacer Redux par L'API Context . Il est exactement destiné à ce cas d'utilisation.

d'autre part, si vous utilisez Redux pour tout le reste (ayant un conteneur d'état prévisible, la manipulation de la logique de votre application en dehors de vos composants, en gardant un État mises à jour l'histoire, en utilisant Redux DevTools , Redux Undo , Redux Persist , Redux Form , Redux Saga , Redux Logger , etc...), alors il n'y a absolument aucune raison pour vous de remplacer Redux avec l'API Context .

, les Références:

33
répondu GG. 2018-03-30 23:33:08

je préfère utiliser redux avec redux-thunk pour faire des appels API (en utilisant aussi Axios) et envoyer la réponse aux réducteurs. Il est propre et facile à comprendre.

L'API de contexte

est très spécifique à la partie react-redux sur la façon dont les composants React sont connectés au magasin. Pour cela, react-redux est bon. Mais si vous le souhaitez, puisque le contexte est officiellement supporté, vous pouvez utiliser l'API contexte au lieu de react-redux.

donc, la question devrait be Context API vs react-redux, et non Context API vs redux. En outre, la question est légèrement opiniâtre. Comme je connais react-redux et que je l'utilise dans tous les projets, je vais continuer à l'utiliser. (Il n'y a aucune raison pour moi de changer).

mais si vous apprenez redux aujourd'hui, et que vous ne l'avez utilisé nulle part, il vaut la peine de donner une chance à L'API de contexte et de remplacer react-redux par votre code D'API de contexte personnalisé. Peut-être, il est beaucoup plus propre comme ça.

Personnellement, c'est une question de familiarité. Il n'y a aucune raison de préférer l'un à l'autre parce qu'ils sont équivalents. Et en interne, react-redux utilise de toute façon le contexte.

4
répondu vijayst 2018-03-30 06:19:01

les seules raisons d'utiliser Redux pour moi sont:

  • vous voulez un objet d'état global (pour diverses raisons, comme la débuggabilité, la persistance...)
  • votre application est ou sera grande, et devrait être étendue à de nombreux développeurs: dans ce cas, vous avez probablement besoin d'un niveau d'indirectement( c'est-à-dire un système d'événements): Vous lancez des événements (dans le passé) et alors les personnes que vous ne connaissez pas dans votre organisation peuvent réellement les écouter

vous n'avez probablement pas besoin du niveau d'indirection pour l'ensemble de votre application, il est donc bien de mélanger les styles et d'utiliser l'état/contexte local et Redux les deux en même temps.

3
répondu Sebastien Lorber 2018-05-28 12:59:50