ホームページ >ウェブフロントエンド >jsチュートリアル >React のパフォーマンスをマスターする: 不必要な再レンダリングを防ぐための開発者ガイド
React の仮想 DOM とコンポーネントベースのアーキテクチャにより、React は驚くほど効率的になりますが、適切な最適化がなければ、アプリケーションは依然としてパフォーマンスの問題に悩まされる可能性があります。不必要な再レンダリングを排除し、React アプリのパフォーマンスを向上させる実証済みの戦略について詳しく見ていきましょう。
最適化する前に、React コンポーネントがいつ、そしてなぜ再レンダリングされるのかを理解する必要があります。
すべての再レンダリングが悪いわけではありませんが、不要な再レンダリングはパフォーマンスに影響を与える可能性があります。それらを防ぐ方法を見てみましょう。
const MovieCard = React.memo(({ title, rating, onLike }) => { console.log(`MovieCard rendered: ${title}`); return ( <div className="card"> <h3>{title}</h3> <span>Rating: {rating}/10</span> <button onClick={onLike}>Like</button> </div> ); }); // Usage <MovieCard title="Inception" rating={9.3} onLike={() => handleLike('inception')} />
? プロのヒント: React.memo は強力ですが、戦略的に使用してください。すべてをメモすると、実際にパフォーマンスが低下する可能性があります。
const MovieList = () => { const [movies, setMovies] = useState([]); const handleLike = useCallback((movieId) => { setMovies(prevMovies => prevMovies.map(movie => movie.id === movieId ? { ...movie, likes: movie.likes + 1 } : movie ) ); }, []); // Empty deps array as it only uses setState return movies.map(movie => ( <MovieCard key={movie.id} {...movie} onLike={() => handleLike(movie.id)} /> )); };
const MovieAnalytics = ({ movies }) => { const statistics = useMemo(() => ({ averageRating: movies.reduce((acc, m) => acc + m.rating, 0) / movies.length, topRated: [...movies].sort((a, b) => b.rating - a.rating)[0], totalLikes: movies.reduce((acc, m) => acc + m.likes, 0) }), [movies]); return ( <div> <h2>Analytics Dashboard</h2> <p>Average Rating: {statistics.averageRating.toFixed(1)}</p> <p>Most Popular: {statistics.topRated.title}</p> <p>Total Likes: {statistics.totalLikes}</p> </div> ); };
const MovieApp = () => { const [favorites, setFavorites] = useState(new Set()); // Lifted state handler const toggleFavorite = useCallback((movieId) => { setFavorites(prev => { const next = new Set(prev); if (next.has(movieId)) next.delete(movieId); else next.add(movieId); return next; }); }, []); return ( <div> <MovieList onFavorite={toggleFavorite} /> <FavoritesList ids={favorites} /> </div> ); };
function useMovieData(movieId) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { let mounted = true; async function fetchMovie() { setLoading(true); try { const response = await fetch(`/api/movies/${movieId}`); const movie = await response.json(); if (mounted) { setData(movie); setLoading(false); } } catch (error) { if (mounted) { console.error('Failed to fetch movie:', error); setLoading(false); } } } fetchMovie(); return () => { mounted = false; }; }, [movieId]); return { data, loading }; }
✅ 純粋な機能コンポーネントには React.memo を使用します
✅ props
として渡されるイベントハンドラーの useCallback を実装します。
✅ 高価な計算には useMemo を適用します
✅ レンダリングでのインライン オブジェクトの作成を避ける
✅ リストで適切なキー プロパティを使用します
✅ アプリを定期的にプロファイリングします
❌ 過剰な最適化
❌ 時期尚早な最適化
❌ すべてをメモする
❌ レンダリングで新しいオブジェクト/配列を作成する
❌ コンポーネントの深いネスト
React 19 は自動的にパフォーマンスを向上させます:
React のパフォーマンスの最適化は、コードの複雑さと実際のパフォーマンスの向上の間のバランスです。基本から始めて、アプリのパフォーマンスを測定し、必要に応じて最適化します。覚えておいてください: 時期尚早な最適化は諸悪の根源です!
✨ お役に立てば幸いです! React のヒントやコツをさらに知るには、「いいね」を押してフォローすることを忘れないでください!
? X (Twitter) と LinkedIn で私をフォローして、毎日の Web 開発のヒントと洞察を入手してください!
?コーディングを続け、作成を続け、改善を続けてください!
この素晴らしい日に、皆さんの成功と前向きな気持ちを祈っています。一緒に素晴らしいものを作りましょう! ?
以上がReact のパフォーマンスをマスターする: 不必要な再レンダリングを防ぐための開発者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。