Heim > Web-Frontend > js-Tutorial > Hauptteil

Vereinfachen Sie die Verwaltung des Reaktionsstatus: Best Practices für den Umgang mit dem Status

王林
Freigeben: 2024-09-10 11:04:07
Original
574 Leute haben es durchsucht

Simplify React State Management: Best Practices for Handling Status

Manchmal müssen wir den Status im Reaktionszustand verwalten.
Beispielsweise haben wir ein Absendeformular und müssen den Status des Formulars verwalten.

Es gibt viele Möglichkeiten, den Status auszudrücken.
Ich werde das schlechte Beispiel einführen, um den Status auszudrücken.

Schlechtes Beispiel

1. Verwenden Sie das Objekt, um den Status auszudrücken.

const Page = () => {
    const [status, setStatus] = useState<{ loading: boolean, error: boolean, success: boolean }>({ loading: false, error: false, success: false });

    const fetchUser = async () => {
        setStatus({ loading: true, error: false, success: false });
        try {
            const user = await api.getUser();
            setStatus({ loading: false, error: false, success: true });
        } catch (e) {
            setStatus({ loading: false, error: true, success: false });
        }
    };

    return (
        <>
            {status.loading && <div>Loading...</div>}
            {status.error && <div>Error...</div>}
            {status.success && <div>Success...</div>}
            <button onClick={fetchUser}>Fetch</button>
        </>
    );
};
Nach dem Login kopieren

Das ist ein schlechtes Beispiel, weil der Status sehr komplex ist.
Wenn Sie den Status aktualisieren, müssen Sie den gesamten Status aktualisieren.

In diesem Beispiel gibt es nur drei Statusmuster.

// loading
setStatus({ loading: true, error: false, success: false });

// success
setStatus({ loading: false, error: false, success: true });

// error
setStatus({ loading: false, error: true, success: false });
Nach dem Login kopieren

Aber wenn Sie ein Objekt verwenden, um den Status auszudrücken, kann der Leser nicht verstehen, dass es nur drei Muster gibt.
Das ist also ein schlechtes Beispiel.

2. Verwenden Sie den Index, um den Status auszudrücken.

const Page = () => {
    const [status, setStatus] = useState<0 | 1 | 2 | 3>(3);
    const [user, setUser] = useState<User | null>(null);

    const fetchUser = async () => {
        setStatus(0);
        try {
            const user = await api.getUser();
            setUser(user);
            setStatus(2);
        } catch (e) {
            setStatus(1);
        }
    };

    const reset = () => {
        setUser(null);
        setStatus(3);
    };

    return (
        <>
            {status === 0 && <div>Loading...</div>}
            {status === 1 && <div>Error...</div>}
            {status === 2 && <div>{user?.name}</div>}
            <button onClick={fetchUser}>Fetch</button>
            <button onClick={reset}>Reset</button>
        </>
    );
};
Nach dem Login kopieren

Dies ist ein sehr einfaches Beispiel.
Aber auch in diesem Beispiel gibt es ein Problem.

Wenn Sie den Index verwenden, um den Status auszudrücken, müssen Sie sich die Statusnummer merken.
Wenn Sie einen neuen Status hinzufügen müssen, müssen Sie alle Statusnummern aktualisieren.

Das ist also auch kein gutes Beispiel.

3. Erstellen Sie einen Status für jeden Status.

const Page = () => {
    const [loading, setLoading] = useState<boolean>(false);
    const [error, setError] = useState<boolean>(false);
    const [success, setSuccess] = useState<boolean>(false);
    const [user, setUser] = useState<User | null>(null);

    const fetchUser = async () => {
        setLoading(true);
        try {
            const user = await api.getUser();
            setUser(user);
            setSuccess(true);
        } catch (e) {
            setError(true);
        }
    };

    const reset = () => {
        setUser(null);
        setLoading(false);
        setError(false);
        setSuccess(false);
    };

    return (
        <>
            {loading && <div>Loading...</div>}
            {error && <div>Error...</div>}
            {success && <div>{user?.name}</div>}
            <button onClick={fetchUser}>Fetch</button>
            <button onClick={reset}>Reset</button>
        </>
    );
};
Nach dem Login kopieren

Das ist auch kein gutes Beispiel.
Sie müssen den gesamten Statusstatus in der Funktion ständig verwalten.

Und wenn Sie vergessen, den Status zu aktualisieren, liegt ein Fehler vor.
Auch die Reset-Funktion ist sehr komplex.

Empfehlung

  1. Verwenden Sie die Zeichenfolge, um den Status auszudrücken.
const Page = () => {
    const [status, setStatus] = useState<'loading' | 'error' | 'success' | 'idle'>('idle');
    const [user, setUser] = useState<User | null>(null);

    const fetchUser = async () => {
        setStatus('loading');
        try {
            const user = await api.getUser();
            setUser(user);
            setStatus('success');
        } catch (e) {
            setStatus('error');
        }
    };

    const reset = () => {
        setUser(null);
        setStatus('idle');
    };

    return (
        <>
            {status === 'loading' && <div>Loading...</div>}
            {status === 'error' && <div>Error...</div>}
            {status === 'success' && <div>{user?.name}</div>}
            <button onClick={fetchUser}>Fetch</button>
            <button onClick={reset}>Reset</button>
        </>
    );
};
Nach dem Login kopieren

Dies ist ein sehr einfaches Beispiel.
Und Sie können den Status leicht verstehen.

Wenn Sie einen neuen Status hinzufügen müssen, können Sie ganz einfach einen neuen Status hinzufügen.
Natürlich gibt es in diesem Beispiel auch Nachteile.
Sie können den Status nicht gleichzeitig im Lade- und Erfolgsstatus ausdrücken.
Aber ich dachte, das sei kein großes Problem.

Wenn Sie also den Status im Reaktionsstatus verwalten, empfehle ich, die Zeichenfolge zu verwenden, um den Status auszudrücken.

Abschluss

Wenn Sie den Status im Reaktionsstatus verwalten, verwenden Sie die Zeichenfolge, um den Status auszudrücken.

Das ist sehr einfach und leicht zu verstehen.
Und Sie können ganz einfach einen neuen Status hinzufügen.

Wenn Sie das Objekt oder den Index verwenden, um den Status auszudrücken, müssen Sie den gesamten Status aktualisieren, wenn Sie einen neuen Status hinzufügen.
Daher empfehle ich, die Zeichenfolge zu verwenden, um den Status auszudrücken.

Vielen Dank fürs Lesen.

Das obige ist der detaillierte Inhalt vonVereinfachen Sie die Verwaltung des Reaktionsstatus: Best Practices für den Umgang mit dem Status. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage