TechIT TECH IN HINDI
Banti Kevat — Founder TechIT
Founder & Author

Banti Kevat

M.Tech AI Student · Full-Stack Developer · Ujjain, MP 🇮🇳

React, MERN aur AI ko simple Hindi mein sikhaata hoon. Real projects banaye hain — Seva Setu (hyperlocal services) aur UjjainTemple (devotional web). Seekha hua sach mein kaam aata hai. 🚀

0+ Articles
0+ Categories
0% Free
हिंदीEasy Language
✅ Free Forever 🇮🇳 Tech in Hindi 👨‍💻 Real Developer 🚫 No Spam 🎓 M.Tech AI
React me Composition Pattern Kya Hai (Beginner Guide in Hindi)
Coding info

React me Composition Pattern Kya Hai (Beginner Guide in Hindi)

TechIT — Banti Kevat जुलाई 03, 2026 5 min read
Listen to this article (Hindi/English)
React me Composition Pattern Kya Hai (Beginner Guide in Hindi)
React me Composition Pattern kya hai? Is complete Hindi guide me seekhein kaise components ko reuse karke clean code likhte hain.

दोस्तों, क्या आपके साथ कभी ऐसा हुआ है कि आपने एक ReactJS प्रोजेक्ट बनाना शुरू किया, और कुछ ही दिनों में आपके React components इतने उलझ गए कि एक छोटा सा बदलाव करने पर भी पूरा कोड बिखरने लगा? जब हम शुरुआत करते हैं, तो हम हर छोटी-बड़ी चीज़ के लिए नए Props बनाना शुरू कर देते हैं। नतीजा? भयंकर Prop Drilling और एक ऐसा कोडबेस जिसे मैनेज करना सिरदर्द बन जाता है।

एक सीनियर डेवलपर के तौर पर, मैं आपको अपने सालों के अनुभव से बता रहा हूँ कि इस समस्या का सबसे बेहतरीन समाधान है: React Composition Pattern। आज हम और आप साथ मिलकर इस पैटर्न को इतने आसान शब्दों में समझेंगे कि इसके बाद आपको कभी भी कॉम्प्लेक्स UI बनाने में डर नहीं लगेगा। चलिए, एक कप चाय लेते हैं और कोडिंग की इस जादुई दुनिया में गोता लगाते हैं!

⚡ Quick Answer: React me Composition Pattern ek design pattern hai jahan hum chote, independent aur flexible components ko aapas me combine (compose) karke ek bada UI banate hain. Yeh pattern React ke core philosophy "Props and Children" par kaam karta hai, jisse custom components ko reusable banaya jata hai bina extra Props pass kiye.
---

React Composition Pattern क्या है और इसकी ज़रूरत क्यों पड़ी?

जब हम React में काम करते हैं, तो हमारा मुख्य लक्ष्य होता है ऐसे कॉम्पोनेंट्स बनाना जिन्हें हम बार-बार इस्तेमाल कर सकें (Reusability)। लेकिन अक्सर डेवलपर्स एक ही कॉम्पोनेंट में इतने सारे Props डाल देते हैं कि वह कॉम्पोनेंट कस्टमाइज़ होने के बजाय और जटिल हो जाता है। इसी समस्या को सुलझाने के लिए Composition Pattern का जन्म हुआ।

इसे एक आसान उदाहरण से समझते हैं। मान लीजिए आपके पास एक Card कॉम्पोनेंट है। अब आपको तीन अलग-अलग तरह के कार्ड्स चाहिए:

  • एक Profile Card जिसमें यूजर की इमेज और नाम हो।
  • एक Product Card जिसमें प्रोडक्ट का नाम, कीमत और "Buy Now" बटन हो।
  • एक Text Card जिसमें सिर्फ कुछ हेडलाइन्स और पैराग्राफ हो।

अगर आप पारंपरिक तरीका (Configuration-driven approach) अपनाएंगे, तो आप एक ही Card कॉम्पोनेंट के अंदर showButton, showImage, buttonText, price जैसे दर्जनों Props पास करेंगे। यह बहुत ही गंदा तरीका है। इसके विपरीत, Composition Pattern हमें छोटे-छोटे स्वतंत्र ब्लॉक्स बनाने की आज़ादी देता है जिन्हें हम लेगो ब्लॉक्स (Lego Blocks) की तरह जोड़ सकते हैं।

🏗️ Composition Pattern Flow Diagram
Card Container
+
CardHeader / Image
+
CardBody / Actions
Fully Customized Card
Diagram: Kaise chote standalone components milkar ek custom UI tayar karte hain bina Prop Drilling ke.
---

Inheritance vs Composition: दोनों में क्या अंतर है?

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) की दुनिया से आने वाले डेवलपर्स अक्सर सोचते हैं कि क्या हमें React में Inheritance (विरासत) का इस्तेमाल करना चाहिए? इसका सीधा और स्पष्ट जवाब है—नहीं!

खुद React की कोर टीम का कहना है कि वे Facebook में हज़ारों कॉम्पोनेंट्स का इस्तेमाल करते हैं, लेकिन उन्हें कभी भी ऐसी स्थिति का सामना नहीं करना पड़ा जहां उन्हें Inheritance का इस्तेमाल करना पड़े। चलिए, इन दोनों के अंतर को एक तुलना तालिका के जरिए समझते हैं:

Feature Inheritance (OOP approach) Composition (React approach)
रिश्ता (Relationship) "Is-A" रिश्ता (जैसे: Dog is an Animal) "Has-A" रिश्ता (जैसे: Card has a Button)
लचीलापन (Flexibility) बहुत कम। पैरेंट क्लास बदलने पर सब कुछ प्रभावित होता है। अत्यधिक। आप आसानी से किसी भी चाइल्ड को बदल सकते हैं।
Prop Drilling काफी बढ़ जाता है क्योंकि डेटा को हर स्तर पर पास करना पड़ता है। लगभग खत्म हो जाता है क्योंकि पैरेंट सीधे चाइल्ड को रेंडर करता है।
Reusability कठिन और सीमित होती है। बेहद आसान। कहीं भी, कभी भी इस्तेमाल करें।
---

React Composition Pattern कैसे काम करता है? (Step-by-Step Code Guide)

अब समय आ गया है अपने हाथों को कोडिंग से रंगने का। हम एक रियल-वर्ल्ड उदाहरण लेंगे—एक Modal (पॉप-अप) कॉम्पोनेंट। हम देखेंगे कि कैसे एक ही बेसिक Modal स्ट्रक्चर का उपयोग करके हम अलग-अलग तरह के डायलॉग बॉक्स (जैसे Info Modal, Danger Alert, और Form Modal) बना सकते हैं, बिना बार-बार कोड लिखे।

Step 1: बिना Composition का बुरा तरीका (The Bad Way)

पहले देखिए कि अक्सर नौसिखिए डेवलपर्स इसे कैसे लिखते हैं। वे एक ही कॉम्पोनेंट में सब कुछ भर देते हैं:

// ❌ BAD PRACTICE: Ganda aur inflexible tareeqa
import React from 'react';

function BadModal({ isOpen, title, bodyText, showFooter, confirmText, onConfirm, type }) {
  if (!isOpen) return null;

  return (
    <div className="modal-overlay">
      <div className="modal-container">
        <div className={`modal-header ${type === 'danger' ? 'bg-red' : 'bg-blue'}`}>
          <h2>{title}</h2>
        </div>
        <div className="modal-body">
          <p>{bodyText}</p>
        </div>
        {showFooter && (
          <div className="modal-footer">
            <button onClick={onConfirm}>{confirmText || 'Close'}</button>
          </div>
        )}
      </div>
    </div>
  );
}

इस कोड में समस्या क्या है? अगर कल को मुझे इस Modal के अंदर एक इनपुट फॉर्म रेंडर करना पड़े, या कोई वीडियो प्लेयर दिखाना पड़े, तो मुझे इस BadModal के अंदर जाकर कोड को बदलना होगा और नए Props जोड़ने होंगे। यह कोड स्केलेबल नहीं है!

Step 2: Composition Pattern का सही तरीका (The Good Way)

अब हम इसी समस्या को children prop का उपयोग करके हल करेंगे। हम अपने कॉम्पोनेंट को छोटे-छोटे टुकड़ों में तोड़ देंगे। इस प्रक्रिया को विस्तार से समझने के लिए आप React Children API Documentation भी पढ़ सकते हैं।

// App.js (Production Ready Code)
import React, { useState } from 'react';

// 1. Base Modal Component जो सिर्फ ढांचा (Shell) प्रदान करता है
function Modal({ isOpen, onClose, children }) {
  if (!isOpen) return null;

  return (
    <div style={overlayStyle} onClick={onClose}>
      <div style={modalContentStyle} onClick={(e) => e.stopPropagation()}>
        {children}
      </div>
    </div>
  );
}

// 2. Sub-components जो Modal के हिस्सों को दर्शाते हैं
function ModalHeader({ children, bg = '#2563eb' }) {
  return (
    <div style={{ ...headerStyle, backgroundColor: bg }}>
      {children}
    </div>
  );
}

function ModalBody({ children }) {
  return (
    <div style={bodyStyle}>
      {children}
    </div>
  );
}

function ModalFooter({ children }) {
  return (
    <div style={footerStyle}>
      {children}
    </div>
  );
}

// Styling Objects (ताकि आपको रन करने में कोई समस्या न हो)
const overlayStyle = {
  position: 'fixed',
  top: 0,
  left: 0,
  right: 0,
  bottom: 0,
  backgroundColor: 'rgba(0, 0, 0, 0.7)',
  display: 'flex',
  justifyContent: 'center',
  alignItems: 'center',
  zIndex: 1000,
};

const modalContentStyle = {
  background: '#fff',
  borderRadius: '8px',
  width: '500px',
  overflow: 'hidden',
  boxShadow: '0 5px 15px rgba(0,0,0,0.3)',
};

const headerStyle = {
  padding: '16px',
  color: '#fff',
  fontSize: '1.25rem',
  fontWeight: 'bold',
};

const bodyStyle = {
  padding: '20px',
  color: '#333',
  fontSize: '1rem',
  lineHeight: '1.5',
};

const footerStyle = {
  padding: '12px 20px',
  background: '#f3f4f6',
  display: 'flex',
  justifyContent: 'flex-end',
  gap: '10px',
  borderTop: '1px solid #e5e7eb',
};

Step 3: अब इस Composed Modal का इस्तेमाल कैसे करें?

देखिए जादू! अब हम इस बेसिक Modal से किसी भी तरह का Modal सेकंडों में बना सकते हैं, बिना इसके कोर लॉजिक को छेड़े।

// Main Component
export default function App() {
  const [isAlertOpen, setIsAlertOpen] = useState(false);
  const [isFormOpen, setIsFormOpen] = useState(false);
  const [email, setEmail] = useState('');

  const handleFormSubmit = (e) => {
    e.preventDefault();
    alert(`Form submitted with Email: ${email}`);
    setIsFormOpen(false);
  };

  return (
    <div style={{ padding: '40px', fontFamily: 'sans-serif', textAlign: 'center' }}>
      <h1>React Composition Pattern Demo</h1>
      <p>सीनियर डेवलपर की तरह कोड कंपोज़ करना सीखें!</p>

      <div style={{ display: 'flex', gap: '20px', justifyContent: 'center', marginTop: '20px' }}>
        <button 
          style={{ padding: '10px 20px', background: '#dc2626', color: '#fff', border: 'none', borderRadius: '5px', cursor: 'pointer' }}
          onClick={() => setIsAlertOpen(true)}
        >
          Open Danger Alert
        </button>

        <button 
          style={{ padding: '10px 20px', background: '#16a34a', color: '#fff', border: 'none', borderRadius: '5px', cursor: 'pointer' }}
          onClick={() => setIsFormOpen(true)}
        >
          Open Form Modal
        </button>
      </div>

      {/* EXAMPLE 1: Danger Alert Modal */}
      <Modal isOpen={isAlertOpen} onClose={() => setIsAlertOpen(false)}>
        <ModalHeader bg="#dc2626">
          ⚠️ Danger: Action Required!
        </ModalHeader>
        <ModalBody>
          Kya aap sach me apna account delete karna chahte hain? Yeh action irreversible hai.
        </ModalBody>
        <ModalFooter>
          <button onClick={() => setIsAlertOpen(false)} style={{ padding: '6px 12px', border: '1px solid #ccc', borderRadius: '4px' }}>
            Cancel
          </button>
          <button onClick={() => { alert('Deleted!'); setIsAlertOpen(false); }} style={{ padding: '6px 12px', background: '#dc2626', color: '#fff', border: 'none', borderRadius: '4px' }}>
            Yes, Delete
          </button>
        </ModalFooter>
      </Modal>

      {/* EXAMPLE 2: Dynamic Form Modal (Zero configurations required in base Modal!) */}
      <Modal isOpen={isFormOpen} onClose={() => setIsFormOpen(false)}>
        <ModalHeader bg="#16a34a">
          📧 Newsletter Subscription
        </ModalHeader>
        <form onSubmit={handleFormSubmit}>
          <ModalBody>
            <p>Humare informative articles direct inbox me paane ke liye subscribe karein.</p>
            <input 
              type="email" 
              placeholder="Enter your email" 
              value={email}
              onChange={(e) => setEmail(e.target.value)}
              required
              style={{ width: '100%', padding: '10px', marginTop: '10px', boxSizing: 'border-box', borderRadius: '4px', border: '1px solid #ccc' }}
            />
          </ModalBody>
          <ModalFooter>
            <button type="button" onClick={() => setIsFormOpen(false)} style={{ padding: '6px 12px', border: '1px solid #ccc', borderRadius: '4px', marginRight: '8px' }}>
              Close
            </button>
            <button type="submit" style={{ padding: '6px 12px', background: '#16a34a', color: '#fff', border: 'none', borderRadius: '4px' }}>
              Subscribe Now
            </button>
          </ModalFooter>
        </form>
      </Modal>
    </div>
  );
}
---

यह Pattern 'Prop Drilling' की समस्या को कैसे हल करता है?

नए डेवलपर्स के सामने आने वाली सबसे बड़ी समस्याओं में से एक है Prop Drilling। जब हमें पैरेंट कॉम्पोनेंट से किसी बहुत गहरे (Deeply Nested) चाइल्ड कॉम्पोनेंट तक डेटा पहुँचाना होता है, तो हमें बीच के उन सभी कॉम्पोनेंट्स में वह Prop पास करना पड़ता है जिन्हें उस डेटा की कोई ज़रूरत नहीं होती।

ध्यान देने वाली बात ये है कि Composition Pattern हमें इस झंझट से पूरी तरह आज़ादी देता है। क्योंकि हम चाइल्ड कॉम्पोनेंट को सीधे पैरेंट कॉम्पोनेंट के अंदर रेंडर कर रहे होते हैं, इसलिए हम स्टेट (State) को सीधे उसी जगह हैंडल कर सकते हैं जहाँ वह रेंडर हो रहा है। बीच के कॉम्पोनेंट्स को पता भी नहीं चलता कि कौन सा डेटा पास हुआ है।

अगर आपको बहुत बड़े लेवल पर स्टेट्स को शेयर करना है, तो आप ReactJS के Context API का भी सहारा ले सकते हैं, लेकिन छोटी और मध्यम लेवल की कस्टमाइजेशन के लिए Composition ही राजा है।

---

कॉमन गलतियाँ जो डेवलपर्स करते हैं (और उन्हें कैसे सुधारें)

कोडिंग करते समय गलतियाँ होना स्वाभाविक है। चलिए देखते हैं कि Composition Pattern का इस्तेमाल करते समय डेवलपर्स अक्सर कहाँ फंसते हैं और उनके उपाय क्या हैं:

1. "TypeError: children is not a function"

यह error तब आता है जब आप Render Props का इस्तेमाल कर रहे होते हैं लेकिन गलती से एक सामान्य React Element पास कर देते हैं।

समाधान: हमेशा सुनिश्चित करें कि अगर आपका कॉम्पोनेंट बच्चों को एक फंक्शन के रूप में उम्मीद कर रहा है, तो आप उसे वैसे ही इस्तेमाल करें। उदाहरण के लिए:

// ❌ Galat tareeqa
<DataProvider>
  <MyComponent />
</DataProvider>

//  Sahi tareeqa (Render Prop Composition)
<DataProvider>
  {(data) => <MyComponent data={data} />}
</DataProvider>

2. CSS Layout का बिखर जाना

जब हम कॉम्पोनेंट्स को नेस्ट (Nest) करते हैं, तो कभी-कभी पैरेंट के display: flex या grid की वजह से चाइल्ड कॉम्पोनेंट्स का अलाइनमेंट बिगड़ जाता है।

समाधान: हमेशा अपने रैपर (Wrapper) कॉम्पोनेंट्स में स्टाइलिंग फ्लेक्सिबिलिटी रखें। आप पैरेंट से className या style Props को स्वीकार कर सकते हैं और उन्हें कोर डिवीज़न (Divs) पर लागू कर सकते हैं:

function CustomWrapper({ children, className = '' }) {
  return <div className={`default-container ${className}`}>{children}</div>;
}
---

परफॉरमेंस और स्केलेबिलिटी के लिए बेस्ट प्रैक्टिसेज

एक सीनियर डेवलपर के रूप में मेरी सलाह हमेशा यही रहेगी कि सिर्फ सुंदर कोड लिखना काफी नहीं है, कोड की स्पीड और परफॉरमेंस भी बेहतरीन होनी चाहिए। Composition इस्तेमाल करते समय इन बातों का ध्यान रखें:

  • Keep Components Atomic: अपने कॉम्पोनेंट्स को उतना ही छोटा रखें जितना ज़रूरी हो। सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल (Single Responsibility Principle) का पालन करें।
  • Use Memoization Wisely: जब आप अत्यधिक कंपोज़्ड यूआई बनाते हैं, तो कभी-कभी अनचाहे री-रेंडर्स हो सकते हैं। महत्वपूर्ण जगहों पर React.memo या useMemo का उपयोग करें।
  • Keep Context Minimal: कंपोज़िशन और कॉन्टेक्स्ट का तालमेल बेहतरीन है, लेकिन हर छोटी चीज़ के लिए कॉन्टेक्स्ट न बनाएं। जितना हो सके लोकलाइज्ड स्टेट (Localized State) का ही इस्तेमाल करें।
---

तो दोस्तों, आज हमने सीखा कि कैसे React का Composition Pattern हमारे कोडबेस को साफ, लचीला और स्केलेबल बना सकता है। हमने देखा कि कैसे हम पारंपरिक प्रोप-ड्रिलिंग और भारी-भरकम कॉन्फ़िगरेशन वाले कॉम्पोनेंट से बचकर सुव्यवस्थित लेगो-ब्लॉक जैसा आर्किटेक्चर बना सकते हैं।

इस कोड को अपने प्रोजेक्ट्स में आज़माएं और देखें कि आपका डेवलपमेंट एक्सपीरियंस कितना सुगम हो जाता है। अगर कोडिंग करते समय कोई भी समस्या या एरर आए, तो मुझे नीचे कमेंट्स में जरूर बताएं, हम मिलकर उसे सुलझाएंगे!

---

Frequently Asked Questions (FAQs)

Q1: React में Composition और Inheritance में से कौन सा बेहतर है?
React में हमेशा Composition ही बेहतर माना जाता है। React की टीम भी आधिकारिक तौर पर Composition के उपयोग की सलाह देती है क्योंकि यह कोड को अत्यधिक लचीला और रीयूजेबल बनाता है, जबकि Inheritance कोड को आपस में बहुत ज्यादा जकड़ देता है जिससे बदलाव करना मुश्किल हो जाता है।
Q2: Children Prop का क्या काम होता है?
React में special prop "children" हमें एक कॉम्पोनेंट के ओपनिंग और क्लोजिंग टैग्स के बीच की सामग्री (elements, texts ya other components) को सीधे रेंडर करने की अनुमति देता है। यह Composition Pattern का मुख्य आधार है।
Q3: क्या Composition Pattern से Prop Drilling खत्म हो जाती है?
हाँ, काफी हद तक! चूंकि कंपोज़िशन में आप चाइल्ड कॉम्पोनेंट को सीधे उस पैरेंट कॉम्पोनेंट में लिख सकते हैं जहाँ उसका डेटा उपलब्ध है, इसलिए आपको बीच के कॉम्पोनेंट्स के माध्यम से अनावश्यक रूप से Props पास करने की आवश्यकता नहीं होती।
Q4: क्या हम एक से अधिक Children Props का उपयोग कर सकते हैं?
हाँ, बिल्कुल! आप सामान्य Props का उपयोग करके JSX एलिमेंट्स को पास कर सकते हैं। इन्हें अक्सर 'Slots' कहा जाता है। उदाहरण के लिए, आप "leftIcon" और "rightIcon" नाम के Props में अलग-अलग React components पास कर सकते हैं।
Q5: क्या Composition Pattern का उपयोग करने से परफॉरमेंस पर कोई असर पड़ता है?
सकारात्मक रूप से हाँ! यह अनावश्यक री-रेंडरिंग को कम करता है क्योंकि स्टेट्स केवल वहीं सीमित रहती हैं जहाँ उनकी आवश्यकता होती है। लेकिन बहुत अधिक गहराई तक नेस्टिंग करने से बचने की सलाह दी जाती है।

Kya yeh article helpful tha?

B
Banti KevatFounder

TechIT ka founder · M.Tech AI student · Ujjain, MP. React, AI aur coding ko simple Hindi mein sikhaata hoon taaki har student aage badh sake. 🇮🇳

Advertisement

Related ArticlesAapko yeh bhi pasand aayega

Loading...

टिप्पणियाँ

Hum aapke experience ko behtar banane ke liye cookies use karte hain. Site use karke aap hamari Privacy Policy se sehmat hain.