useEffect का परिचय
useEffect(() => {
// side-effect code runs after render
});
What useEffect Is For
useEffect एक component को ऐसा code run करने देता है जो directly render करने के बारे में नहीं है, जैसे data fetch करना या एक subscription setup करना। React यह code component render होने और DOM असल में update होने के बाद run करता है।
उदाहरण: What useEffect Is For
<!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 Logger() {
const [count, setCount] = React.useState(0);
React.useEffect(() => {
console.log("Rendered! Count is", count);
});
return <button onClick={() => setCount(count + 1)}>{count}</button>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<Logger />);
</script>
</body>
</html>
Basic useEffect Syntax
useEffect अपने पहले argument के रूप में एक function लेता है, जिसे React render के बाद call करता है। बिना second argument के, यह function हर single render के बाद run होता है -- बिल्कुल पहले वाले render सहित।
उदाहरण: Basic useEffect Syntax
<!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 WindowSizeLogger() {
React.useEffect(() => {
console.log("Window width:", window.innerWidth);
});
return <p>Check the console after any state change.</p>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<WindowSizeLogger />);
</script>
</body>
</html>
Effects Run After the DOM Updates
Render के दौरान directly की गई calculations के विपरीत, effect code तब run होता है जब React ने असली DOM को latest render से match करने के लिए already update कर दिया हो। इसका मतलब है एक effect safely current DOM पढ़ सकता है, जैसे एक element का size measure करना।
उदाहरण: Effects Run After the DOM Updates
<!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 MountMessage() {
const [mounted, setMounted] = React.useState(false);
React.useEffect(() => {
setMounted(true);
});
return <p>{mounted ? "Mounted and effect ran!" : "Rendering..."}</p>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<MountMessage />);
</script>
</body>
</html>
- Dependency array को पूरी तरह भूल जाना, जिससे effect हर single render के बाद run होता है।
- Effect function को खुद directly
asyncबनाने की कोशिश करना, जो supported नहीं है। - यह उम्मीद करना कि useEffect browser paint करने से पहले run होगा -- यह बाद में run होता है।
- useEffect आपको rendering के response में code run करने देता है, React के अपने rendering से बाहर की चीज़ों के लिए।
- यह component render होने और DOM update होने के बाद run होता है।
- Common uses में data fetching, subscriptions, और manually DOM बदलना शामिल है।
- यह एक function और dependencies का एक optional array लेता है।
React 16.8 से available है, जब Hooks introduce हुए थे।
Chapter Quiz — Complete all 12 topics to unlock
0/12 topics done
Complete these topics first: