Möchten Sie eine Funktion anfordern oder einen Fehler melden?
Frage
Wie ist das aktuelle Verhalten?
import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
function Child() {
console.log("Child render");
return null;
}
function App() {
const [count, setCount] = useState(0);
console.log("Render");
useEffect(() => {
console.log("count changed", count);
}, [count]);
return (
<div>
<h2>UseState</h2>
<p>clicked: {count}</p>
<button
onClick={() => {
setCount(count + 1);
}}
>
+1
</button>
<button
onClick={() => {
setCount(count);
}}
>
+0
</button>
<Child />
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
In diesem ZĂ€hlbeispiel gibt es zwei SchaltflĂ€chen. Wenn Sie auf einen klicken, zĂ€hlt die ZĂ€hlung +1, bei einer anderen Ă€ndert sich die ZĂ€hlung nicht. Wenn Sie zuerst auf die SchaltflĂ€che Keine Ănderung klicken, wird "Rendern" nicht protokolliert. Wenn Sie jedoch zuerst auf die SchaltflĂ€che +1 klicken und dann auf anthor klicken, wird "Render" zweimal angezeigt, aber ""Child render" wird nur einmal angezeigt.
Ich habe die ErklÀrung im Dokument gefunden.
Wenn Sie einen State Hook auf denselben Wert wie den aktuellen Status aktualisieren, wird React aussteigen, ohne die untergeordneten Elemente zu rendern oder Effekte auszulösen. (React verwendet den Object.is-Vergleichsalgorithmus.)
Verspricht React nur, dass die Kinderkomponente in dieser Situation nicht gerendert wird? Die aktuelle Komponente kann noch gerendert werden?
Dies ist ein Beispiel in der Sandbox.
https://codesandbox.io/s/long-firefly-nz5px?fontsize=14&hidenavigation=1&theme=dark
Welche React-Versionen und welche Browser/Betriebssysteme sind von diesem Problem betroffen?
"reagieren": "^16.12.0",
"react-dom": "^16.12.0",
Dieses Problem sieht nicht nach einem "Fehler" aus, sondern eher nach einer KlÀrungsfrage? :LÀcheln:
Der nÀchste Absatz unter dem Abschnitt der Dokumente, auf die Sie verwiesen haben, sagt Folgendes:
Beachten Sie, dass React diese spezifische Komponente möglicherweise noch einmal rendern muss, bevor Sie aussteigen können. Das sollte kein Problem sein, da React nicht unnötig âtieferâ in den Baum eindringt.
Reagieren Sie frĂŒhzeitig aus, wenn es weiĂ, dass es sicher ist. In einigen FĂ€llen muss es etwas mehr Arbeit leisten, um sicherzustellen, dass die Rettung sicher ist.
Die GrĂŒnde dafĂŒr können nicht erklĂ€rt werden, ohne ziemlich tief in die aktuellen Implementierungsdetails einzugehen â was wahrscheinlich nicht so nĂŒtzlich wĂ€re und sie werden sich wahrscheinlich in einer kommenden Version Ă€ndern, wĂ€hrend wir weiter an neuen APIs wie dem gleichzeitigen Modus arbeiten und Spannung.
Die gute Nachricht ist, wie in den Dokumenten erwÀhnt, der zusÀtzliche Arbeitsaufwand von React sollte in beiden FÀllen gering sein!
Dieses Problem sieht nicht nach einem "Fehler" aus, sondern eher nach einer KlĂ€rungsfrage? đ
Der nÀchste Absatz unter dem Abschnitt der Dokumente, auf die Sie verwiesen haben, sagt Folgendes:
Beachten Sie, dass React diese spezifische Komponente möglicherweise noch einmal rendern muss, bevor Sie aussteigen können. Das sollte kein Problem sein, da React nicht unnötig âtieferâ in den Baum eindringt.
Reagieren Sie frĂŒhzeitig aus, wenn es weiĂ, dass es sicher ist. In einigen FĂ€llen muss es etwas mehr Arbeit leisten, um sicherzustellen, dass die Rettung sicher ist.
Die GrĂŒnde dafĂŒr können nicht erklĂ€rt werden, ohne ziemlich tief in die aktuellen Implementierungsdetails einzugehen - was wahrscheinlich nicht so nĂŒtzlich wĂ€re _und_ sie werden sich wahrscheinlich in einer kommenden Version Ă€ndern, wenn wir weiter an neuen APIs wie dem gleichzeitigen Modus arbeiten und Spannung.
Die gute Nachricht ist, wie in den Dokumenten erwÀhnt, der zusÀtzliche Arbeitsaufwand von React sollte in beiden FÀllen gering sein!
Thx, was fĂŒr ein sorgloser Mann! đ
Kein Problem! đ
Hilfreichster Kommentar
Dieses Problem sieht nicht nach einem "Fehler" aus, sondern eher nach einer KlÀrungsfrage? :LÀcheln:
Der nÀchste Absatz unter dem Abschnitt der Dokumente, auf die Sie verwiesen haben, sagt Folgendes:
Reagieren Sie frĂŒhzeitig aus, wenn es weiĂ, dass es sicher ist. In einigen FĂ€llen muss es etwas mehr Arbeit leisten, um sicherzustellen, dass die Rettung sicher ist.
Die GrĂŒnde dafĂŒr können nicht erklĂ€rt werden, ohne ziemlich tief in die aktuellen Implementierungsdetails einzugehen â was wahrscheinlich nicht so nĂŒtzlich wĂ€re und sie werden sich wahrscheinlich in einer kommenden Version Ă€ndern, wĂ€hrend wir weiter an neuen APIs wie dem gleichzeitigen Modus arbeiten und Spannung.
Die gute Nachricht ist, wie in den Dokumenten erwÀhnt, der zusÀtzliche Arbeitsaufwand von React sollte in beiden FÀllen gering sein!