Hook ist eine neue Funktion, die in React16.8 hinzugefügt wurde. Obwohl in der offiziellen React-Dokumentation die relevanten Konzepte von React-Hooks erläutert werden, ist es schwierig, Hooks nur durch Lesen der offiziellen Dokumentation richtig zu verwenden. Beim Schreiben von Hooks kann man leicht in Fallen tappen und Fehler machen. Dieser Artikel fasst 5 schlechte Orte zusammen. 01. Verwenden Sie useState, wenn kein Rendern erforderlich ist In Funktionskomponenten können wir Nicht empfohlen× Funktion ClickButton(Eigenschaften){ const [Anzahl, Anzahl festlegen] = setzeZustand(0) const onClickCount = () => { setzeAnzahl((c) => c + 1) } const onClickRequest = () => { apiCall(Anzahl) } zurückkehren ( <div> <button onClick={onClickCount}>Klick</button> <button onClick={onClickRequest}>Senden</button> </div> ) } Das Problem: Bei genauer Betrachtung des obigen Codes ist auf den ersten Blick nichts falsch. Durch Klicken auf die Schaltfläche wird Empfohlen√ Funktion ClickButton(Eigenschaften){ Konstante Anzahl = useRef(0) const onClickCount = () => { Anzahl.aktuell++ } const onClickRequest = () => { apiCall(Anzahl.aktuell) } zurückkehren ( <div> <button onClick={onClickCount}>Klick</button> <button onClick={onClickRequest}>Senden</button> </div> ) } 02. Verwenden Sie router.push anstelle von link In React SPA-Anwendungen verwenden wir Nicht empfohlen× Funktion ClickButton(Eigenschaften){ const history = useHistory() const onClickGo = () => { history.push('/wo-seite') } return <button onClick={onClickGo}>Gehe dorthin</button> } Das Problem: Obwohl der obige Code funktioniert, erfüllt er nicht die Anforderungen an die Barrierefreiheit. Der Button wird vom Screenreader nicht als Link erkannt. Daher können wir den Code wie folgt umwandeln: Empfohlen√ Funktion ClickButton(Eigenschaften){ zurück <Link zu="/nächste-seite"> <span>Gehe dorthin</span> </Link> } 03. Aktionen mit useEffect behandelnManchmal möchten wir einfach zusätzlichen Code ausführen, nachdem React das DOM aktualisiert hat. Beispielsweise das Senden von Netzwerkanforderungen, das manuelle Ändern von DOM und das Aufzeichnen von Protokollen. Nicht empfohlen× Funktion DataList({ bei Erfolg }) { const [wird geladen, wird gesetzt] = useState(false); const [Fehler, setzeFehler] = useState(null); const [Daten, setData] = useState(null); const fetchData = () => { setzeLaden(true); callApi() .then((res) => setzeDaten(res)) .catch((err) => setError(err)) .finally(() => setLoading(false)); }; useEffect(() => { fetchData(); }, []); useEffect(() => { wenn (!laden && !fehler && daten) { bei Erfolg(); } }, [laden, Fehler, Daten, bei Erfolg]); return <div>Daten: {data}</div>; } Das Problem: Der obige Code verwendet zwei Empfohlen√ Funktion DataList({ bei Erfolg }) { const [wird geladen, wird gesetzt] = useState(false); const [Fehler, setzeFehler] = useState(null); const [Daten, setData] = useState(null); const fetchData = () => { setzeLaden(true); callApi() .then((res) => { setData(res) bei Erfolg() }) .catch((err) => setError(err)) .finally(() => setLoading(false)); }; useEffect(() => { fetchData(); }, []); return <div>Daten: {data}</div>; } 04. EinzelverantwortungskomponenteWann sollten Sie eine Komponente in mehrere kleinere Komponenten aufteilen? Wie erstelle ich einen Komponentenbaum? All diese Probleme treten bei der Verwendung komponentenbasierter Frameworks täglich auf. Ein häufiger Fehler beim Entwurf von Komponenten besteht jedoch darin, zwei Anwendungsfälle in einer Komponente zu kombinieren. Nicht empfohlen× Funktion Header({ Menüelemente }) { zurückkehren ( <Kopfzeile> <HeaderInner menuItems={menuItems} /> </header> ); } Funktion HeaderInner({ Menüelemente }) { return isMobile() ? <BurgerButton menuItems={menuItems} /> : <Tabs tabData={menuItems} />; } Das Problem: Bei diesem Ansatz versucht die Empfohlen√ Durch das Verschieben der Bedingung um eine Ebene nach oben wird der Zweck der Komponenten leichter erkennbar und man erkennt leichter, dass sie nur eine Verantwortung haben, nämlich entweder Funktion Header(Eigenschaften) { zurückkehren ( <Kopfzeile> {isMobile() ? <BurgerButton menuItems={menuItems} /> : <Tabs tabData={menuItems} />} </header> ) } 05. Einzelverantwortung useEffects Durch den Vergleich Nicht empfohlen× Funktion Beispiel (Requisiten) { const location = useLocation(); const fetchData = () => { /* Aufruf der API */ }; const updateBreadcrumbs = () => { /* Aktualisieren der Breadcrumbs */ }; useEffect(() => { fetchData(); aktualisiere Breadcrumbs(); }, [Standort.Pfadname]); zurückkehren ( <div> <BreadCrumbs /> </div> ); } Das Problem: Empfohlen√ Trennen Sie zwei Nebeneffekte von einem UseEffect. Funktion Beispiel(Requisiten) { const location = useLocation(); const fetchData = () => { /* Aufruf der API */ }; const updateBreadcrumbs = () => { /* Aktualisieren der Breadcrumbs */ }; useEffect(() => { fetchData(); aktualisiere Breadcrumbs(); }, [Standort.Pfadname]); zurückkehren ( <div> <BreadCrumbs /> </div> ); } siehe:Fünf häufige Fehler beim Schreiben von React-Komponenten (mit Hooks) im Jahr 2020 Oben sind die Details der fünf Dinge, auf die Sie achten müssen, wenn Sie Hooks zum Schreiben von React-Komponenten verwenden. Weitere Informationen zu Hooks zum Schreiben von React-Komponenten finden Sie in anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: MySQL 5.6.27 Installations-Tutorial unter Linux
Der spezifische Code der JavaScript-Datumseffekte...
Ich denke, dies ist ein Problem, auf das viele Leu...
In diesem Artikelbeispiel wird der spezifische Co...
Installieren Sie zuerst postcss-pxtorem: npm inst...
Einführung in Jib Jib ist eine von Google entwick...
Wie funktioniert „Adaptives Webdesign“? Eigentlich...
In diesem Artikelbeispiel wird der spezifische Co...
1. Zeitformatierung und andere Methoden Es wird e...
Kapitel 1 Installation des Quellcodes Die Install...
Offizielle Dokumentation: https://nginx.org/en/li...
1. Browser-Rendering-Modus und Doctype Einige Web...
Wirkung der Operation: html <div Klasse="...
Inhaltsverzeichnis Vorwort vue-cli 2.0 Version vu...
Hinweis: Diese Methode ist nur auf WebKit-basiert...
WeChat Mini-Programm - QR-Code-Generator Download...