React Functional Components क्या हैं? (What are React Functional Components)
साधारण शब्दों में कहें तो, React Functional Component एक simple JavaScript Function है। यह function एक input (जिसे हम Props कहते हैं) ले सकता है और बदले में HTML जैसा दिखने वाला JSX (JavaScript XML) return करता है। पहले के समय में, इन्हें "Stateless Components" कहा जाता था क्योंकि इनके पास अपनी खुद की local state या lifecycle methods को handle करने की क्षमता नहीं थी। लेकिन React 16.8 में React Hooks के आने के बाद सब कुछ बदल गया। अब ये components पूरी तरह से stateful हो चुके हैं और Class Components को लगभग पूरी तरह से replace कर चुके हैं। एक बेसिक React Functional Component का उदाहरण देखिए:import React from 'react';
// एक simple ES6 arrow function component
const WelcomeMessage = () => {
return (
नमस्ते दोस्तों!
React Functional Components की दुनिया में आपका स्वागत है।
);
};
export default WelcomeMessage;
ऊपर दिए गए कोड में, WelcomeMessage एक बेहद सीधा JavaScript function है जो JSX return कर रहा है। इसे समझना और debug करना Class Components के मुकाबले 10 गुना आसान है।
---
React Functional Components का Use क्यों करना चाहिए? (Why Use Functional Components)
जब हम MERN Stack applications बनाते हैं, तो हमारा मुख्य ध्यान code readability, maintainability और scalability पर होता है। Functional components हमें ये सभी चीजें बिना किसी फालतू boilerplate के प्रदान करते हैं। इसके मुख्य कारण निम्नलिखित हैं:- कम कोड, ज्यादा काम (Less Boilerplate): आपको `constructor`, `this`, या `render()` method लिखने की कोई जरूरत नहीं है। सीधा function लिखो और काम खत्म!
- बेहतर Performance: ये components memory में हल्के होते हैं क्योंकि इनमें class instances बनाने की जरूरत नहीं पड़ती।
- Hooks का सपोर्ट:
useState,useEffect, औरuseContextजैसे hooks का उपयोग केवल functional components के अंदर ही किया जा सकता है। - आसान Testing: चूंकि ये pure functions की तरह व्यवहार करते हैं, इसलिए इनका unit testing करना बेहद सरल होता है।
Class Components vs Functional Components: मुख्य अंतर क्या है?
अगर आप अभी भी असमंजस में हैं कि इन दोनों में से किसे चुनें, तो नीचे दी गई HTML comparison table से आपको सब कुछ साफ हो जाएगा:| Feature | Class Components | Functional Components |
|---|---|---|
| Syntax | ES6 Class syntax (Extends React.Component) | Simple JavaScript Functions (Arrow or Regular) |
| Boilerplate Code | बहुत अधिक (Constructor, render, binding की जरूरत) | बेहद कम और साफ-सुथरा |
| State Management | this.state और this.setState() |
useState Hook का उपयोग |
| Lifecycle Methods | componentDidMount, componentDidUpdate आदि |
useEffect Hook का उपयोग |
| This Keyword | हाँ, this bind करना पड़ता है जो भ्रम पैदा करता है |
this की कोई आवश्यकता नहीं है |
React Functional Components कैसे काम करते हैं? (Step-by-Step Guide with Props)
चलिए अब एक वास्तविक, production-ready उदाहरण देखते हैं। हम एक ऐसा Product Card Component बनाएंगे जो user interaction को handle करेगा, dynamic props को receive करेगा, और parent component से communicate करेगा। हम इस कोड में props destructuring, event handling, और state update को एक साथ सीखेंगे।Step 1: Parent Component (App.js)
यह component हमारे functional components को render करेगा और data pass करेगा।import React from 'react';
import ProductCard from './ProductCard';
const App = () => {
const products = [
{ id: 1, name: "Premium Wireless Headphones", price: 2999, category: "Electronics" },
{ id: 2, name: "Mechanical Gaming Keyboard", price: 4500, category: "Accessories" }
];
const handleBuyNow = (productName) => {
alert(`${productName} को आपके कार्ट में जोड़ दिया गया है!`);
};
return (
हमारे शानदार प्रोडक्ट्स
{products.map((item) => (
))}
);
};
export default App;
Step 2: Child Component (ProductCard.js)
यहाँ हम functional component के अंदर props को receive और restructure करेंगे।import React, { useState } from 'react';
// Props को dynamic तरीके से destructure करना सीखें
const ProductCard = ({ name, price, category, onActionClick }) => {
// Local state manage करना counter के लिए
const [quantity, setQuantity] = useState(1);
const incrementQuantity = () => {
setQuantity((prevQty) => prevQty + 1);
};
const decrementQuantity = () => {
if (quantity > 1) {
setQuantity((prevQty) => prevQty - 1);
}
};
return (
{category}
{name}
₹{price * quantity} (Qty: {quantity})
{/* Quantity Selector Control */}
{quantity}
{/* Dynamic Event Handler calling parent function */}
);
};
export default ProductCard;
दोस्तों, ध्यान देने वाली बात ये है कि इस component में हमने बिना किसी Complex Class setup के, props को direct access किया और internal state (`quantity`) को भी useState hook की मदद से बेहद सफाई से handle कर लिया।
---
Functional Components में Lifecycle Methods का Use (useEffect Hook)
जब आप API Call करते हैं या real-time tracking set करते हैं, तो आपको lifecycle events की जरूरत होती है। Class Components में हम इसके लिएcomponentDidMount का इस्तेमाल करते थे, लेकिन functional components में यही काम useEffect Hook करता है।
चलिए, देखते हैं कि dynamic API request कैसे handle करते हैं:
import React, { useState, useEffect } from 'react';
const UserProfile = () => {
const [userData, setUserData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
// API Call fetching user details
fetch('https://jsonplaceholder.typicode.com/users/1')
.then((response) => response.json())
.then((data) => {
setUserData(data);
setLoading(false);
})
.catch((err) => {
console.error("Data Fetching Error:", err);
setLoading(false);
});
}, []); // Empty array ka matlab hai component mount hone par sirf ek baar chalega
if (loading) return डेटा लोड हो रहा है, कृपया प्रतीक्षा करें...
;
return (
यूज़र प्रोफ़ाइल (API Data)
नाम: {userData?.name}
ईमेल: {userData?.email}
कंपनी: {userData?.company?.name}
);
};
export default UserProfile;
अधिक जानकारी के लिए आप React Official Documentation पर जाकर component lifecycle और hooks के बारे में गहराई से पढ़ सकते हैं।
---
Common Errors और उन्हें कैसे Solve करें (Troubleshooting guide)
जब नए डेवलपर्स React Functional Components लिखना शुरू करते हैं, तो वे अक्सर कुछ सामान्य गलतियाँ कर बैठते हैं। आइए जानते हैं कि वे गलतियाँ कौन सी हैं और उन्हें कैसे fix error में बदला जा सकता है।Error 1: Rules of Hooks को तोड़ना (Hooks Called Conditionally)
समस्या: कई बार डेवलपर्स loops, conditions या nested functions के अंदर Hooks को call कर देते हैं।// ❌ गलत तरीका (Don't do this)
if (isLoggedIn) {
useEffect(() => {
// API Call
}, []);
}
समाधान: Hooks को हमेशा अपने React component के बिल्कुल top-level पर ही call करें।
// सही तरीका (Do this)
useEffect(() => {
if (isLoggedIn) {
// API Call logic here
}
}, [isLoggedIn]);
Error 2: State Updates का तुरंत न दिखना
समस्या:useState asynchronous होता है। जब आप state update करते हैं और तुरंत उसे print करते हैं, तो पुराना state ही दिखता है।
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
console.log(count); // ❌ यहाँ पुराना count ही प्रिंट होगा!
};
समाधान: अगर आपको update होने के तुरंत बाद कोई action लेना है, तो useEffect का उपयोग करें और dependency array में उस state को pass करें।
---
Performance Optimization के लिए Best Practices
अगर आप एक production ready application बना रहे हैं, तो performance की चिंता करना भी आपकी ही जिम्मेदारी है। Functional Components को optimized रखने के लिए ये दो बातें हमेशा याद रखें:- React.memo का उपयोग करें: यदि आपका child component केवल static props receive करता है, तो उसे re-rendering से बचाने के लिए
React.memoसे wrap करें। - useCallback और useMemo: अनावश्यक functions और values के references को दोबारा बनने से रोकने के लिए इन hooks का सहारा लें।


टिप्पणियाँ
एक टिप्पणी भेजें