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
Dieser Artikel stellt einige häufig verwendete Fu...
1. MS SQL SERVER 2005 --1. Löschen Sie das Protok...
1. Knoten löschen Führen Sie kubectl delete node ...
Vorwort Das MySQL-Modul (Projektadresse ist https...
Offizielle Website-Adresse der Echarts-Komponente...
Effektanzeige: Controllerknoten zur Umgebungsvorb...
<a href="https://www.jb51.net/" titl...
Inhaltsverzeichnis schließen Fallstudie: Vertiefe...
Methode 1: Verwenden Sie den Befehl SET PASSWORD ...
1. Verwenden Sie Frameset, Frame und Iframe, um m...
Ein sehr häufiges Szenario in react -Projekten: c...
Inhaltsverzeichnis Hintergrund analysieren Verfah...
Ich habe zuvor einen Artikel über die Dateiübertr...
Verwenden Sie das RPM-Installationspaket, um MySQ...
Das Hinzufügen der erforderlichen Kommentare ist ...