useMemo
: useCallback
Masalah: REDERS yang tidak perlu kerana props atau keadaan yang tidak berubah.
Penyelesaian: Cache Operasi dan Rujukan Fungsi Komputasi mahal.
<code class="language-javascript">const ExpensiveComponent = ({ items }) => { const sortedList = useMemo(() => items.sort((a, b) => a.price - b.price), [items]); const handleClick = useCallback(() => { console.log('Item clicked:', sortedList[0]); }, [sortedList]); return <ChildComponent onClick={handleClick} />; };</code>
Amalan terbaik: Gunakan dengan untuk komponen kanak -kanak untuk mengelakkan kemas kini subtree yang tidak perlu. Sesuai untuk pengiraan kompleks (penyortiran, penapisan), panggilan balik yang disampaikan kepada kanak -kanak yang dioptimumkan, dan nilai pembekal konteks yang stabil. React.memo
Masalah: saiz bundle awal yang besar yang memberi kesan kepada cat kandungan pertama (FCP).
Penyelesaian: import dinamik dan untuk pemuatan atas permintaan. Suspense
<code class="language-javascript">const HeavyChartLibrary = React.lazy(() => import('./ChartComponent')); const Dashboard = () => ( <React.Suspense fallback={<Spinner />}> {showCharts && <HeavyChartLibrary />} </React.Suspense> );</code>
Advanced: Bersepadu dengan Router React untuk pemisahan kod berasaskan laluan.
Masalah: Memberi ribuan item mengatasi dom.
Penyelesaian: hanya membuat item yang kelihatan. react-window
<code class="language-javascript">import { FixedSizeList } from 'react-window'; const BigList = ({ items }) => ( <FixedSizeList height={600} itemCount={items.length} itemSize={35} width="100%"> {({ index, style }) => ( <div style={style}>...</div> )} </FixedSizeList> );</code>
: Gunakan untuk ketinggian baris dinamik dan VariableSizeList
untuk bekas responsif. react-virtualized-auto-sizer
Masalah: Kemas kini negeri berganda menyebabkan cascading re-render.
Penyelesaian: Leverage React 18's Automatic Batching.
React 18:
<code class="language-javascript">setCount(1); setText('Updated'); // Single re-render</code>
pra-bertindak balas 18 atau untuk senario kompleks: Gunakan untuk kemas kini keadaan atom. useReducer
Masalah: Permintaan API yang berlebihan dari input pengguna cepat (mis., Bar carian).
Penyelesaian: Custom cangkuk. useDebounce
<code class="language-javascript">import { useEffect, useState } from 'react'; const useDebouncedValue = (value, delay) => { const [debouncedValue, setDebouncedValue] = useState(value); useEffect(() => { const handler = setTimeout(() => setDebouncedValue(value), delay); return () => clearTimeout(handler); }, [value, delay]); return debouncedValue; };</code>
tip pro: AbortController
Pengguna konteks yang tidak perlu kerana perubahan yang tidak berkaitan.
Penyelesaian:Konteks berpecah dan memoize nilai penyedia.
perlahan ui kerana menunggu respons API. Penyelesaian: Sediakan maklum balas visual segera dan pengembalian semula pada ralat. Senarai Semak Prestasi: Ingat: Profil Pertama, Optimalkan kedua! Teknik -teknik ini boleh digunakan di pelbagai rangka React (Next.js, Gatsby, dan lain -lain).
React.memo
, useMemo
, useCallback
secara strategik.
Atas ialah kandungan terperinci Corak Prestasi EACT Setiap pemaju harus mencuri (dan bagaimana melaksanakannya). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!