React の useCallback フックと useMemo フックは、アプリケーションのパフォーマンスを最適化するために重要です。これらをいつどのように使用するかを理解すると、不必要な再レンダリングを回避し、アプリをスムーズに実行できるようになります。この記事では、useCallback と useMemo を効果的に使用する実際の例を詳しく見ていきます。
useCallback フックはコールバック関数のメモ化されたバージョンを返します。つまり、依存関係の 1 つが変更された場合にのみ関数を再作成します。これは、関数を props として子コンポーネントに渡し、不必要な再レンダリングを防ぐ場合に特に便利です。
子コンポーネントに関数を渡す親コンポーネントがあるとします。 useCallback を使用しないと、関数ロジックが変更されていない場合でも、親コンポーネントがレンダリングされるたびに子コンポーネントが再レンダリングされます。
import React, { useState, useCallback } from 'react'; import ChildComponent from './ChildComponent'; const ParentComponent = () => { const [count, setCount] = useState(0); // Using useCallback to memoize the function const handleIncrement = useCallback(() => { setCount(count 1); }, [count]); return (); }; export default ParentComponent;Count: {count}
上記の例では、handleIncrement が useCallback でメモ化されています。 ChildComponent はカウントが変更された場合にのみ再レンダリングされるため、不必要な再レンダリングが防止され、パフォーマンスが向上します。
useMemo フックは関数の結果をメモ化するために使用され、依存関係の 1 つが変更された場合にのみキャッシュされた結果を再計算します。これは、関数が負荷の高い計算を実行する状況でパフォーマンスを最適化するのに役立ちます。
大きなリストのフィルタリングなど、計算量の多い操作を実行するコンポーネントがあるとします。
import React, { useState, useMemo } from 'react'; const ExpensiveComponent = ({ items }) => { const [filter, setFilter] = useState(''); // Using useMemo to optimize expensive filtering const filteredItems = useMemo(() => { console.log('Filtering items...'); return items.filter(item => item.includes(filter)); }, [items, filter]); return (setFilter(e.target.value)} placeholder="Filter items" />); }; export default ExpensiveComponent;{filteredItems.map((item, index) => (
- {item}
))}
この例では、useMemo を使用して、項目配列のフィルター処理の結果をキャッシュします。こうすることで、高価なフィルタリング操作は項目またはフィルタが変更された場合にのみ再計算され、不必要な計算が回避されます。
React の useCallback フックと useMemo フックは、不必要な再レンダリングや高価な計算を回避してコンポーネントのパフォーマンスを最適化するための強力なツールです。これらのフックを慎重に適用することで、React アプリケーションを効率的に実行できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3