Component Composition क्या है
In this page:
function Parent() {
return (
<Wrapper>
<ChildA />
<ChildB prop={value} />
</Wrapper>
);
}
Components को एक साथ Compose करना
एक component अपने own JSX के अंदर दूसरे components render कर सकता है, बिल्कुल वैसे ही जैसे यह एक <div> या <p> render करता। यह आपको एक page को छोटे, well-defined pieces असेंबल करके बनाने देता है -- एक Header, एक Sidebar, एक Footer -- एक बड़े App component में।
Header या UserCard, composition को follow करना आसान रखने के लिए।उदाहरण: Composing Components Together
<!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 Header() {
return <header><h1>My Site</h1></header>;
}
function Footer() {
return <footer><p>© 2024</p></footer>;
}
function App() {
return (
<div>
<Header />
<p>Main content goes here.</p>
<Footer />
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
Inheritance की तुलना में Composition
React components के बीच code reuse करने के लिए inheritance (एक base class extend करना) की तुलना में composition (components combine करना) को strongly favor करता है।
एक component की subclass बनाने के बजाय, आप props और children pass करते हैं एक shared component का behavior configure करने के लिए।
उदाहरण: Composition Over Inheritance
<!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 Dialog({ title, children }) {
return (
<div style={{border: "1px solid #333", padding: "10px"}}>
<h3>{title}</h3>
{children}
</div>
);
}
function App() {
return <Dialog title="Welcome"><p>This dialog is composed, not inherited.</p></Dialog>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
Multiple Levels Deep Composing करना
Composition एक level तक सीमित नहीं है -- एक composed component खुद दूसरे composed components से बना हो सकता है, एक tree बनाते हुए। यह mirror करता है कि असली applications कैसे structured होते हैं: एक Page में Sections होते हैं, जिनमें Cards होते हैं, जिनमें और छोटे pieces होते हैं।
उदाहरण: Composing Multiple Levels Deep
<!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 Icon({ symbol }) { return <span>{symbol}</span>; }
function IconButton({ symbol, label }) {
return <button><Icon symbol={symbol} /> {label}</button>;
}
function Toolbar() {
return <div><IconButton symbol="+" label="Add" /><IconButton symbol="-" label="Remove" /></div>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<Toolbar />);
</script>
</body>
</html>
- इसे छोटे, composed pieces में split करने के बजाय सब कुछ एक giant component में cram करने की कोशिश करना।
- एक shared, composed piece extract करने के बजाय components भर में markup duplicate करना।
- trivially simple UI को बहुत ज़्यादा tiny components में over-composing करना, unnecessary complexity add करते हुए।
- Composition का मतलब है simpler components को एक साथ combine करके complex UI बनाना।
- Components बिल्कुल HTML elements जैसे एक-दूसरे के अंदर nested हो सकते हैं।
- Composition एक बड़े component की तुलना में छोटे, focused components को combine करना favor करता है।
- यह primary तरीका है जिससे React code reuse को encourage करता है, inheritance के opposite के रूप में।
कोई browser-specific restrictions नहीं -- composition एक core React design pattern है।
Chapter Quiz — Complete all 11 topics to unlock
0/11 topics done
Complete these topics first: