Wenn ein Projekt eine gewisse Komplexität erreicht, wird es zwangsläufig mit dem Problem der Wiederverwendung von Logik konfrontiert. Normalerweise gibt es in Mischen Dies ist möglicherweise die erste Methode, die Entwicklern einfällt, die gerade von Die verallgemeinerte Mixin-Methode besteht darin, alle Methoden im Mixin-Objekt durch Zuweisung an das Originalobjekt anzuhängen, um eine Objektmischung zu erreichen, ähnlich der Funktion von Object.assign() in ES6. Und so funktioniert es: const mixin = Funktion (Objekt, Mixins) { const newObj = obj neuesObj.prototype = Objekt.erstellen(obj.prototype) für (let-Eigenschaft in Mixins) { // Durchlaufe die Eigenschaften der Mixins if (mixins.hasOwnPrototype(prop)) { // Bestimmen Sie, ob es sich um eine eigene Eigenschaft eines Mixins handelt newObj.prototype[prop] = mixins[prop]; // Zuweisung} } neuesObjekt zurückgeben }; Mixins in React verwenden Angenommen, in unserem Projekt müssen mehrere Komponenten das Standard const DefaultNameMixin = { getDefaultProps: Funktion () { zurückkehren { Name: "Freude" } } } Um const ComponentOne = React.createClass({ Mixins: [StandardnameMixin] rendern: Funktion () { return <h2>Hallo {this.props.name}</h2> } }) Das geschriebene Da const DefaultFriendMixin = { getDefaultProps: Funktion () { zurückkehren { Freund: "Lecker" } } } const ComponentOne = React.createClass({ Mixins: [StandardnameMixin, StandardfreundMixin] rendern: Funktion () { zurückkehren ( <div> <h2>Hallo {this.props.name}</h2> <h2>Das ist mein Freund {this.props.friend}</h2> </div> ) } }) Wir können sogar andere Schreiben Sie beispielsweise ein neues const DefaultPropsMixin = { Mixins: [StandardnameMixin, StandardfreundMixin] } const ComponentOne = React.createClass({ Mixins: [DefaultPropsMixin] rendern: Funktion () { zurückkehren ( <div> <h2>Hallo {this.props.name}</h2> <h2>Das ist mein Freund {this.props.friend}</h2> </div> ) } }) An dieser Stelle können wir feststellen, dass
Allerdings können sich Vorteile in verschiedenen Szenarien auch in Nachteile verwandeln:
Darüber hinaus verfügt Verwenden von React-Mixins Als schädlich geltende Mixins Komponenten höherer Ordnung Aufgrund der oben genannten Mängel von
Standardmäßig verfügen nur Komponenten, die durch Das Implementierungsprinzip von const mitRouter = (Komponente) => { const displayName = `mitRouter(${Component.displayName || Component.name})` const C = Eigenschaften => { const { wrappedComponentRef, ...restlicheProps } = props zurückkehren ( <RouterContext.Verbraucher> {Kontext => { invariant Kontext, `Sie sollten <${displayName} /> nicht außerhalb eines <Routers> verwenden` ); zurückkehren ( <Komponente {...verbleibendeProps} {...Kontext} ref={wrappedComponentRef} /> ) }} </RouterContext.Consumer> ) } Code verwenden: importiere React, {Komponente} von "react" importiere { mit Router } von "react-router" Klasse TopHeader erweitert Komponente { rendern() { zurückkehren ( <div> Navigationsleiste {/* Klicken Sie hier, um zur Anmeldung zu springen */} <button onClick={this.exit}>Beenden</button> </div> ) } beenden = () => { // Nachdem es von der High-Order-Funktion withRouter umschlossen wurde, können Sie this.props verwenden, um zur Operation this.props.history.push("/login") zu springen. } } // Verwenden Sie withRouter, um die Komponente zu umschließen und Verlauf, Standort usw. zurückzugeben. export default withRouter(TopHeader) Da das Wesen Zum Beispiel: Schreiben Sie eine Funktion höherer Ordnung, die das Singen ermöglicht importiere React, {Komponente} von 'react' const widthSinging = WrappedComponent => { Rückgabeklasse HOC erweitert Komponente { Konstruktor () { super(...Argumente) dies.singen = dies.singen.binden(dies) } Singen = () => { console.log('ich singe!') } rendern() { return <WrappedComponent /> } } } Schreiben Sie eine High-Order-Funktion, die Tanzen ermöglicht importiere React, {Komponente} von 'react' const widthDancing = WrappedComponent => { Rückgabeklasse HOC erweitert Komponente { Konstruktor () { super(...Argumente) dies.tanzen = dies.tanzen.binden(dies) } tanzen = () => { console.log('ich tanze!') } rendern() { return <WrappedComponent /> } } } Verwenden Sie die oben genannten High-Level-Komponenten importiere React, {Komponente} von "react" importiere { widthSing, widthDancing } von "hocs" Klasse Joy erweitert Komponente { rendern() { return <div>Freude</div> } } // Joy die Fähigkeit zum Singen und Tanzen geben export default widthSinging(withDancing(Joy)) Aus dem Obigen können wir ersehen, dass wir durch einfaches Umhüllen mit Funktionen höherer Ordnung die ursprünglich einfache Joy in einen kleinen Nachtclubprinzen verwandeln können, der sowohl singen als auch tanzen kann! Konventionen für die Verwendung von HOCs
Vor- und Nachteile von HOC An dieser Stelle können wir die Vorteile von
Natürlich hat
Render-Requisiten Der Begriff „Render-Prop“ bezieht sich auf eine Technik zum Teilen von Code zwischen React-Komponenten unter Verwendung eines Props, dessen Wert eine Funktion ist. Dies ist die offizielle Definition von Offizielles Beispiel: <DataProvider render={(data) => <h1>Hallo {data.target}</h1>} /> Wie oben gezeigt, verfügt die Die Leser fragen sich vielleicht: „Warum müssen wir Bei der Projektentwicklung müssen wir möglicherweise häufig Popup-Fenster verwenden. Die Benutzeroberfläche des Popup-Fensters kann unterschiedlich sein, aber die Funktionen sind ähnlich, d. importiere { Modal, Button } von "antd" Klasse App erweitert React.Component { Zustand = { sichtbar: falsch } // Anzeige und Ausblenden des Popup-Fensters steuern toggleModal = (visible) => { this.setState({ sichtbar }) }; handleOk = (e) => { // Mach etwas this.setState({ visible: false }) } rendern() { const { sichtbar } = dieser.Zustand zurückkehren ( <div> <Button onClick={this.toggleModal.bind(this, true)}>Öffnen</Button> <Modal Titel="Einfaches Modal" sichtbar={sichtbar} beiOk={this.handleOk} beiAbbrechen={this.toggleModal.bind(this, false)} > <p>Einige Inhalte...</p> </Modal> </div> ) } } Das Obige ist das einfachste Beispiel für die Verwendung von <MeinModal> <Button>Öffnen</Button> <Modal title="Einfaches Modal" onOk={this.handleOk}> <p>Einige Inhalte...</p> </Modal> </MyModal> Die obige Verwendung kann durch importiere { Modal, Button } von "antd" Klasse MyModal erweitert React.Component { Zustand = { ein: falsch } umschalten = () => { dies.setState({ am: !dieser.zustand.am }) } renderButton = (Requisiten) => <Button {...Requisiten} onClick={this.toggle} /> renderModal = ({ onOK, ...rest }) => ( <Modal {...ausruhen} sichtbar={this.state.on} beiOk={() => { beiOK && beiOK() dies.umschalten() }} beiAbbrechen={this.toggle} /> ) rendern() { gib diese.Eigenschaften.Kinder zurück({ Schaltfläche: this.renderButton, Modal: dieses.renderModal }) } } Auf diese Weise haben wir ein Wie oben zu sehen ist, sind Einschränkungen bei der Verwendung
Zum Beispiel: // Schlechtes Beispiel class MouseTracker extends React.Component { rendern() { zurückkehren ( <Maus rendern={Maus => ( <Katze Maus={Maus} /> )}/> ) } } Dies ist keine gute Schreibweise, da die Eine bessere Schreibweise wäre es, die an // Gutes Beispiel Klasse MouseTracker erweitert React.Component { renderCat(Maus) { zurück <Katze Maus={Maus} /> } rendern() { zurückkehren ( <Maus rendern={this.renderTheCat} /> ) } } Vor- und Nachteile von Vorteil
Mangel
Der folgende Code: const MeineKomponente = () => { zurückkehren ( <Maus> {({ x, y }) => ( <Seite> {({ x: SeiteX, y: SeiteY }) => ( <Verbindung> {({ api }) => { // huch }} </Verbindung> )} </Seite> )} </Maus> ) } Haken Der Kern von Das Der Designzweck von React Hooks besteht darin, die Funktionskomponente zu verbessern, sodass eine voll funktionsfähige Komponente geschrieben werden kann, ohne überhaupt „Klassen“ zu verwenden. Warum sind importiere React, {Komponente} von "react" exportiere Standardklasse Button erweitert Komponente { Konstruktor() { super() this.state = { buttonText: "Klicken Sie mich bitte an" } dies.handleClick = dies.handleClick.bind(dies) } handleKlick() { dies.setState(() => { return { buttonText: "Danke, wurde geklickt!" } }) } rendern() { const { buttonText } = dieser.Zustand zurückgeben <button onClick={this.handleClick}>{buttonText}</button> } } Oben ist eine einfache Schaltflächenkomponente, die den grundlegendsten Status und die einfachste Klickmethode enthält. Der Status ändert sich nach dem Klicken auf die Schaltfläche. Dies ist eine sehr einfache Funktionskomponente, für deren Implementierung jedoch viel Code erforderlich ist. Da importiere React, { useState } von "react" Standardfunktion Button() exportieren { const [buttonText, setButtonText] = useState("Klicken Sie mich bitte an") Funktion handleClick() { return setButtonText("Danke, wurde angeklickt!") } zurückgeben <button onClick={handleClick}>{buttonText}</button> } Im Vergleich dazu ist Im obigen Beispiel wird der erste Hook Die Flexibilität von Vor- und Nachteile von HakenVorteil
Mangel
Zusammenfassen Abgesehen davon, dass Referenzdokumente: Verwenden von React-Mixins Als schädlich eingestufte Mixins Komponenten höherer Ordnung Render-Requisiten React Miscellanea: Render Props und ihre Anwendungsfälle Einführung in Hooks Dies ist das Ende dieses Artikels über die Best Practices für die gemeinsame Nutzung von React-Code. Weitere relevante Inhalte zur gemeinsamen Nutzung von React-Code finden Sie in den vorherigen Artikeln von 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:
|
<<: Zusammenfassung des MySQL-Installationsdiagramms
>>: Detaillierte Erläuterung der Ideen zur Fehlerbehebung bei PHP+nginx-Dienstfehlern 500 502
Code kopieren Der Code lautet wie folgt: <div ...
Ich bin ein SQL-Anfänger und dachte, die Installa...
Inhaltsverzeichnis 1. Docker erstellen 2. Betrete...
Wir stoßen häufig auf dieses Problem: Wie kann ma...
1, %, steht für beliebige 0 oder mehr Zeichen. Es...
Charakter Dezimal Zeichennummer Entitätsname --- ...
Inhaltsverzeichnis mvc MVP mvv Die Quelle von Vue...
Zusammenfassung: Dieser Artikel erläutert hauptsä...
1. Daten vorbereiten Die folgenden Operationen we...
Der Grund ist einfach: In HTML-Dokumenten entsprec...
Inhaltsverzeichnis Vorwort 【Protokoll rückgängig ...
MySQL ist eine häufig verwendete Open-Source-Date...
Was sind die Attribute des JS-Skript-Tags: charse...
Beschreibung der Sicherheitslücke Apache Flink is...
Im Nginx-Prozessmodell erfordern Aufgaben wie Ver...