useRef Hook का उपयोग
In this page:
const refName = useRef(initialValue);
<element ref={refName} />
// Read or write without re-rendering
refName.current;
Accessing a DOM Element with useRef
एक ref object को किसी element के ref prop में pass करना आपको render होने के बाद असली DOM node तक direct access देता है, ref.current पर available। यह उन चीज़ों के लिए useful है जिनके लिए React में built-in prop नहीं है, जैसे एक input को programmatically focus करना।
ref.current component render होने के बाद ही populate होता है -- इसे एक event handler या useEffect के अंदर access करें, render के दौरान नहीं।ref.current पढ़ना पहले render पर null होगा, DOM exist करने से पहले।उदाहरण: Accessing a DOM Element with useRef
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function FocusInput() {
const inputRef = React.useRef(null);
return (
<div>
<input ref={inputRef} placeholder="Click button to focus me" />
<button onClick={() => inputRef.current.focus()}>Focus Input</button>
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<FocusInput />);
</script>
</body>
</html>
Storing a Mutable Value Without Re-rendering
State के विपरीत, एक ref की .current value update करने से component re-render नहीं होता। यह refs को उन values store करने के लिए ideal बनाता है जिन्हें आपको track करना है, जैसे एक timer ID या एक previous value, बिना unnecessary UI updates trigger किए।
उदाहरण: Storing a Mutable Value Without Re-rendering
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function ClickCounter() {
const clicksRef = React.useRef(0);
function handleClick() {
clicksRef.current += 1;
console.log("Clicked", clicksRef.current, "times (check console, no re-render)");
}
return <button onClick={handleClick}>Click me (see console)</button>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<ClickCounter />);
</script>
</body>
</html>
useRef vs useState
दोनों एक value को renders के बीच persist करते हैं, लेकिन वे बहुत अलग purposes serve करते हैं: state changes UI में visible होने चाहिए और एक re-render trigger करने चाहिए, जबकि ref changes typically 'behind the scenes' bookkeeping होते हैं जिन्हें जो दिखाया जा रहा है उसे affect नहीं करना चाहिए।
सही वाला चुनना unnecessary re-renders और missing UI updates दोनों से बचाता है।
- पूछें: 'क्या इस value के change होने पर screen update होनी चाहिए?'
- अगर हां, तो state उपयोग करें।
- अगर नहीं, तो एक ref उपयोग करें।
उदाहरण: useRef vs useState
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function Comparison() {
const [stateValue, setStateValue] = React.useState(0);
const refValue = React.useRef(0);
return (
<div>
<p>State (updates UI): {stateValue}</p>
<button onClick={() => setStateValue(stateValue + 1)}>Update State</button>
<button onClick={() => { refValue.current += 1; console.log("Ref is now", refValue.current); }}>Update Ref (check console)</button>
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<Comparison />);
</script>
</body>
</html>
- एक ref की
.currentvalue में change से एक re-render trigger होने की उम्मीद करना -- यह कभी नहीं होता। - Render के दौरान ही एक DOM element ref के लिए
ref.currentपढ़ना, DOM असल में बनने से पहले। - useRef को useState के साथ confuse करना -- refs उन values के लिए हैं जिन्हें re-renders cause करने की ज़रूरत नहीं, state उन values के लिए है जिन्हें ज़रूरत है।
- useRef एक single
.currentproperty वाला एक mutable object return करता है। .currentबदलना state के विपरीत re-render trigger NAHI करता।- एक common use DOM element को directly access करना है,
refprop के through। - एक और common use एक mutable value store करना है जो updates cause किए बिना renders के बीच persist करती है।
React 16.8 से available है, जब Hooks introduce हुए थे।
Chapter Quiz — Complete all 12 topics to unlock
0/12 topics done
Complete these topics first: