VorwortViele Freunde werden wie ich auf viele Probleme stoßen, wenn sie zum ersten Mal versuchen, Komponenten zu kapseln. Beispielsweise haben die Komponenten anderer Leute Farbattribute. Wenn wir die Komponente verwenden, übergeben wir den im Komponentendokument beschriebenen Attributwert, z. B. „primär“. Dann wird die Schriftfarbe dieser Komponente zur Farbe, die „primär“ entspricht. Wie wird das gemacht? Außerdem haben die von anderen gekapselten Komponentenklassennamen ihre eigenen eindeutigen Präfixe. Wie gehen Sie damit um? Müssen Sie allen CSS-Klassennamen Präfixe hinzufügen? Das ist zu mühsam! Wenn Sie diese Fragen verwirren, können Sie diesen Artikel lesen. Ich werde anhand der Teilerkomponente von Antd erklären, wie eine Komponente auf Basis von React gekapselt wird, und einige der oben genannten Fragen beantworten. Bitte lesen Sie es geduldig! Wie kapselt Antd Komponenten?Lageradresse
Quellcode der TeilerkomponenteDer Quellcode von antd verwendet die TypeScript-Syntax. Studierende, die die Syntax nicht verstehen, sollten sie daher rechtzeitig lernen! importiere * als React von „react“; importiere Klassennamen aus „Klassennamen“; importiere { ConfigConsumer, ConfigConsumerProps } von '../config-provider'; Exportschnittstelle DividerProps { PräfixCls?: Zeichenfolge; Typ?: „horizontal“ | „vertikal“; Ausrichtung?: ‚links‘ | ‚rechts‘ | ‚Mitte‘; Klassenname?: Zeichenfolge; Kinder?: React.ReactNode; gestrichelt?: Boolesch; Stil?: React.CSSProperties; einfach?: boolesch; } const Divider: React.FC<DividerProps> = props => ( <Konfigurationsverbraucher> {({ getPrefixCls, Richtung }: ConfigConsumerProps) => { Konstante { PräfixCls: PräfixCls anpassen, Typ = "horizontal", Ausrichtung = "Mitte", Klassenname, Kinder, gestrichelt, schmucklos, …restProps } = Requisiten; const prefixCls = getPrefixCls('Teiler', customizePrefixCls); const orientationPrefix = Orientierung.Länge > 0? `-${orientation}`: Orientierung; const hatKinder = !!Kinder; const classString = Klassennamen( PräfixCls, `${prefixCls}-${type}`, { [`${prefixCls}-mit-text`]: hatKinder, [`${prefixCls}-mit-text${orientationPrefix}`]: hatKinder, [`${prefixCls}-dashed`]: !!gestrichelt, [`${prefixCls}-plain`]: !!plain, [`${prefixCls}-rtl`]: Richtung === 'rtl', }, Klassenname, ); zurückkehren ( <div className={classString} {...restProps} role="Trennzeichen"> {Kinder && <span className={`${prefixCls}-inner-text`}>{Kinder}</span>} </div> ); }} </Konfigurationsverbraucher> ); Standardteiler exportieren; So legen Sie Komponenteneigenschaften offen Im Quellcode sehen Sie als Erstes den folgenden Inhalt. Diese Eigenschaften sind auch die Eigenschaften, die von der Trennerkomponente bereitgestellt werden. Wir können das Typattribut wie Schnittstelle DividerProps exportieren { // Schnittstelle hat TypeScript-Syntax PräfixCls?: Zeichenfolge; Typ?: ‚horizontal‘ | ‚vertikal‘; // Typ auf nur einen der beiden Werte beschränken Ausrichtung?: ‚links‘ | ‚rechts‘ | ‚Mitte‘; Klassenname?: Zeichenfolge; Kinder?: React.ReactNode; gestrichelt?: Boolesch; Stil?: React.CSSProperties; einfach?: boolesch; } In den obigen Attributen haben wir auch festgestellt, dass className und style relativ häufige Attribute sind, was bedeutet, dass wir diese Attribute wie folgt verwenden können: So legen Sie ein einheitliches Klassennamenpräfix fest Wir wissen, dass die Komponentenklassennamen von Antd ihr eigenes eindeutiges Präfix <Konfigurationsverbraucher> {({ getPrefixCls, Richtung }: ConfigConsumerProps) => { Konstante { PräfixCls: PräfixCls anpassen, Typ = "horizontal", Ausrichtung = "Mitte", Klassenname, Kinder, gestrichelt, schmucklos, …restProps } = Requisiten; const prefixCls = getPrefixCls('Teiler', customizePrefixCls); Im Quellcode finden wir prefixCls, das von der Methode getPrefixCls generiert wird. Sehen wir uns den Quellcode der Methode getPrefixCls wie folgt an. Schnittstelle ConfigConsumerProps exportieren { ... getPrefixCls: (suffixCls?: Zeichenfolge, customizePrefixCls?: Zeichenfolge) => Zeichenfolge; ... } const defaultGetPrefixCls = (suffixCls?: Zeichenfolge, customizePrefixCls?: Zeichenfolge) => { wenn (PrefixCls anpassen) returniere „PrefixCls anpassen“; SuffixCls zurückgeben? `ant-${suffixCls}`: 'ant'; }; Es ist nicht schwer herauszufinden, dass das zu diesem Zeitpunkt generierte Klassennamenpräfix Umgang mit Stilen und KlassennamenDie von uns gekapselten Komponenten müssen über voreingestellte Stile verfügen. Da die Stile durch Klassennamen definiert werden und die von uns übergebenen Attributwerte bestimmen, welcher Klassenname der Komponente hinzugefügt werden soll, wie wird dies erreicht? Schauen wir uns den Quellcode unten an. importiere Klassennamen aus „Klassennamen“; const classString = Klassennamen( PräfixCls, `${prefixCls}-${type}`, { [`${prefixCls}-mit-text`]: hatKinder, [`${prefixCls}-mit-text${orientationPrefix}`]: hatKinder, [`${prefixCls}-dashed`]: !!gestrichelt, [`${prefixCls}-plain`]: !!plain, [`${prefixCls}-rtl`]: Richtung === 'rtl', }, Klassenname, ); zurückkehren ( <div className={classString} {...restProps} role="Trennzeichen"> {Kinder && <span className={`${prefixCls}-inner-text`}>{Kinder}</span>} </div> ); Wir haben festgestellt, dass es eine Konstante aller Klassennamen über die Methode classNames definiert (classNames ist eine Komponente von React, die mehrere Klassennamen verarbeitet) und diese dann an das className-Attribut im div übergibt. Tatsächlich lautet der generierte Klassenname Schauen wir uns abschließend an, wie der Code im CSS-Stil geschrieben ist! Quellcode des TeilerkomponentenstilsDie Stile der Antd-Komponenten sind in Less geschrieben. Studenten, die mit der Less-Syntax nicht vertraut sind, müssen sich damit vertraut machen. @import '../../Stil/Themen/Index'; @import '../../style/mixins/index'; @divider-prefix-cls: ~'@{ant-prefix}-divider'; // Sie können sehen, dass dies dem zuvor erwähnten Klassennamenpräfix entspricht.@{divider-prefix-cls} { .reset-Komponente(); Rahmen oben: @border-width-base solid @divider-color; &-vertical { // Der vollständige Klassenname ist hier eigentlich ant-divider-vertical. Dies ist der Stil, der der Trennkomponente entspricht, wenn der Wert des Typattributs vertikal ist. Position: relative; oben: -0,06em; Anzeige: Inline-Block; Höhe: 0,9em; Rand: 0,8px; vertikale Ausrichtung: Mitte; Rahmen oben: 0; Rahmen links: @border-width-base solid @divider-color; } &-horizontal { Anzeige: Flex; klar: beides; Breite: 100 %; Mindestbreite: 100 %; Rand: 24px 0; } &-horizontal&-mit-Text { Anzeige: Flex; Rand: 16px 0; Farbe: @Überschriftenfarbe; Schriftstärke: 500; Schriftgröße: @font-size-lg; Leerzeichen: Nowrap; Textausrichtung: zentriert; Rahmen oben: 0; Farbe des oberen Rahmens: @Teilerfarbe; &::vor, &::nach { Position: relativ; oben: 50 %; Breite: 50%; Rahmen oben: @border-width-base durchgehend transparent; // Chrome akzeptiert kein „inherit“ in „border-top“ Rahmenoberseite-Farbe: erben; Rahmen unten: 0; transformieren: übersetzenY(50%); Inhalt: ''; } } &-horizontal&-mit-Text-links { &::vor { oben: 50 %; Breite: @divider-orientation-margin; } &::nach { oben: 50 %; Breite: 100 % – @divider-orientation-margin; } } &-horizontal&-mit-Text-rechts { &::vor { oben: 50 %; Breite: 100 % – @divider-orientation-margin; } &::nach { oben: 50 %; Breite: @divider-orientation-margin; } } &-innerer-text { Anzeige: Inline-Block; Polsterung: 0 @divider-text-padding; } &-gestrichelt { Hintergrund: keiner; Rahmenfarbe: @Teilerfarbe; Rahmenstil: gestrichelt; Rahmenbreite: @border-width-base 0 0; } &-horizontal&-mit-Text&-gestrichelt { Rahmen oben: 0; &::vor, &::nach { Rahmenstil: gestrichelt, keine, keine; } } &-vertikal&-gestrichelt { Rahmenbreite: 0 0 0 @border-width-base; } &-plain&-mit-text { Farbe: @Textfarbe; Schriftstärke: normal; Schriftgröße: @font-size-base; } } @import './rtl'; Auf diese Weise glaube ich, dass die Studierenden auch ein allgemeines Verständnis davon haben, wie man eine Komponente kapselt und was die wichtigsten Punkte sind. Es gibt noch viele Stellen im Quellcode, die es wert sind, gelernt zu werden, wie beispielsweise die Definition und Verwendung von ConfigConsumer hier. Interessierte Studierende sind herzlich eingeladen, miteinander zu kommunizieren. Dies ist das Ende dieses Artikels über die Implementierungsschritte von React-basierten gekapselten Komponenten. Weitere relevante Inhalte zu React-gekapselten Komponenten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Erläuterung der Methode zum Schreiben von SQL-Anweisungen zum Einfügen
>>: So passen Sie die Protokollebene von Nginx in Docker an
1. Das Startmenü besteht darin, den Cursor in die...
Derzeit tritt ein solches Problem auf Bei mir war...
Beim Verwenden des XAML-Layouts müssen manchmal ei...
Wenn unter Linux eine Datei erstellt wird, ist de...
Inhaltsverzeichnis Vorwort Schritt Vorwort Heute ...
https-Basisport 443. Er wird für etwas verwendet,...
Herunterladen und Installieren von JDK Schritt 1:...
Das Problem, dass MYSQL5.7.17 unter MAC keine Ver...
Erstellen Sie in MySQL eine Ansicht für zwei oder...
Nginx unterstützt drei Möglichkeiten zum Konfigur...
MySQL-Escape Escape bedeutet die ursprüngliche Se...
Ein Muss für Vorstellungsgespräche. Sie werden es...
Inhaltsverzeichnis Konfiguration hinzufügen JSON-...
1. at ist so konfiguriert, dass nach 5 Stunden „D...
Der Cut-Befehl in Linux und Unix dient dazu, aus ...