Mewujudkan cangkuk tersuai dalam React adalah cara yang kuat untuk menggunakan semula logik negara antara komponen. Berikut adalah panduan langkah demi langkah mengenai cara membuat cangkuk tersuai:
useCustomHook
.useState
, useEffect
, useRef
, dll.return
.Berikut adalah contoh mudah cangkuk tersuai yang mengambil data dari API:
<code class="javascript">import { useState, useEffect } from 'react'; function useFetch(url) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { async function fetchData() { try { const response = await fetch(url); if (!response.ok) { throw new Error('Network response was not ok'); } const json = await response.json(); setData(json); setLoading(false); } catch (error) { setError(error); setLoading(false); } } fetchData(); }, [url]); return { data, loading, error }; } export default useFetch;</code>
Dalam contoh ini, useFetch
adalah cangkuk tersuai yang boleh digunakan dalam mana -mana komponen untuk mengambil data dari URL tertentu.
Menulis cangkuk tersuai yang cekap melibatkan mematuhi beberapa amalan terbaik untuk memastikan prestasi dan penyelenggaraan:
useMemo
atau useCallback
untuk memoize pengiraan mahal atau fungsi panggil balik untuk mengelakkan render yang tidak perlu.useEffect
, pastikan anda membersihkan sebarang langganan atau pemasa untuk mengelakkan kebocoran memori.useCallback
dan useMemo
dengan sewajarnya untuk mengelakkan pelaku semula yang tidak perlu dalam komponen induk. Contoh menggunakan useCallback
dalam cangkuk tersuai:
<code class="javascript">import { useState, useCallback } from 'react'; function useCounter(initialCount = 0) { const [count, setCount] = useState(initialCount); const increment = useCallback(() => { setCount(prevCount => prevCount 1); }, []); const decrement = useCallback(() => { setCount(prevCount => prevCount - 1); }, []); return { count, increment, decrement }; } export default useCounter;</code>
Dalam contoh ini, useCallback
digunakan untuk memoize fungsi increment
dan decrement
, mencegah penahan semula yang tidak perlu.
Ya, cangkuk tersuai direka khusus untuk berkongsi logik yang berkesempatan merentasi komponen. Dengan mengekstrak logik negara ke dalam cangkuk tersuai, anda boleh menggunakan semula logik itu dalam pelbagai komponen tanpa menulis kod yang sama berulang kali. Begini cara mereka memudahkan berkongsi logik negara:
useForm
dan menggunakannya dalam pelbagai bentuk sepanjang aplikasi anda.Berikut adalah contoh menggunakan cangkuk tersuai untuk berkongsi logik negara di seluruh komponen:
<code class="javascript">import { useState } from 'react'; function useForm(initialState) { const [values, setValues] = useState(initialState); const handleChange = (event) => { const { name, value } = event.target; setValues(prevValues => ({ ...prevValues, [name]: value })); }; return { values, handleChange }; } // Component 1 function SignUpForm() { const { values, handleChange } = useForm({ username: '', password: '' }); return ( <form> <input name="username" value="{values.username}" onchange="{handleChange}"> <input name="password" value="{values.password}" onchange="{handleChange}"> </form> ); } // Component 2 function ProfileForm() { const { values, handleChange } = useForm({ name: '', email: '' }); return ( <form> <input name="name" value="{values.name}" onchange="{handleChange}"> <input name="email" value="{values.email}" onchange="{handleChange}"> </form> ); }</code>
Dalam contoh ini, useForm
adalah cangkuk tersuai yang berkongsi logik untuk menguruskan keadaan bentuk antara SignUpForm
dan ProfileForm
.
Debugging cangkuk tersuai boleh mencabar, tetapi terdapat beberapa teknik untuk memudahkannya:
console.log
dalam cangkuk tersuai anda untuk log nilai dan memahami aliran logik anda. Walau bagaimanapun, pastikan untuk mengeluarkan balak ini sebelum menggunakan pengeluaran.@testing-library/react-hooks
membolehkan anda menguji cangkuk tersuai secara berasingan.useDebugValue
: Gunakan cangkuk useDebugValue
untuk memaparkan label untuk cangkuk tersuai di React Devtools, menjadikannya lebih mudah untuk mengenal pasti mereka. Berikut adalah contoh menggunakan useDebugValue
dalam cangkuk tersuai:
<code class="javascript">import { useState, useDebugValue } from 'react'; function useCounter(initialCount = 0) { const [count, setCount] = useState(initialCount); useDebugValue(count); const increment = () => setCount(prevCount => prevCount 1); const decrement = () => setCount(prevCount => prevCount - 1); return { count, increment, decrement }; } export default useCounter;</code>
Dalam contoh ini, useDebugValue
digunakan untuk memaparkan nilai semasa count
dalam React Devtools, menjadikannya lebih mudah untuk debug cangkuk.
Dengan mengikuti teknik -teknik ini, anda boleh debug cangkuk adat dengan berkesan dan memastikan ia berfungsi seperti yang dimaksudkan dalam aplikasi React anda.
Atas ialah kandungan terperinci Bagaimana anda membuat cangkuk tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!