React Academy · पाठ

शुद्ध घटक और रेंडर में साइड इफ़ेक्ट से बचाव

ऐसे render फ़ंक्शन लिखें जिनमें बदलाव और बाहरी रीड न हों

पाठ 2, कुल 4 में से13 चरण

शुद्ध घटक और रेंडर में साइड इफ़ेक्ट से बचाव, CoddyKit पर React Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह React Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। React Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

स्वागत है

इस पाठ में आप जानेंगे कि React में शुद्ध कंपोनेंट का क्या अर्थ है, रेंडर फ़ंक्शन में साइड इफ़ेक्ट से मुक्त रहना क्यों आवश्यक है और सामान्य शुद्धता उल्लंघनों को कैसे पहचानकर ठीक किया जाए।

शुद्ध फ़ंक्शन क्या है

शुद्ध फ़ंक्शन समान इनपुट के लिए हमेशा समान आउटपुट लौटाता है और ऐसा कोई प्रत्यक्ष साइड इफ़ेक्ट उत्पन्न नहीं करता जिसे देखा जा सके। React अपेक्षा करता है कि आपका कंपोनेंट फ़ंक्शन शुद्ध हो: समान प्रॉप्स और स्टेट मिलने पर उसे हमेशा समान JSX लौटाना चाहिए।

React में शुद्धता क्यों महत्वपूर्ण है

React आपके कंपोनेंट को कई बार कॉल कर सकता है (StrictMode, समवर्ती सुविधाएँ, सर्वर रेंडरिंग)। यदि आपके रेंडर में एपीआई कॉल, DOM बदलाव या वैश्विक वेरिएबल लिखने जैसे साइड इफ़ेक्ट हैं, तो वे अनिश्चित रूप से कई बार चलेंगे।

सामान्य अशुद्धता: बाहरी स्टेट बदलना

रेंडर के दौरान कंपोनेंट के बाहर परिभाषित वेरिएबल को कभी न बदलें। इवेंट हैंडलर या useEffect के अंदर बदलाव करना ठीक है, लेकिन रेंडर के समय नहीं।
let totalRenders = 0; // external
function Counter() {
  totalRenders++; // BAD: side effect in render
  return <p>{totalRenders}</p>;
}

सामान्य अशुद्धता: प्रॉप्स बदलना

कंपोनेंट के अंदर प्रॉप्स ऑब्जेक्ट को कभी न बदलें। प्रॉप्स केवल पढ़ने के लिए होते हैं। यदि आपको बदला हुआ संस्करण चाहिए, तो नया वेरिएबल बनाएँ।
// Bad
function Badge({ user }) {
  user.name = user.name.toUpperCase(); // mutates prop!
  return <p>{user.name}</p>;
}

// Good
function Badge({ user }) {
  const displayName = user.name.toUpperCase();
  return <p>{displayName}</p>;
}

सामान्य अशुद्धता: रेंडर में यादृच्छिक मान या तारीख का उपयोग

रेंडर में सीधे `Math.random()` या `Date.now()` कॉल करने पर हर कॉल में अलग मान मिलता है, जिससे शुद्धता भंग होती है। इन्हें स्टेट इनिशियलाइज़र या useEffect में ले जाएँ।
// Bad
function Token() {
  const id = Math.random(); // different every render!
  return <p>{id}</p>;
}

// Good
function Token() {
  const [id] = useState(() => Math.random());
  return <p>{id}</p>;
}

एपीआई कॉल useEffect में रखें

कंपोनेंट फ़ंक्शन बॉडी के अंदर सीधे डेटा प्राप्त करना (useEffect में नहीं) अशुद्धता है — इससे हर रेंडर पर अनुरोध चलता है। डेटा-प्राप्ति अनुरोधों को हमेशा उचित निर्भरताओं वाले useEffect में ले जाएँ।
// Bad
function Profile({ id }) {
  fetch('/api/user/' + id); // runs on every render!
  return <div />;
}

// Good
useEffect(() => {
  fetch('/api/user/' + id).then(/*...*/);
}, [id]);

स्थानीय बदलाव ठीक हैं

उसी रेंडर कॉल के *अंदर* बनाए गए ऑब्जेक्ट या सारणियाँ बनाना और बदलना पूरी तरह ठीक है — कोई अन्य इन्हें देख नहीं सकता। इसे स्थानीय बदलाव कहते हैं।
function List({ items }) {
  const sorted = [...items]; // new array
  sorted.sort();             // mutating a local copy: OK
  return sorted.map(i => <li key={i}>{i}</li>);
}

अशुद्धताएँ खोजने के लिए सख्त मोड का उपयोग

React StrictMode डेवलपमेंट में आपके कंपोनेंट को दो बार कॉल करता है। यदि दोनों कॉल के बीच आपका यूआई असंगत हो या आपको दोहरे साइड इफ़ेक्ट दिखाई दें, तो आपका रेंडर अशुद्ध है। जब तक दोहरा आह्वान हानिरहित न हो जाए, तब तक अशुद्धता ठीक करें।

शुद्ध कंपोनेंट और React.memo

जब कोई कंपोनेंट शुद्ध होता है (समान प्रॉप्स → समान आउटपुट), तो उसे `React.memo` से घेरने पर React समझता है कि प्रॉप्स न बदलने पर वह दोबारा रेंडर करना छोड़ सकता है, जिससे प्रदर्शन बेहतर होता है।
const Pure = React.memo(function Pure({ value }) {
  return <p>{value}</p>;
});

त्वरित जाँच

निम्नलिखित में से कौन-सा साइड इफ़ेक्ट React कंपोनेंट के रेंडर फ़ंक्शन के अंदर सीधे करना स्वीकार्य है?

पुनरावलोकन

शुद्ध कंपोनेंट समान इनपुट के लिए हमेशा समान JSX लौटाते हैं। रेंडर में प्रॉप्स या बाहरी वेरिएबल बदलने से बचें, साइड इफ़ेक्ट के लिए useEffect का उपयोग करें और उल्लंघन पकड़ने के लिए StrictMode पर भरोसा करें।

अगला पाठ

अगला पाठ: **कुंजी और रेफ़रेंस की सर्वोत्तम पद्धतियाँ** — आप स्थिर कुंजियों का सही उपयोग करेंगे, इंडेक्स को कुंजी बनाने की समस्या से बचेंगे और कॉलबैक रेफ़रेंस के साथ काम करेंगे।
शुरुआत निःशुल्क

एआई शिक्षक के साथ React सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
88
पाठ
324

अक्सर पूछे जाने वाले प्रश्न

क्या “शुद्ध घटक और रेंडर में साइड इफ़ेक्ट से बचाव” पाठ निःशुल्क है?

हाँ—“शुद्ध घटक और रेंडर में साइड इफ़ेक्ट से बचाव” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और React Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। React Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“शुद्ध घटक और रेंडर में साइड इफ़ेक्ट से बचाव” में मैं क्या सीखूँगा?

ऐसे render फ़ंक्शन लिखें जिनमें बदलाव और बाहरी रीड न हों आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ React Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या React Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर React Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“शुद्ध घटक और रेंडर में साइड इफ़ेक्ट से बचाव” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस React Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर React Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. StrictMode क्या करता है
  2. शुद्ध घटक और रेंडर में साइड इफ़ेक्ट से बचाव
  3. Key और Ref के सर्वोत्तम अभ्यास
  4. फ़ोल्डर संरचना और नामकरण परंपराएँ
← React Academy पर वापस जाएँ