Heim > Web-Frontend > js-Tutorial > Verschiedene Möglichkeiten zum Abrufen von Daten von APIs mithilfe von „useEffect' in React

Verschiedene Möglichkeiten zum Abrufen von Daten von APIs mithilfe von „useEffect' in React

Linda Hamilton
Freigeben: 2025-01-10 22:33:43
Original
789 Leute haben es durchsucht

Different Ways to Fetch Data from APIs Using `useEffect` in React

In React ist der useEffect-Hook so konzipiert, dass er Nebeneffekte wie das Abrufen von Daten beim Rendern der Komponente ausführt. Während Sie in diesem speziellen Fall den Aufruf der fetchData-Funktion nicht vermeiden können (da Sie eine Möglichkeit benötigen, die API-Anfrage zu initiieren), können Sie sie je nach Ihren Anforderungen vereinfachen oder abstrahieren.

Ansätze

1. Integrieren Sie die Abruflogik

Anstatt fetchData als separate Funktion zu definieren, können Sie die Abruflogik direkt in den useEffect-Hook integrieren.

useEffect(() => {
    const fetchData = async () => {
        setLoading(true);
        try {
            const response = await fetch('http://127.0.0.1:5000/indicators_signals');
            const data = await response.json();
            setData(data);
        } catch (error) {
            console.error('Error fetching data:', error);
        } finally {
            setLoading(false);
        }
    };

    fetchData();
}, []); // Empty dependency array ensures this runs only once
Nach dem Login kopieren

Während dieser Ansatz den expliziten Aufruf von fetchData eliminiert, existiert die Logik weiterhin als asynchrone Inline-Funktion.


2. Rufen Sie die API automatisch ohne explizite Funktion auf

Sie können den Abrufvorgang direkt als IIFE (Immediately Invoked Function Expression) innerhalb des useEffect ausführen. Dadurch entfällt die Notwendigkeit einer benannten Funktion wie fetchData.

useEffect(() => {
    (async () => {
        setLoading(true);
        try {
            const response = await fetch('http://127.0.0.1:5000/indicators_signals');
            const data = await response.json();
            setData(data);
        } catch (error) {
            console.error('Error fetching data:', error);
        } finally {
            setLoading(false);
        }
    })(); // The function is invoked immediately
}, []);
Nach dem Login kopieren

Auf diese Weise wird die Abruflogik direkt ausgeführt, ohne explizit eine benannte Funktion aufzurufen.


3. Verwenden Sie einen benutzerdefinierten Hook

Sie können die Abruflogik in einen benutzerdefinierten Hook abstrahieren, um die Funktionalität zu kapseln und Ihre Komponente sauberer zu halten.

Benutzerdefinierter Hook: useFetch
import { useState, useEffect } from 'react';

const useFetch = (url) => {
    const [data, setData] = useState(null);
    const [loading, setLoading] = useState(true);
    const [error, setError] = useState(null);

    useEffect(() => {
        (async () => {
            try {
                const response = await fetch(url);
                const result = await response.json();
                setData(result);
            } catch (err) {
                setError(err);
            } finally {
                setLoading(false);
            }
        })();
    }, [url]);

    return { data, loading, error };
};

export default useFetch;
Nach dem Login kopieren
Verwenden Sie den Hook in Ihrer Komponente
import useFetch from './hooks/useFetch';

const MyComponent = () => {
    const { data, loading, error } = useFetch('http://127.0.0.1:5000/indicators_signals');

    if (loading) return <p>Loading...</p>;
    if (error) return <p>Error: {error.message}</p>;

    return (
        <div>
            <h1>Data from API:</h1>
            <pre class="brush:php;toolbar:false">{JSON.stringify(data, null, 2)}
); };
Nach dem Login kopieren

4. Daten in einer übergeordneten Komponente vorab abrufen

Anstatt Daten innerhalb der Komponente dort abzurufen, wo sie benötigt werden, rufen Sie die Daten in einer übergeordneten oder übergeordneten Komponente ab und übergeben Sie sie als Requisiten.

const App = () => {
    const [data, setData] = useState(null);
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        (async () => {
            try {
                const response = await fetch('http://127.0.0.1:5000/indicators_signals');
                const result = await response.json();
                setData(result);
            } finally {
                setLoading(false);
            }
        })();
    }, []);

    if (loading) return <p>Loading...</p>;

    return <ChildComponent data={data} />;
};

const ChildComponent = ({ data }) => (
    <div>
        <h1>Data:</h1>
        <pre class="brush:php;toolbar:false">{JSON.stringify(data, null, 2)}
);
Nach dem Login kopieren

Wichtige Erkenntnisse

  • Sie können keine Daten abrufen, ohne eine Funktion aufzurufen (explizit oder implizit), da es sich bei einem API-Aufruf um einen asynchronen Vorgang handelt, der initiiert werden muss.
  • Die Verwendung von Techniken wie IIFEs, benutzerdefinierten Hooks oder Vorabruf auf einer höheren Ebene kann die Struktur vereinfachen und die Abruflogik abstrahieren.
  • Wählen Sie den Ansatz, der am besten zu den Struktur- und Lesbarkeitszielen Ihrer Anwendung passt. Für wiederverwendbare Abruflogik sind benutzerdefinierte Hooks eine gute Wahl!

Das obige ist der detaillierte Inhalt vonVerschiedene Möglichkeiten zum Abrufen von Daten von APIs mithilfe von „useEffect' in React. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Vorheriger Artikel:Sauberer Code: Nebenwirkungen mit funktionaler Programmierung verwalten Nächster Artikel:Beste HTML-Drucktechnik mit Musterbeleg.
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
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage