Sebagai pembangun React, kami sering menghadapi senario di mana berbilang perubahan keadaan pantas perlu disegerakkan dengan API. Membuat panggilan API untuk setiap perubahan kecil boleh menjadi tidak cekap dan membebankan kedua-dua pelanggan dan pelayan. Di sinilah pengurusan negeri yang lemah dan bijak memainkan peranan. Dalam artikel ini, kami akan membina cangkuk React tersuai yang menangkap panggilan kemas kini API selari dengan menggabungkan muatan dan menyahlantunkan panggilan API.
Bayangkan medan input di mana pengguna boleh melaraskan tetapan atau pilihan. Setiap ketukan kekunci atau pelarasan boleh mencetuskan panggilan API untuk menyimpan keadaan baharu. Jika pengguna membuat beberapa perubahan berturut-turut, ini boleh membawa kepada banjir permintaan API:
Menyahlantun ialah teknik yang digunakan untuk mengehadkan kadar fungsi boleh menyala. Daripada memanggil fungsi dengan serta-merta, anda menunggu untuk tempoh tertentu tidak aktif sebelum melaksanakannya. Jika panggilan lain masuk sebelum kelewatan tamat, pemasa ditetapkan semula.
Dalam React, useRef ialah cangkuk yang membolehkan anda mengekalkan nilai boleh ubah antara pemaparan tanpa mencetuskan pemaparan semula. Ia pada asasnya ialah bekas yang mempunyai nilai boleh ubah.
Mari kita mendalami kod tersebut dan fahami bagaimana ia digabungkan.
import { debounce } from "@mui/material"; import { useCallback, useEffect, useRef } from "react"; type DebouncedUpdateParams = { id: string; params: Record<string, any>; }; function useDebouncedUpdate( apiUpdate: (params: DebouncedUpdateParams) => void, delay: number = 300, ) { const accumulatedUpdates = useRef<DebouncedUpdateParams | null>(null); const processUpdates = useRef( debounce(() => { if (accumulatedUpdates.current) { apiUpdate(accumulatedUpdates.current); accumulatedUpdates.current = null; } }, delay), ).current; const handleUpdate = useCallback( (params: DebouncedUpdateParams) => { accumulatedUpdates.current = { id: params.id, params: { ...(accumulatedUpdates.current?.params || {}), ...params.params, }, }; processUpdates(); }, [processUpdates], ); useEffect(() => { return () => { processUpdates.clear(); }; }, [processUpdates]); return handleUpdate; } export default useDebouncedUpdate;
Kami memulakan useRef yang dipanggil accumulatedUpdates untuk menyimpan parameter gabungan semua kemas kini yang masuk.
const accumulatedUpdates = useRef
Kami mencipta proses nyahlantunKemas kini menggunakan utiliti nyahlantun daripada UI Bahan.
const processUpdates = useRef( debounce(() => { if (accumulatedUpdates.current) { apiUpdate(accumulatedUpdates.current); accumulatedUpdates.current = null; } }, delay), ).current;
Fungsi handleUpdate bertanggungjawab untuk mengumpul kemas kini dan mencetuskan panggilan API yang dinyahlantun.
const handleUpdate = useCallback( (params: DebouncedUpdateParams) => { accumulatedUpdates.current = { id: params.id, params: { ...(accumulatedUpdates.current?.params || {}), ...params.params, }, }; processUpdates(); }, [processUpdates], );
Kami mengosongkan fungsi nyahpantun apabila komponen dinyahlekap untuk mengelakkan kebocoran memori.
useEffect(() => { return () => { processUpdates.clear(); }; }, [processUpdates]);
Berikut ialah cara anda boleh menggunakan cangkuk ini dalam komponen:
import React from "react"; import useDebouncedUpdate from "./useDebouncedUpdate"; function SettingsComponent() { const debouncedUpdate = useDebouncedUpdate(updateSettingsApi, 500); const handleChange = (settingName, value) => { debouncedUpdate({ id: "user-settings", params: { [settingName]: value }, }); }; return ( <div> <input type="text" onChange={(e) => handleChange("username", e.target.value)} /> <input type="checkbox" onChange={(e) => handleChange("notifications", e.target.checked)} /> </div> ); } function updateSettingsApi({ id, params }) { // Make your API call here console.log("Updating settings:", params); }
Dengan menggabungkan nyahlantun dengan pengumpulan keadaan, kami boleh mencipta aplikasi yang cekap dan responsif. Cangkuk useDebouncedUpdate memastikan perubahan pantas digabungkan bersama, mengurangkan panggilan API yang tidak diperlukan dan meningkatkan prestasi.
Pengambilan Utama:
이 후크를 프로젝트에 자유롭게 통합하고 특정 요구 사항에 맞게 조정하세요. 즐거운 코딩하세요!
위 내용은 내 React 앱에서 API 호출을 최적화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!