React Academy · पाठ

संदर्भ चयनकर्ता पैटर्न

एक सरल चयनकर्ता हुक लागू करें, जो संदर्भ के किसी हिस्से में बदलाव होने पर ही री-रेंडर करे।

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

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

स्वागत है

इस पाठ में आप ऐसा संदर्भ चयनकर्ता हुक बनाएँगे जो किसी घटक को संदर्भ स्थिति के केवल एक अंश की सदस्यता देता है और संदर्भ के असंबंधित भागों के बदलने पर पुनः-रेंडर रोकता है।

चयनकर्ता की समस्या

संदर्भ का कोई भी भाग बदलने पर useContext पुनः-रेंडर करता है। यदि किसी घटक को केवल उपयोगकर्ता का नाम चाहिए, लेकिन संदर्भ में सूचनाओं की सूची भी है, तो सूचना जोड़ने पर नाम दिखाने वाला घटक अनावश्यक रूप से पुनः-रेंडर होता है।

चयनकर्ता क्या है

चयनकर्ता एक ऐसा फ़ंक्शन है जो किसी बड़े स्थिति ऑब्जेक्ट से स्थिति का विशिष्ट भाग निकालता है: `state => state.user.name`। चयनकर्ता हुक संदर्भ की सदस्यता लेता है, लेकिन चयनित मान बदलने पर ही पुनः-रेंडर करवाता है।

सरल चयनकर्ता हुक

ऐसा useSelector हुक बनाएँ जो संदर्भ पढ़े और चयनकर्ता के परिणाम के आधार पर उसे useMemo में लपेटे। घटक केवल चयनित मान बदलने पर पुनः-रेंडर होगा।
function useAppSelector(selector) {
  const state = useContext(AppCtx);
  return useMemo(() => selector(state), [state, selector]);
}

// Consumer only re-renders when user.name changes
const name = useAppSelector(s => s.user.name);

उथली समानता जाँच

चयनकर्ता के साथ useMemo का उपयोग करने पर भी यदि चयनकर्ता हर कॉल में नया ऑब्जेक्ट या सारणी संदर्भ लौटाता है, तो पुनः-रेंडर होता रहेगा, जैसे `s => s.items.filter(...)`। सामग्री समान होने पर पुनः-रेंडर छोड़ने के लिए उथली समानता की तुलना का उपयोग करें।
import { useRef } from 'react';

function useSelector(selector) {
  const state = useContext(AppCtx);
  const selected = selector(state);
  const ref = useRef(selected);
  if (!shallowEqual(ref.current, selected)) {
    ref.current = selected;
  }
  return ref.current;
}

use-context-selector लाइब्रेरी

उत्पादन में उपयोग के लिए **use-context-selector** लाइब्रेरी एक useContextSelector हुक देती है, जिसमें कुशल सदस्यता और समानता जाँच होती है — बाहरी स्थिति प्रबंधकों की आवश्यकता के बिना।
import { useContextSelector } from 'use-context-selector';

const name = useContextSelector(AppCtx, s => s.user.name);

चयनकर्ता-आधारित समाधान के रूप में Zustand

Zustand के `useStore(selector)` हुक में पहले से चयनकर्ता समर्थन और उथली समानता की सुविधा होती है, जिससे यह बड़े स्थिति वृक्षों के लिए स्वाभाविक विकल्प बनता है, जहाँ सूक्ष्म स्तर की सदस्यताएँ महत्वपूर्ण होती हैं।
const name = useAppStore(state => state.user.name);

चयनकर्ता कब आवश्यकता से अधिक हैं

यदि संदर्भ कभी-कभार अपडेट होते हैं और उपभोक्ताओं का पुनः-रेंडर सस्ता है, तो चयनकर्ता बिना किसी मापने योग्य लाभ के जटिलता बढ़ाते हैं। पहले प्रोफ़ाइल करें — हमेशा प्रमाण के आधार पर अनुकूलन करें।

चयनकर्ता फ़ंक्शन का मेमोकरण

यदि आप घटक के मुख्य भाग में चयनकर्ता सीधे बनाते हैं, तो हर रेंडर पर उसका नया फ़ंक्शन संदर्भ बनता है, जिससे मेमोकरण टूट सकता है। चयनकर्ताओं को घटक के बाहर परिभाषित करें या useCallback का उपयोग करें।
// Outside component — stable reference
const selectName = s => s.user.name;

function Profile() {
  const name = useAppSelector(selectName);
  return <p>{name}</p>;
}

व्युत्पन्न चयनकर्ता

एक चयनकर्ता को दूसरे के अंदर कॉल करके चयनकर्ताओं को संयोजित करें। व्युत्पन्न चयनकर्ता आधार चयनकर्ताओं से मानों की गणना करते हैं और व्यावसायिक तर्क को घटकों से बाहर रखते हैं।
const selectFullName = s => s.user.firstName + ' ' + s.user.lastName;

त्वरित जाँच

useContextSelector या useMemo के साथ उपयोग करते समय चयनकर्ता फ़ंक्शन को घटक के मुख्य भाग के बाहर क्यों परिभाषित करना चाहिए?

पुनरावलोकन

चयनकर्ता संदर्भ स्थिति का एक अंश निकालते हैं और असंबंधित भागों के बदलने पर पुनः-रेंडर रोकते हैं। स्थिर संदर्भों के लिए चयनकर्ताओं को घटकों के बाहर परिभाषित करें। उत्पादन-स्तर के चयनकर्ता समर्थन के लिए use-context-selector या Zustand का उपयोग करें।

अगला पाठ

अगला पाठ: **Context का उपयोग कब न करें** — आप सीखेंगे कि कब प्रॉप पास करना, संयोजन या स्थिति प्रबंधक Context से बेहतर विकल्प होता है।
शुरुआत निःशुल्क

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

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

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

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

क्या “संदर्भ चयनकर्ता पैटर्न” पाठ निःशुल्क है?

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

“संदर्भ चयनकर्ता पैटर्न” में मैं क्या सीखूँगा?

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

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

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

“संदर्भ चयनकर्ता पैटर्न” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. री-रेंडर सीमित करने के लिए संदर्भों को विभाजित करना
  2. useMemo से संदर्भ मानों को मेमोाइज़ करना
  3. संदर्भ चयनकर्ता पैटर्न
  4. संदर्भ का उपयोग कब न करें
← React Academy पर वापस जाएँ