Normalerweise poste ich Sachen, die mit Code zusammenhängen, auf Stack, aber dies ist eher eine Frage zu den allgemeinen Gedanken der Community.
Es scheint eine Menge Leute zu geben, die die Verwendung von Redux mit React zum Verwalten von Daten / Status befürworten, aber beim Lesen und Lernen von beiden bin ich auf etwas gestoßen, das nicht ganz richtig aussieht.
Redux
Am Ende dieser Seite: http://redux.js.org/docs/basics/UsageWithReact.html (Passing the Store) wird die Verwendung der "Magie" von React 'Context' empfohlen.
Eine Möglichkeit wäre, es als Requisite an jede Containerkomponente weiterzugeben. Es wird jedoch mühsam, da Sie das Speichern selbst durch Präsentationskomponenten verdrahten müssen, nur weil sie zufällig einen Container tief im Komponentenbaum rendern.
Wir empfehlen die Verwendung einer speziellen React Redux-Komponente, die aufgerufen wird, um den Speicher auf magische Weise für alle Containerkomponenten verfügbar zu machen ...
Reagieren
Auf der Seite "Kontext reagieren" ( https://facebook.github.io/react/docs/context.html ) wird oben eine Warnung angezeigt:
Der Kontext ist eine erweiterte und experimentelle Funktion. Die API wird sich wahrscheinlich in zukünftigen Versionen ändern.
Dann unten:
So wie globale Variablen beim Schreiben von klarem Code am besten vermieden werden, sollten Sie in den meisten Fällen die Verwendung von Kontext vermeiden ...
Verwenden Sie keinen Kontext, um Ihre Modelldaten durch Komponenten zu übertragen. Das explizite Durchführen Ihrer Daten durch den Baum ist viel einfacher zu verstehen ...
So...
Redux empfiehlt, die Funktion "Kontext reagieren" zu verwenden, anstatt sie store
über "Requisiten" an jede Komponente weiterzugeben. Während React das Gegenteil empfiehlt.
Außerdem scheint Dan Abramov (der Schöpfer von Redux) jetzt für Facebook (den Schöpfer von React) zu arbeiten, nur um mich mehr zu verwirren.
- Lese ich das alles richtig ..?
- Was ist der allgemeine aktuelle Konsens zu diesem Thema?
quelle
Antworten:
Der Kontext ist eine erweiterte Funktion und kann sich ändern. In einigen Fällen überwiegen die Annehmlichkeiten die Nachteile, sodass sich einige Bibliotheken wie React Redux und React Router trotz des experimentellen Charakters darauf verlassen.
Der wichtige Teil hier sind die Wortbibliotheken . Wenn der Kontext sein Verhalten ändert, müssen wir als Bibliotheksautoren Anpassungen vornehmen . Solange die Bibliothek Sie jedoch nicht auffordert, die Kontext-API direkt zu verwenden, sollten Sie sich als Benutzer keine Gedanken über Änderungen daran machen müssen.
React Redux verwendet den Kontext intern, macht diese Tatsache jedoch in der öffentlichen API nicht sichtbar. Sie sollten sich also viel sicherer fühlen, wenn Sie den Kontext über React Redux verwenden, als direkt, denn wenn er sich ändert, liegt die Last der Aktualisierung des Codes bei React Redux und nicht bei Ihnen.
Letztendlich unterstützt React Redux immer noch das Weitergeben von Speichern als Requisite. Wenn Sie also den Kontext vollständig vermeiden möchten, haben Sie diese Wahl. Ich würde jedoch sagen, dass dies unpraktisch ist.
TLDR: Vermeiden Sie es, den Kontext direkt zu verwenden, es sei denn, Sie wissen wirklich, was Sie tun. Die Verwendung einer Bibliothek, die sich intern auf den Kontext stützt, ist relativ sicher.
quelle
Ich weiß nichts über andere, aber ich bevorzuge es, den Connect Decorator von React-Redux zu verwenden, um meine Komponenten so zu verpacken, dass nur die Requisiten aus dem Geschäft, die ich benötige, in meine Komponente übertragen werden. Dies rechtfertigt die Verwendung von Kontext in gewissem Sinne, weil ich ihn nicht konsumiere (und ich weiß, dass jeder Code, für den ich verantwortlich bin, ihn in der Regel nicht konsumiert).
Wenn ich meine Komponenten teste, teste ich die nicht verpackte Komponente. Da React-Redux nur die Requisiten bestanden hat, die ich für diese Komponente benötigt habe, weiß ich jetzt genau, welche Requisiten ich beim Schreiben der Tests benötige.
Ich nehme an, der Punkt ist, ich sehe das Wort Kontext nie in meinem Code, ich konsumiere es nicht, also betrifft es mich bis zu einem gewissen Grad nicht! Dies sagt nichts über die "experimentelle" Warnung von Facebook aus. Wenn der Kontext verschwunden wäre, wäre ich genauso durcheinander wie alle anderen, bis Redux aktualisiert wurde.
quelle
Provider
undconnect
abstrahierst. Ich denke, wenn Dan Abramov jetzt bei FB ist, würden Sie hoffen, dass bei einer Änderung des Kontextes Redux und 'React-Redux' aktualisiert werden ... Aber es gibt keine Garantien, und die "experimentelle" Warnung von FB ist immer noch für alle sichtbar.Es gibt ein npm-Modul, das es wirklich einfach macht, dem Reaktionskontext Redux hinzuzufügen
https://github.com/jamrizzi/redux-context-provider
https://www.npmjs.com/package/redux-context-provider
quelle