setState() Änderungen am Komponentenstatus in die Warteschlange stellen und React mitteilen, dass diese Komponente und ihre untergeordneten Komponenten mit dem aktualisierten Status neu gerendert werden müssen.
Die setState-Methode ist asynchron und gibt in der Tat kein Versprechen zurück. In Fällen, in denen eine Funktion aktualisiert oder aufgerufen werden soll, kann die Funktion in der setState-Funktion als zweites Argument als Rückruf bezeichnet werden. In Ihrem obigen Fall haben Sie beispielsweise eine Funktion als setState-Rückruf aufgerufen.
setState(
{ name: "Michael" },
() => console.log(this.state)
);
Der obige Code funktioniert gut für Klassenkomponenten, aber im Fall von Funktionskomponenten können wir die setState-Methode nicht verwenden, und dies können wir den use-Effekt-Hook verwenden, um das gleiche Ergebnis zu erzielen.
Die offensichtliche Methode, die in den Sinn kommt, ist, dass ypu mit useEffect verwendet werden kann:
const [state, setState] = useState({ name: "Michael" })
useEffect(() => {
console.log(state)
}, [state])
Dies würde jedoch auch beim ersten Rendern ausgelöst, sodass wir den Code wie folgt ändern können, um das erste Renderereignis zu überprüfen und das Status-Rendering zu vermeiden. Daher kann die Implementierung folgendermaßen erfolgen:
Wir können den Benutzer-Hook hier verwenden, um das erste Rendering zu identifizieren.
Mit dem useRef-Hook können wir veränderbare Variablen in Funktionskomponenten erstellen. Dies ist nützlich, um auf DOM-Knoten / React-Elemente zuzugreifen und veränderbare Variablen zu speichern, ohne ein erneutes Rendern auszulösen.
const [state, setState] = useState({ name: "Michael" });
const firstTimeRender = useRef(true);
useEffect(() => {
if (!firstTimeRender.current) {
console.log(state);
}
}, [state])
useEffect(() => {
firstTimeRender.current = false
}, [])