Controlled और Uncontrolled Forms में अंतर
In this page:
// Controlled: React state owns the value
<input value={state} onChange={e => setState(e.target.value)} />
// Uncontrolled: the DOM owns the value
const inputRef = useRef();
<input defaultValue="initial" ref={inputRef} />
// read with inputRef.current.value
एक Input को 'Controlled' क्या बनाता है
एक input controlled होता है जब इसकी value prop React state से driven हो, और onChange उस state को update करे। इसका मतलब है React किसी भी moment पर box में क्या है इसका single source of truth है — displayed value हमेशा exactly state से match करती है।
उदाहरण: What Makes an Input 'Controlled'
<!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 App() {
const [value, setValue] = React.useState("");
return <div><input value={value} onChange={e => setValue(e.target.value)} /><p>You typed: {value}</p></div>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
एक Input को 'Uncontrolled' क्या बनाता है
एक uncontrolled input अपनी internal value normal HTML तरीके से manage करता है, React से कोई value prop नहीं। इसकी current value पढ़ने के लिए, आप एक ref attach करते हैं और ref.current.value access करते हैं जब आपको असल में इसकी ज़रूरत हो, जैसे form submit पर।
उदाहरण: What Makes an Input 'Uncontrolled'
<!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 App() {
const inputRef = React.useRef(null);
const handleClick = () => alert("Value: " + inputRef.current.value);
return <div><input ref={inputRef} defaultValue="Hello" /><button onClick={handleClick}>Read Value</button></div>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
दोनों Approaches के बीच चुनना
Controlled inputs आमतौर पर React में default choice हैं क्योंकि वे validation, formatting, और conditional UI को straightforward बनाते हैं।
Uncontrolled inputs simple forms के लिए, file inputs (जिन्हें control नहीं किया जा सकता), या एक non-React widget integrate करते समय useful हैं।
उदाहरण: Choosing Between the Two Approaches
<!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 App() {
const [controlled, setControlled] = React.useState("");
const uncontrolledRef = React.useRef(null);
return (
<div>
<input value={controlled} onChange={e => setControlled(e.target.value)} placeholder="Controlled" />
<input ref={uncontrolledRef} defaultValue="" placeholder="Uncontrolled" />
<p>Controlled value: {controlled}</p>
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
- एक input को इसकी lifetime के दौरान controlled से uncontrolled (या वापस) switch करना, जिसके बारे में React warn करता है।
- एक uncontrolled input की value हर render पर ref से पढ़ना, सिर्फ ज़रूरत होने पर (जैसे submit पर) पढ़ने के बजाय।
- एक uncontrolled input के लिए defaultValue न देना, इसे unexpectedly blank छोड़ते हुए।
- एक controlled input की value React state से आती है और onChange के through update होती है।
- एक uncontrolled input अपनी value internally manage करता है; React इसे सिर्फ ज़रूरत होने पर एक ref के through पढ़ता है।
- Controlled inputs validation और conditional logic आसान बनाते हैं क्योंकि value हमेशा state में available होती है।
- Uncontrolled inputs बहुत basic forms या non-React code के साथ integrate करने के लिए simpler हैं।
कोई React-version restriction नहीं — refs और controlled inputs सभी supported React versions में identically काम करते हैं।
Chapter Quiz — Complete all 8 topics to unlock
0/8 topics done
Complete these topics first: