残念ながら、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 ( <> <button onClick={onClick}> Click me! </button> <input ref={refInputField} /> </> ); }; 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 ( <div> <h1>Current Count: {count}</h1> <h2>Previous Count: {prevCountRef.current}</h2> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); }; export default PreviousValue;
この例では:
useRef は、useState とは異なり、再レンダリングを行わずにレンダリング間で値を保持するために使用できます。これは、UI に直接影響しないが覚えておく必要がある値を保存する場合に特に便利です。
例: コンポーネントのレンダリング数を追跡します。
import React, { useRef, useEffect } from 'react'; const RenderCounter = () => { const renderCount = useRef(0); useEffect(() => { renderCount.current += 1; }); return ( <div> <p>This component has rendered {renderCount.current} times</p> </div> ); }; export default RenderCounter;
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 <canvas ref={chartRef}></canvas>; }; 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 ( <div> <button onClick={() => updateName('Jane Doe')}> Update Name </button> </div> ); }; 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); }, []); return <div>Count: {count}</div>; }; export default Timer;
フックは素晴らしいものなので、ぜひ使ってみてください。 React の仕組みを理解し、フックを正しく適用すれば、多くのことを達成できます。 useRef は以下の場合に特に強力です:
useRef を理解して活用することで、より効率的かつ効果的な React コンポーネントを作成できます。フックの真の力は、フックの動作を理解し、慎重に適用することにあります。
useState が常に正しい答えであるとは限らないことをご存知ですか?
以上がuse の力を解き放つRef: React 開発者のための包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。