Rumah > hujung hadapan web > tutorial js > Cara Berbeza untuk Mengambil Data daripada API Menggunakan `useEffect` dalam React

Cara Berbeza untuk Mengambil Data daripada API Menggunakan `useEffect` dalam React

Linda Hamilton
Lepaskan: 2025-01-10 22:33:43
asal
788 orang telah melayarinya

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

Dalam React, cangkuk useEffect direka untuk menjalankan kesan sampingan seperti mengambil data apabila komponen dipaparkan. Walaupun anda tidak boleh mengelak daripada memanggil fungsi fetchData dalam kes khusus ini (kerana anda memerlukan cara untuk memulakan permintaan API), anda boleh memudahkan atau mengabstrakkannya bergantung pada keperluan anda.

Pendekatan

1. Sebaris Logik Ambil

Daripada mentakrifkan fetchData sebagai fungsi yang berasingan, anda boleh menyelaraskan logik pengambilan terus di dalam cangkuk useEffect.

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
Salin selepas log masuk

Walaupun pendekatan ini menghapuskan panggilan eksplisit untuk fetchData, logik masih wujud sebagai fungsi async sebaris.


2. Panggil API Secara Automatik Tanpa Fungsi Eksplisit

Anda boleh secara langsung melaksanakan operasi pengambilan sebagai IIFE (Ungkapan Fungsi Segera Diminta) dalam useEffect. Ini mengalih keluar keperluan untuk fungsi bernama seperti 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
}, []);
Salin selepas log masuk

Dengan cara ini, logik pengambilan dilaksanakan secara langsung tanpa memanggil fungsi bernama secara eksplisit.


3. Gunakan Cangkuk Tersuai

Anda boleh mengabstrak logik pengambilan ke dalam cangkuk tersuai untuk merangkum fungsi dan memastikan komponen anda lebih bersih.

Cangkuk Tersuai: 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;
Salin selepas log masuk
Gunakan Cangkuk dalam Komponen Anda
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)}
); };
Salin selepas log masuk

4. Pra-Ambil Data dalam Komponen Tahap Lebih Tinggi

Daripada mengambil data dalam komponen yang diperlukan, ambil data dalam induk atau komponen peringkat lebih tinggi dan hantarkannya sebagai prop.

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)}
);
Salin selepas log masuk

Pengambilan Utama

  • Anda tidak boleh mengambil data tanpa memanggil beberapa fungsi (secara eksplisit atau tersirat) kerana panggilan API ialah operasi tak segerak yang perlu dimulakan.
  • Menggunakan teknik seperti IIFE, cangkuk tersuai atau pra-pengambilan pada tahap yang lebih tinggi boleh memudahkan struktur dan mengabstrak logik pengambilan.
  • Pilih pendekatan yang paling sesuai dengan struktur aplikasi anda dan matlamat kebolehbacaan. Untuk logik pengambilan boleh guna semula, cangkuk tersuai ialah pilihan yang bagus!

Atas ialah kandungan terperinci Cara Berbeza untuk Mengambil Data daripada API Menggunakan `useEffect` dalam React. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Artikel sebelumnya:Kod Bersih: Mengurus Kesan Sampingan dengan Pengaturcaraan Berfungsi Artikel seterusnya:Mencetak teknik terbaik HTML dengan contoh resit.
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Isu terkini
Topik-topik yang berkaitan
Lagi>
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan