残念ながら、useRef は過小評価されています。これは最も人気のあるフックではありませんが、有益です。どこでどのように使用すれば、素晴らしい結果が得られるかを知ることができます。
useRef は、レンダリングに必要のない値を参照できる React フックです。
React は、DOM 内のノードを参照する JavaScript オブジェクトを作成しているか、単純な値を作成しているかに関係なく、useRef を通じて作成した値を記憶し、再レンダリング中に失われることはありません。
DOM 要素へのアクセス:
可変値の保存:
useRef の威力を説明する例をいくつか示します。
import React, { useRef } from 'react'; const Counter = () => { const refCount = useRef(0); const refInputField = useRef(null); const onClick = () => { refCount.current = refCount.current 1; refInputField.current.focus(); } return ( > ); }; export default Counter;
この例では:
useRef のもう 1 つの一般的な使用例は、以前の値を追跡することです。
import React, { useRef, useEffect, useState } from 'react'; const PreviousValue = () => { const [count, setCount] = useState(0); const prevCountRef = useRef(); useEffect(() => { prevCountRef.current = count; }, [count]); return (); }; export default PreviousValue;Current Count: {count}
Previous Count: {prevCountRef.current}
この例では:
useRef を使用すると、useState とは異なり、再レンダリングを行わずにレンダリング間で値を保持できます。これは、UI に直接影響しないが覚えておく必要がある値を保存する場合に特に便利です。
例: コンポーネントのレンダリング数を追跡します。
import React, { useRef, useEffect } from 'react'; const RenderCounter = () => { const renderCount = useRef(0); useEffect(() => { renderCount.current = 1; }); return (); }; export default RenderCounter;This component has rendered {renderCount.current} times
useRef は、チャート ライブラリとの統合、ビデオ プレーヤーの管理、アニメーションの処理など、DOM 要素の直接操作が必要なサードパーティ ライブラリを操作する場合に非常に役立ちます。
例: チャート ライブラリの統合。
import React, { useRef, useEffect } from 'react'; import Chart from 'chart.js/auto'; const ChartComponent = () => { const chartRef = useRef(null); useEffect(() => { const ctx = chartRef.current.getContext('2d'); new Chart(ctx, { type: 'line', data: { labels: ['January', 'February', 'March', 'April'], datasets: [{ label: 'Sales', data: [65, 59, 80, 81], }], }, }); }, []); return ; }; export default ChartComponent;
パフォーマンスが重要な複雑なアプリケーションでは、useRef を使用して可変オブジェクトを保存すると、不必要な再レンダリングを回避できます。
例: 可変状態オブジェクトの保存。
import React, { useRef } from 'react'; const MutableState = () => { const state = useRef({ name: 'John Doe', age: 30, }); const updateName = (newName) => { state.current.name = newName; console.log('Name updated:', state.current.name); }; return (); }; export default MutableState;
useRef を使用すると、レンダリング間で持続する値への安定した参照が提供されるため、クロージャの問題を回避できます。
例: 古い状態を避けるための useRef を使用したタイマー。
import React, { useRef, useState, useEffect } from 'react'; const Timer = () => { const [count, setCount] = useState(0); const countRef = useRef(count); countRef.current = count; useEffect(() => { const intervalId = setInterval(() => { setCount(countRef.current 1); }, 1000); return () => clearInterval(intervalId); }, []); returnCount: {count}; }; export default Timer;
フックは素晴らしいので、ぜひ使ってみてください。 React の仕組みを理解し、フックを正しく適用すれば、多くのことを達成できます。 useRef は次の場合に特に強力です:
useRef を理解して活用することで、より効率的かつ効果的な React コンポーネントを作成できます。フックの真の力は、フックの動作を理解し、慎重に適用することにあります。
useState が常に正しい答えであるとは限らないことをご存知ですか?
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3