React sangat hebat, tetapi menguasainya bermakna melampaui asas dan mempelajari beberapa helah yang kurang dikenali untuk menyelaraskan pembangunan. Berikut ialah senarai helah 20 React kegemaran peribadi saya yang boleh meningkatkan produktiviti anda dan membantu anda menulis kod yang lebih bersih dan berkesan. Mari selami terus contoh!
Elakkan kata-kata jika pernyataan untuk pemaparan bersyarat dengan penilaian litar pintas.
{isLoading && <Spinner />}
Ini menjadikan
Pustaka nama kelas memudahkan untuk menggunakan kelas secara bersyarat.
npm install classnames
import classNames from 'classnames'; const buttonClass = classNames({ 'btn': true, 'btn-primary': isPrimary, 'btn-secondary': !isPrimary, }); <button className={buttonClass}>Click Me</button>
Jika pengiraan itu mahal, hafalkannya supaya React tidak membuat pengiraan semula secara tidak perlu.
const sortedData = useMemo(() => data.sort(), [data]);
Ini mengira semula sortedData hanya apabila data berubah.
Elakkan pemaparan semula yang berterusan dengan menyahlantunkan perubahan input.
const [value, setValue] = useState(''); const [debouncedValue, setDebouncedValue] = useState(''); useEffect(() => { const handler = setTimeout(() => setDebouncedValue(value), 500); return () => clearTimeout(handler); }, [value]); <input value={value} onChange={(e) => setValue(e.target.value)} />
Encapsulate logik dalam cangkuk tersuai untuk menggunakannya semula merentas komponen.
function useFetch(url) { const [data, setData] = useState(null); useEffect(() => { fetch(url).then(res => res.json()).then(setData); }, [url]); return data; } const Component = () => { const data = useFetch('/api/data'); return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>; };
Optimumkan masa pemuatan dengan membelah komponen anda.
const LazyComponent = React.lazy(() => import('./LazyComponent')); function App() { return ( <React.Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </React.Suspense> ); }
Untuk mengakses nilai keadaan sebelumnya, gunakan useRef.
const [count, setCount] = useState(0); const prevCount = useRef(count); useEffect(() => { prevCount.current = count; }, [count]); console.log(`Previous: ${prevCount.current}, Current: ${count}`);
Jika fungsi tidak perlu ditukar, hafalkannya dengan useCallback.
const increment = useCallback(() => setCount(count + 1), [count]);
Memusnahkan prop tepat dalam parameter fungsi.
const User = ({ name, age }) => ( <div>{name} is {age} years old</div> );
Balut elemen tanpa menambah nod DOM tambahan.
<> <p>Paragraph 1</p> <p>Paragraph 2</p> </>
Tangkap ralat dalam komponen kanak-kanak untuk menghalang keseluruhan apl daripada ranap.
class ErrorBoundary extends React.Component { state = { hasError: false }; static getDerivedStateFromError() { return { hasError: true }; } render() { if (this.state.hasError) return <h1>Something went wrong.</h1>; return this.props.children; } }
Tangkap pepijat lebih awal dengan menentukan jenis prop.
{isLoading && <Spinner />}
Untuk logik keadaan kompleks, useReducer boleh menjadi lebih cekap.
npm install classnames
Jalankan kesan selepas kemas kini DOM tetapi sebelum cat.
import classNames from 'classnames'; const buttonClass = classNames({ 'btn': true, 'btn-primary': isPrimary, 'btn-secondary': !isPrimary, }); <button className={buttonClass}>Click Me</button>
Buat keadaan global tanpa penggerudian prop.
const sortedData = useMemo(() => data.sort(), [data]);
Mentakrifkan fungsi sebaris menyebabkan pemaparan semula. Sebaliknya, tentukan mereka di luar.
const [value, setValue] = useState(''); const [debouncedValue, setDebouncedValue] = useState(''); useEffect(() => { const handler = setTimeout(() => setDebouncedValue(value), 500); return () => clearTimeout(handler); }, [value]); <input value={value} onChange={(e) => setValue(e.target.value)} />
Kendalikan nilai nol atau tidak ditentukan dengan baik.
function useFetch(url) { const [data, setData] = useState(null); useEffect(() => { fetch(url).then(res => res.json()).then(setData); }, [url]); return data; } const Component = () => { const data = useFetch('/api/data'); return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>; };
Sentiasa gunakan kekunci unik semasa memaparkan senarai.
const LazyComponent = React.lazy(() => import('./LazyComponent')); function App() { return ( <React.Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </React.Suspense> ); }
Eksport bernama memudahkan pengimportan komponen tertentu.
const [count, setCount] = useState(0); const prevCount = useRef(count); useEffect(() => { prevCount.current = count; }, [count]); console.log(`Previous: ${prevCount.current}, Current: ${count}`);
Kemudian import mengikut keperluan:
const increment = useCallback(() => setCount(count + 1), [count]);
Balut komponen dengan HOC untuk menambah logik tambahan.
const User = ({ name, age }) => ( <div>{name} is {age} years old</div> );
Menguasai helah ini akan membantu anda menulis kod React yang lebih ringkas, mudah dibaca dan cekap! Selamat mengekod!
Atas ialah kandungan terperinci Helah Penting React Setiap Pembangun Mesti Tahu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!