Einführung
In diesem Lab werden wir lernen, wie man den useDelayedState-Hook in React verwendet, um die Erstellung eines zustandsbehafteten Werts zu verzögern, bis eine bestimmte Bedingung erfüllt ist. Dieser Hook ist nützlich, wenn wir auf Daten oder Props warten müssen, bevor wir einen zustandsbehafteten Wert erstellen, und kann die Leistung unserer Anwendung verbessern. Anhand von praktischen Beispielen werden wir sehen, wie dieser Hook implementiert werden kann und wie er verwendet werden kann, um zustandsbehaftete Werte in unseren React-Komponenten zu aktualisieren.
React useDelayedState-Hook
In der VM wurden bereits
index.htmlundscript.jsbereitgestellt. Im Allgemeinen müssen Sie nur Code inscript.jsundstyle.csshinzufügen.
Um die Erstellung eines zustandsbehafteten Werts bis eine Bedingung erfüllt ist zu verzögern, folgen Sie diesen Schritten:
- Verwenden Sie den
useState()-Hook, um einen zustandsbehafteten Wert zu erstellen, der den tatsächlichenZustandund einen booleschen Wertgeladenenthält. - Verwenden Sie den
useEffect()-Hook, um den zustandsbehafteten Wert zu aktualisieren, wenn sich dieBedingungodergeladenändert. - Erstellen Sie eine Funktion
updateState, die nur denZustand-Wert aktualisiert, wenngeladenwahr ist.
const useDelayedState = (initialState, condition) => {
const [{ state, loaded }, setState] = React.useState({
state: null,
loaded: false
});
React.useEffect(() => {
if (!loaded && condition) setState({ state: initialState, loaded: true });
}, [condition, loaded]);
const updateState = (newState) => {
if (!loaded) return;
setState({ state: newState, loaded });
};
return [state, updateState];
};
Hier ist ein Beispiel dafür, wie der useDelayedState-Hook verwendet werden kann:
const App = () => {
const [branches, setBranches] = React.useState([]);
const [selectedBranch, setSelectedBranch] = useDelayedState(
branches[0],
branches.length
);
React.useEffect(() => {
const handle = setTimeout(() => {
setBranches(["master", "staging", "test", "dev"]);
}, 2000);
return () => {
handle && clearTimeout(handle);
};
}, []);
return (
<div>
<p>Ausgewählter Zweig: {selectedBranch}</p>
<select => setSelectedBranch(e.target.value)}>
{branches.map((branch) => (
<option key={branch} value={branch}>
{branch}
</option>
))}
</select>
</div>
);
};
ReactDOM.createRoot(document.getElementById("root")).render(<App />);
Bitte klicken Sie in der unteren rechten Ecke auf 'Go Live', um den Webdienst auf Port 8080 auszuführen. Anschließend können Sie die Registerkarte Web 8080 aktualisieren, um die Webseite anzuschauen.
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das React useDelayedState-Hook-Labor abgeschlossen. Sie können in LabEx weitere Labore absolvieren, um Ihre Fähigkeiten zu verbessern.