Reusable Component Patterns बनाना
In this page:
function ReusableComponent({ variant, children }) {
return <element className={variant}>{children}</element>;
}
<ReusableComponent variant="value">content</ReusableComponent>
Reuse Opportunities Identify करना
जब आप notice करते हैं कि same JSX pattern कई जगहों पर सिर्फ छोटे differences के साथ दिख रहा है, यह एक sign है कि इसे एक reusable component बनना चाहिए।
इसे एक बार extract करना और differences को props के रूप में pass करना everywhere same markup duplicate करने से बचाता है।
उदाहरण: Identifying Reuse Opportunities
<!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 Badge({ label, color }) {
return <span style={{background: color, padding: "2px 8px", borderRadius: "4px"}}>{label}</span>;
}
function App() {
return (
<div>
<Badge label="New" color="lightgreen" />
<Badge label="Sale" color="orange" />
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
Props के साथ Parameterize करना
एक component को genuinely reusable बनाने के लिए, identify करें कि उसके use cases के बीच क्या varies होता है और उन्हें props में बदलें। यह component की internal structure fixed और consistent रखता है जबकि हर usage को exactly वह customize करने देता है जिसकी उसे ज़रूरत है।
उदाहरण: Parameterizing with Props
<!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 Alert({ message, type }) {
const colors = { error: "red", success: "green", info: "blue" };
return <div style={{color: colors[type], border: `1px solid ${colors[type]}`, padding: "8px"}}>{message}</div>;
}
function App() {
return (
<div>
<Alert message="Something went wrong" type="error" />
<Alert message="Saved successfully" type="success" />
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
Flexibility और Simplicity को Balance करना
एक reusable component real variations cover करने के लिए flexible होना चाहिए, लेकिन इतना configurable नहीं कि use करना confusing हो जाए। Balance का एक अच्छा sign: ज़्यादातर callers को सिर्फ एक या दो props pass करने की ज़रूरत होती है, बाकी sensible defaults पर rely करते हुए।
उदाहरण: Balancing Flexibility and Simplicity
<!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 Tag({ text, color = "gray" }) {
return <span style={{background: color, color: "white", padding: "2px 6px", borderRadius: "3px"}}>{text}</span>;
}
function App() {
return <div><Tag text="Default" /><Tag text="Urgent" color="red" /></div>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
- Specific text या values को props के रूप में expose करने के बजाय एक component के अंदर hardcode करना।
- इसे parameterize करने के बजाय एक component के JSX को थोड़ा अलग version बनाने के लिए copy-paste करना।
- props के through कोई customization allow न करके एक component को बहुत rigid बनाना।
- Reusable components कई जगहों पर अलग data के साथ काम करने के लिए designed होते हैं।
- Props एक component को configurable और reusable बनाने का main tool हैं।
- Well-designed reusable components एक app भर में code duplication कम करते हैं।
- एक अच्छा reusable component flexibility को simplicity के साथ balance करता है।
कोई browser-specific restrictions नहीं -- यह एक component design practice है, runtime feature नहीं।
Chapter Quiz — Complete all 11 topics to unlock
0/11 topics done
Complete these topics first: