Problem:
Bei Verwendung von useEffect zum Protokollieren von Statusänderungen Beim Mounten wird beobachtet, dass der Effekt zweimal ausgelöst wird. Dieses Problem tritt in React 18 auf.
Grund:
Im Entwicklungsmodus von React 18 mit StrictMode wird useEffect absichtlich einmal neu gemountet, um sicherzustellen, dass kritische Komponenten mehrfach widerstandsfähig sind Montage- und Demontagezyklen. React zielt darauf ab, den Zustand während dieser Zyklen beizubehalten, um eine bessere Leistung zu erzielen.
Lösung:
Anstatt sich auf die erste Ausführung von useEffect zu verlassen, wird empfohlen, eine leere Abhängigkeit zu verwenden Array ([]), das den Effekt erst nach dem ersten Rendern ausführt:
import { useState, useEffect } from "react"; const Counter = () => { const [count, setCount] = useState(0); useEffect(() => { console.log("rendered", count); }, []); return <div>...</div>; };
Alternative Lösungen:
Wenn die Abhängigkeit vom Zustand wesentlich ist und bei jedem Rendering überprüft werden muss, sollten Sie die folgenden Ansätze in Betracht ziehen:
Produktionsverhalten:
Es ist wichtig zu beachten dass dieses Verhalten nur im Entwicklungsmodus auftritt. In Produktions-Builds wird useEffect nur einmal pro Komponentenmontage ausgeführt.
Fazit:
Um gut zu schreiben und robust zu schreiben, ist es wichtig zu verstehen, warum useEffect in React 18 zweimal ausgeführt wird Code reagieren. Durch den Einsatz der oben beschriebenen geeigneten Lösungen können Entwickler Fehler verhindern, die Zustandskonsistenz aufrechterhalten und eine effiziente Anwendungsleistung sicherstellen.
Das obige ist der detaillierte Inhalt vonWarum wird mein useEffect-Hook in React 18 zweimal ausgeführt (und wie kann ich das beheben)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!