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
In diesem Artikel wird hauptsächlich die Implemen...
Inhaltsverzeichnis Vorwort 1. Herkömmliche Vue-Ko...
1. HTML-Schriftfarbeneinstellung In HTML verwende...
Um den Inhaltstyp zu lernen, müssen Sie zunächst ...
Vorwort Projektanforderungen: Installieren Sie da...
1. Komplexität des Front-End-Engineerings Wenn wi...
Vorwort Solche Spezialeffekte sollte man oft sehe...
Vorwort In diesem Artikel wird hauptsächlich besc...
Icon-Icon-Verarbeitungslösung Das Ziel dieses Dat...
Inhaltsverzeichnis 1. Klasse 1.1 Konstruktor() 1....
js-Arrays sind wahrscheinlich jedem bekannt, da s...
Gespeicherte Prozeduren 1. Erstellen Sie eine ges...
Funktion Currying (schwarzes Fragezeichen)? ? ? C...
Bei täglichen Entwicklungsaufgaben verwenden wir ...
Inhaltsverzeichnis 1. Installation 1. Einleitung ...