Réagir avec Redux? Qu'en est-il de la question du "contexte"?

normalement, je poste des choses liées au code sur la pile, mais c'est plus une question sur ce que sont les pensées générales de la communauté.

il semble que beaucoup de gens préconisent L'utilisation de Redux avec React pour gérer les données/l'état, mais tout en lisant et en apprenant les deux, j'ai trouvé quelque chose qui ne semble pas tout à fait juste.

Redux

au bas de cette page: http://redux.js.org/docs/basics/UsageWithReact.html (Passing the Store) il recommande d'utiliser la" magie " du contexte React.

une option serait de le passer comme accessoire à chaque élément du conteneur. Cependant, cela devient fastidieux, car vous devez stocker même à travers des composants de présentation juste parce qu'ils rendent un conteneur profondément dans l'arbre des composants.

L'option que nous recommandons est d'utiliser un spécial Réagir Composant Redux appelé à rendre magiquement le magasin disponible à tous les composants du conteneur...

Réagir

sur la page React Context ( https://facebook.github.io/react/docs/context.html ) il y a un avertissement en haut:

Le contexte

est une caractéristique avancée et expérimentale. L'API est susceptible de changer dans les versions futures.

puis au en bas:

tout comme les variables globales sont mieux évitées en écrivant du code clair, vous devriez éviter d'utiliser le contexte dans la plupart des cas...

N'utilisez pas context pour transmettre les données de votre modèle à travers components. Il est beaucoup plus facile de faire passer vos données explicitement à travers l'arbre...

So...

Redux recommande d'utiliser la fonctionnalité React 'Context' plutôt que de passer le store vers le bas jusqu'à chaque composant via 'props'. Alors que Réagir recommande le contraire.

aussi, il semble que Dan Abramov (le créateur de Redux) travaille maintenant pour Facebook (le créateur de React), juste pour m'embrouiller davantage.

  • suis-je en train de lire tout cela?.?
  • Quel est le consensus général actuel sur cette question?.?
76
demandé sur Joe Clay 2016-04-05 16:51:55

3 réponses

Contexte est une fonctionnalité avancée et est sujette à changement. Dans certains cas, ses avantages l'emportent sur ses inconvénients, de sorte que certaines bibliothèques comme React Redux et React Router choisissent de s'y fier malgré la nature expérimentale.

la partie importante ici est le mot bibliothèques . Si le contexte change son comportement, nous, en tant qu'auteurs de bibliothèques, devrons ajuster . Toutefois, aussi longtemps que la bibliothèque ne vous demande pas d'utiliser directement L'API de contexte, vous en tant qu'utilisateur ne devriez pas avoir à vous soucier des changements.

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

finalement React Redux supporte toujours passing store comme un accessoire donc si vous voulez éviter complètement le contexte, vous avez le choix. Cependant, je dirais que c'est impossible.

TLDR: évitez d'utiliser le contexte directement sauf si vous savez vraiment ce que vous faites. Utiliser une bibliothèque qui se trouve à dépendre du contexte interne est relativement sûr.

80
répondu Dan Abramov 2016-04-05 16:05:42

Je ne sais pas pour les autres, mais je préfère utiliser le décorateur connect de react-redux pour envelopper mes composants afin que seuls les accessoires du magasin dont j'ai besoin soient passés dans mon composant. Cela justifie l'utilisation du contexte dans un sens parce que I ne le consomme pas (et je sais, En règle générale, tout code dont je suis responsable ne le consommera pas).

quand je teste mes composants, je teste le composant non enveloppé. Parce que react-redux a seulement passé le accessoires dont j'avais besoin sur ce composant, je sais maintenant exactement de quels accessoires j'ai besoin quand j'écris les tests.

je suppose que le fait est, Je ne vois jamais le mot contexte dans mon code, je ne le consomme pas, donc à un certain degré, il ne m'affecte pas! Cela ne dit rien à propos de L'avertissement "expérimental" de Facebook.. Si le contexte disparaissait, je serais aussi foutu que les autres jusqu'à ce que Redux soit mis à jour.

4
répondu mjohnsonengr 2016-04-05 15:07:43

il y a un module npm qui rend très facile l'ajout de redux au contexte react

https://github.com/jamrizzi/redux-context-provider

https://www.npmjs.com/package/redux-context-provider

import React, { Component } from 'react';
import ReduxContextProvider from 'redux-context-provider';
import createStore from './createStore';
import actions from './actions';
import Routes from './routes';

export default class App extends Component {
  render() {
    return (
      <ReduxContextProvider store={store} actions={actions}>
        <Routes />
      </ReduxContextProvider>
    );
  }
}
1
répondu Jam Risser 2018-02-12 19:14:58