React में Rendering कैसे होती है
In this page:
Re-render क्या Trigger करता है
एक component फिर से render होता है जब इसका अपना state बदलता है, जब इसे parent से नए props मिलते हैं, या जब इसका parent किसी भी वजह से re-render होता है (default रूप से, भले ही उस child के props असल में बदले हो या नहीं)।
उदाहरण: What Triggers a Re-render
<!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 Child() {
console.log('Child rendered');
return <p>I am the child.</p>;
}
function Parent() {
const [count, setCount] = React.useState(0);
return (
<div>
<button onClick={() => setCount(count + 1)}>Parent count: {count}</button>
<Child />
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<Parent />);
</script>
</body>
</html>
Render Phase vs Commit Phase
React rendering दो phases में होता है: render phase calculate करता है कि क्या बदलना चाहिए (आपके component functions को call करते हुए), और commit phase असल में उन changes को असली DOM पर apply करता है।
उदाहरण: Render Phase vs Commit Phase
<!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 PhaseNote() {
const [n, setN] = React.useState(0);
return <button onClick={() => setN(n + 1)}>Render calculates, commit applies: {n}</button>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<PhaseNote />);
</script>
</body>
</html>
Multiple State Updates को Batch करना
जब एक ही event handler के अंदर कई state updates होते हैं, React उन्हें प्रति update एक बार render करने के बजाय एक single re-render में group करता है।
यह batching UI को fast और consistent रखता है, क्योंकि एक component कभी user को half-updated in-between state नहीं दिखाता।
उदाहरण: Batching Multiple State 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 Toggler() {
const [a, setA] = React.useState(false);
const [b, setB] = React.useState(false);
function handleClick() {
setA(true);
setB(true);
}
return (
<div>
<button onClick={handleClick}>Set Both</button>
<p>A: {String(a)}, B: {String(b)}</p>
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<Toggler />);
</script>
</body>
</html>
- यह मान लेना कि हर state update एक immediate, separate render trigger करता है -- React अक्सर कई updates को एक में batch करता है।
- Render phase (क्या बदलना चाहिए calculate करना) को commit phase (असल में DOM update करना) के साथ confuse करना।
- इसके setter को call करने के ठीक बाद एक state variable पढ़ना और उसी function call में नई value की उम्मीद करना।
- एक re-render तब होता है जब एक component का state या props बदलते हैं।
- React पहले calculate करता है कि क्या बदला (render phase) असली DOM को touch करने से पहले (commit phase)।
- एक ही event handler के अंदर कई state updates एक single re-render में batched होते हैं।
- इस cycle को समझना यह explain करने में help करता है कि state updates mid-function instantly apply क्यों नहीं होते।
कोई browser-specific restrictions नहीं -- हर React version में available एक internal React rendering behavior, React 18 से expanded automatic batching के साथ।
Chapter Quiz — Complete all 10 topics to unlock
0/10 topics done
Complete these topics first: