Reactアプリのパフォーマンスをブーストすることは、ユーザーエクスペリエンスのポジティブに重要です。 この記事では、多数の生産Reactアプリケーションの最適化から収集された7つの実績のあるパフォーマンスパターンの概要を説明します。
useMemo
:useCallback
によるメモ
問題:不変の小道具または状態による不必要な再レンダー。
ソリューション:計算上の高価な操作と関数参照をキャッシュします
<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>
子どものコンポーネントを使用して、不必要なサブツリーの更新を防ぐために使用します。 複雑な計算(ソート、フィルタリング)、最適化された子供に渡されたコールバック、および安定したコンテキストプロバイダーの値に最適です。
React.memo
解決策:ダイナミックインポートとオンデマンド負荷の場合
Advanced:Suspense
<code class="language-javascript">const HeavyChartLibrary = React.lazy(() => import('./ChartComponent')); const Dashboard = () => ( <React.Suspense fallback={<Spinner />}> {showCharts && <HeavyChartLibrary />} </React.Suspense> );</code>
問題:
ボーナス:ダイナミックな列の高さにを使用し、レスポンシブコンテナの場合は
を使用します。
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>
問題:VariableSizeList
複数の状態更新がカスケード再レンダーを引き起こします。react-virtualized-auto-sizer
プリの反応18または複雑なシナリオの場合:
アトミック状態の更新にを使用します。>
debouncing api呼び出し:
<code class="language-javascript">setCount(1); setText('Updated'); // Single re-render</code>
問題:迅速なユーザー入力からの過剰なAPI要求(例:検索バー)。
useReducer
最適化されたコンテキストAPI:
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>
解決策:コンテキストとメモのプロバイダー値を分割します
AbortController
slow UI。 解決策:即時の視覚的フィードバックとエラーに関するロールバックを提供します。 パフォーマンスチェックリスト: 最初にプロファイル、2番目を最適化してください! これらの手法は、さまざまなReactフレームワーク(Next.js、Gatsbyなど)に適用されます。
React DevTools Profilerを使用した
覚えておいてください:React.memo
、useMemo
を戦略的に使用します。useCallback
以上がすべての開発者が盗む(およびそれらを実装する方法)EACTパフォーマンスパターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。