cari

Rumah  >  Soal Jawab  >  teks badan

Fungsi dipanggil beberapa kali apabila menggunakan useEffect yang dihantar kepada komponen React anak

Saya mempunyai halaman dengan berbilang teg ChildComponent dan saya mahu setiap ChildComponent diberitahu API mana yang hendak dipanggil berdasarkan ChildComponent yang diklik oleh pengguna. onClick() akan membuka modal.

Saya perasan bahawa apabila modal dibuka, panggilan API dibuat dua kali. Apabila saya menutup modal, panggilan API akan dibuat semula.

Apa yang saya pelajari daripada siaran ini ialah React berkelakuan dengan betul - memanggil fungsi beberapa kali dalam komponen berfungsi React

Adakah terdapat cara lain untuk menstruktur ini supaya hanya terdapat satu panggilan API axios pada satu masa?

const [posts, setPosts] = useState([]);

export default function ParentComponent() {
    const fetchPosts = useCallback(async () => {
        try {
            const result = await axios(`https://jsonplaceholder.typicode.com/posts`);
            setPosts(result.data.data);
        } catch (error) {
            console.log(error);
        }
    }, []);
}
<ChildComponent
      fetchPosts={fetchPosts}
      onClick={handleOnclick}
/>
const ChildComponent = ({ fetchPosts }) => {
    useEffect(
       () => props.fetchPosts, 
       [props.fetchPosts]
    );
}

export default memo(ChildComponent);

P粉818561682P粉818561682271 hari yang lalu516

membalas semua(2)saya akan balas

  • P粉198670603

    P粉1986706032024-03-31 14:56:02

    Jika anda menggunakan React 18, anda mendapat ralat ini dalam reaktiviti, sila semak siaran ini https://taig.medium.com/prevent-react-from-triggering-useeffect-twice-307a475714d7

    balas
    0
  • P粉005134685

    P粉0051346852024-03-31 12:05:56

    Jika saya memahami masalah dan tugas anda dengan baik, saya akan cuba menulis penyelesaian saya.

    Memandangkan anda mempunyai keadaan kawalan modal pada komponen induk, setiap perubahan akan mencetuskan komponen induk anda untuk dipaparkan semula, dan komponen anak anda juga akan dipaparkan semula, dan memandangkan fungsi ialah objek dalam JS, fungsi pengambilan anda Setiap kali pautan yang berbeza akan dipaparkan semula dan useEffect anda dalam ChildComponent akan menganggap fungsi anda telah berubah.

    Jadi, saya rasa penyelesaian terbaik ialah menambah memo pada komponen anak anda seperti export default memo(ChildComponent)您可以从“react”导入备忘录)。之后,您应该使用 useCallback 包装 fetchPosts 和 handleOnclick。你会得到类似的东西 const fetchPosts = useCallback(() => doSomething(), [])

    Semoga membantu.

    balas
    0
  • Batalbalas