Heim > Web-Frontend > js-Tutorial > Hauptteil

Detaillierte Erläuterung funktionaler Unterkomponenten und Komponenten höherer Ordnung in React

不言
Freigeben: 2018-09-05 10:03:40
Original
1708 Leute haben es durchsucht

Dieser Artikel enthält eine detaillierte Erklärung der funktionalen Unterkomponenten und Komponenten höherer Ordnung in React. Ich hoffe, dass er für Freunde hilfreich ist.

Nachdem sie mit React-Projekten in Berührung gekommen sind, sollten die meisten Menschen HOC (High-Order-Components) und FaCC (Functions as Child Components) bereits verstanden oder verwendet haben, da diese beiden Muster weit verbreitet sind Die meisten reagieren auf Open-Source-Bibliotheken. Beispielsweise ist withRouter in React-Router eine typische Komponente höherer Ordnung, die eine Komponente akzeptiert und eine andere erweiterte Komponente zurückgibt. Bewegung in Reaktionsbewegung ist eine typische FaCC-Anwendung.

HOC und FaCC machen sehr ähnliche Dinge, beide ähneln dem Dekoratormuster im Designmuster. Alle Funktionen sind gegenüber den Originalinstanzen bzw. -einheiten erweitert.

Natürlich wird es nicht nur in einigen Open-Source-Bibliotheken verwendet, sondern auch beim täglichen Schreiben von Code gibt es viele Orte, an denen es geeignet ist, HOC und FaCC zu verwenden, um eine gewisse Logik zu kapseln. Zum Beispiel Datenvergrabungspunkte, Umschalten neuer Funktionen, Abrufen von Konvertierungsdaten usw. Sehr nützlich, um die Lesbarkeit des Codes und die Wiederverwendung von Logik zu verbessern.

HOC

Wir haben alle Funktionen höherer Ordnung verwendet, die eine Funktion akzeptieren und eine gekapselte Funktion zurückgeben:

const plus = first => second => (first + second)
plus(1)(2) // 3
Nach dem Login kopieren

Und Komponenten höherer Ordnung sind das Konzept von hoch- Ordnungsfunktionen, die auf Komponenten höherer Ordnung angewendet werden:

const withClassName = ComposedComponent => props => (
   <ComposedComponent {...props} className=&#39;demo-class&#39; />
)

// 使用
const Header = text => (<header>{text}</header>)
const headerWitheClass = withClassName(Header)
Nach dem Login kopieren

akzeptiert eine Komponente und gibt eine neue verpackte Komponente zurück. Das von uns häufig verwendete withRouter besteht darin, der Originalkomponente props Attribute wie localtion hinzuzufügen. Zusätzlich zum Hinzufügen von Requisiten können Komponenten höherer Ordnung auch Folgendes tun:

  • Einige Dinge vor und nach dem eigentlichen Aufruf der Komponente tun, z. B. Daten vergraben usw.

  • Bestimmen Sie, ob die Komponente gerendert werden soll oder ob andere Dinge gerendert werden sollen, z. B. das Rendern der Fehlerseite nach einem Fehler.

  • Requisiten übergeben und neue Requisiten hinzufügen

  • Anstatt die Komponente zu rendern, machen Sie einige andere Dinge, wie zum Beispiel das Rendern eines externen Doms

Die ersten drei Punkte oben sind bitte relativ einfach zu verstehen Erklären Sie den vierten Punkt. Beispielsweise müssen Sie nach dem Rendern einer Seite den Titel der Seite ändern. Dies ist eine häufige Anforderung für Einzelseitenanwendungen. Normalerweise können Sie dazu Hooks in einer bestimmten Router-Bibliothek verwenden. Natürlich kann dies auch durch HOC erreicht werden:

const withTitleChange = ComposedComponent => {
  return class extends React.Component {
    componentDidMount () {
      const { title } = this.props
      document.title = title
    }
    render () {
      const props = this.props
      return <ComposedComponent {...props} />
    }
  }
}
Nach dem Login kopieren

FaCC

In ähnlicher Weise ist FaCC auch ein Modus, der zur Verbesserung der Fähigkeiten von Originalkomponenten verwendet wird. Seine Hauptfunktion wird durch die Requisiten von React realisiert. Kinder. Alles, auch Funktionen. Wir können das obige Klassenbeispiel nehmen und es erneut mit FaCC implementieren:

const ClassNameWrapper = ({ children }) => children('demo-class')

// 使用

const HeadWithClass = (props) => (
  <ClassNameWrapper>
    {(class) => <header classNmae={class} ></header>}
  </ClassNameWrapper>
)
Nach dem Login kopieren

In FaCC können Sie im Lebenszyklus auch viele Dinge tun, z. B. HOC, um die ursprünglichen Komponenten zu kapseln. Grundsätzlich kann HOC dies tun es auch. Das Projekt, an dem ich arbeitete, verwendete HOC in großem Umfang. Nach einigen Diskussionen begann es, sich in großem Umfang in FaCC umzuwandeln.

Unterschiede

Beide werden zur Verbesserung der Originalkomponenten verwendet. Welches sollte verwendet werden? Welches ist das richtige Modell? Darüber gibt es in der Community viele Diskussionen. Einige Leute sagen beispielsweise, dass FaCC ein Anti-Pattern sei: Function as Child Components Are an Anti-Pattern. Als Grund gab er an, dass Kinder nicht semantisch sind und Verwirrung stiften würden. Dann schlug er das Component Injection-Muster vor, das interessierte Schüler lesen können.

Lassen Sie uns einen Vergleich aus mehreren Aspekten anstellen:

  1. Kompositionsphase

Die Kombinationsphase bedeutet HOC, FaCC und Beim Kombinieren verbesserte Komponenten. Es ist deutlich zu erkennen, dass FaCC mehr Abhängigkeitsinformationen zum Andocken von vorderen und hinteren Komponenten anzeigt, was relativ einfacher zu verstehen ist. Was HOC betrifft, wie kann man einander überbrücken? Man muss tief in das HOC eintauchen und den Code lesen, um zu wissen, was dieses HOC bewirkt.

// HOC example
import View from './View'

const DetailPage = withServerData(withNavigator(View))
Nach dem Login kopieren
rrree

Wenn Sie zwei weitere HOCs hinzufügen, wird der obige Kombinationsprozess sehr hässlich. Relativ gesehen fällt bei FaCC deutlicher auf, wie es gekapselt ist, woher die Datenquelle kommt und welche Daten die Komponente empfängt.

  1. Leistungsoptimierung

In HOC können wir Requisiten vom Host erhalten, da Requisiten von HOC weitergegeben werden, also haben wir auch Für die Für den gesamten Lebenszyklus können wir die Optimierung von ShouldComponentUpdate verwenden. Dies ist bei FaCC nicht der Fall, da die Requisiten nicht intern verglichen werden können. Nur bei der Kombination einer externen Komponente können die Requisiten verglichen werden.

  1. Flexibilität

FaCC ist in der Kombinationsphase flexibler als HOC. Es legt nicht fest, wie die erweiterte Komponente die von ihr übergebenen Attribute verwendet. . Das HOC ist grundsätzlich fertiggestellt, nachdem es geschrieben wurde.

Außerdem erstellt FaCC keine neue Komponente, während HOC eine neue Komponente erstellt und Requisiten an diese weitergibt.

Zusammenfassung

Viele Open-Source-Bibliotheken in der Community haben die beiden Modi verwendet, und es gibt viele Artikel, in denen sie verglichen werden. Es gab auch viele hitzige Diskussionen und natürlich waren beide Modelle gut, um das Problem endlich zu lösen. Aufgrund unterschiedlicher Überlegungen kann die Auswahl unterschiedlich ausfallen.

Verwandte Empfehlungen:

React-Komponenteninstanzanalyse höherer Ordnung

Instanzen kontrollierter und unkontrollierter Komponenten in React Detaillierte Erklärung

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung funktionaler Unterkomponenten und Komponenten höherer Ordnung in React. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!