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 useEffect Hook Complete Guide (Beginner Friendly in Hindi)
Coding info

React useEffect Hook Complete Guide (Beginner Friendly in Hindi)

TechIT — Banti Kevat जुलाई 05, 2026 5 min read
Listen to this article (Hindi/English)
React useEffect Hook Complete Guide (Beginner Friendly in Hindi)

React useEffect Hook क्या है और इसे सही से कैसे इस्तेमाल करें? इस complete Hindi guide में side effects, dependency array और cleanups को आसान भाषा में सीखें।

दोस्तों, क्या आपने कभी सोचा है कि जब हम ReactJS में काम करते हैं, तो API call कहाँ करनी चाहिए? या फिर जब कोई dynamic dynamic updates दिखाना हो या background में timer शुरू करना हो, तो वो component lifecycle में कहाँ fit बैठता है? अगर आप भी इस उलझन में हैं, तो यकीन मानिए आप अकेले नहीं हैं। हमारे React development के सफ़र में "React useEffect Hook" एक ऐसा मील का पत्थर है, जिसे समझे बिना आप एक कुशल developer नहीं बन सकते। चलिए, आज आपके इस दोस्त के साथ बैठिए और बेहद सरल, देसी स्टाइल में इसे जड़ से समझते हैं!

⚡ Quick Answer: React useEffect Hook एक built-in Hook है जो functional components में side effects (जैसे API data fetching, subscriptions, timers, या manual DOM updates) को manage करने में मदद करता है। यह class components के lifecycle methods (componentDidMount, componentDidUpdate, और componentWillUnmount) की जगह अकेले काम करता है।
---

React useEffect Hook क्या है और हमें इसकी ज़रूरत क्यों पड़ती है?

सरल शब्दों में कहें तो, React का मुख्य काम है UI (User Interface) को render करना और state को manage करना। लेकिन जब भी हमें React के component rendering flow से बाहर की दुनिया से बात करनी पड़ती है, तो उसे हम "Side Effects" कहते हैं।

अब आप पूछेंगे, "यार भाई, ये Side Effects क्या होते हैं?"

  • Data Fetching: किसी external database या API से data लोड करना।
  • Direct DOM Manipulation: React के virtual DOM से हटकर सीधे core browser DOM को बदलना (जैसे document title बदलना)।
  • Timers & Intervals: Background में setTimeout या setInterval चलाना।
  • Subscriptions: Websocket connections set-up करना या event listeners (जैसे dynamic scroll/resize trackers) लगाना।

React components को pure functions होना चाहिए, जिसका मतलब है कि render logic के अंदर सीधे ये side effects नहीं लिखे जा सकते। अगर आप सीधे component के body में API call करेंगे, तो हर single state change और re-render पर वो API बार-बार call होने लगेगी, जिससे आपका application crash हो सकता है। इसी समस्या को सुलझाने के लिए जन्म हुआ React useEffect Hook का!

---
🏗️ useEffect Lifecycle & Render Flow Diagram
Component Render
Browser Paint (DOM Updates)
useEffect Runs (Side Effects)
Cleanup (Before next run/Unmount)
Diagram: React component rendering sequence showing how browser visual updates complete before side-effects are triggered.
---

useEffect Hook का Basic Syntax क्या है?

चलिए, सबसे पहले इसके simple structure को देखते हैं। इसे समझने के लिए नीचे दिए गए template को ध्यान से देखिए:

import React, { useEffect } from 'react';

useEffect(() => {
  // यहाँ पर आपका Side Effect Code आएगा (जैसे API call, subscriptions आदि)

  return () => {
    // (Optional) यहाँ पर Cleanup Function आएगा
  };
}, [dependencyArray]);

इस code block में मुख्य रूप से तीन महत्वपूर्ण हिस्से हैं:

  1. Callback Function: वह function जिसके अंदर आप अपना side-effect logic लिखते हैं।
  2. Dependency Array (Optional): Arguments की एक array जो React को यह बताती है कि यह hook कब-कब execute होना चाहिए।
  3. Cleanup Function (Optional): एक return function जो component के unmount होने या अगले update से पहले memory leaks को साफ़ (clean) करता है।
---

Dependency Array के 3 अलग-अलग Scenarios क्या हैं?

दोस्त, useEffect को control करने की पूरी चाबी इस Dependency Array के हाथ में ही होती है। इसके व्यवहार को समझने के लिए हमें इन तीन scenarios को गहराई से समझना होगा:

Scenario 1: No Dependency Array (कोई array नहीं दी गई)

अगर आप दूसरा logic parameter ही न दें, तो यह hook हर single render और re-render के बाद चलेगा।

useEffect(() => {
  console.log("मैं हर render पर चलूँगा!");
});

ध्यान देने वाली बात ये है कि: इसका इस्तेमाल production code में न के बराबर करें, क्योंकि इससे infinite loops और heavy performance overhead की समस्या आ सकती है।

Scenario 2: Empty Dependency Array (खाली array - [])

जब आप एक खाली bracket [] pass करते हैं, तो React समझ जाता है कि यह component सिर्फ एक बार mount (load) हुआ है। यह बिल्कुल class components के componentDidMount की तरह काम करता है।

useEffect(() => {
  console.log("मैं सिर्फ पहली बार mount होने पर ही चलूँगा!");
}, []);

use-case: शुरुआती API configuration setups या fetch call जो user interface load होते ही सिर्फ एक बार रन होनी चाहिए।

Scenario 3: Dependency Array with state/props (वैल्यू वाली array)

जब आप array के अंदर कोई dynamic variable, state, या prop डालते हैं, तो React उन variables पर अपनी पैनी नज़र रखता है। जब भी उनमें से कोई भी value बदलेगी, useEffect तुरंत फिर से trigger हो जाएगा।

useEffect(() => {
  console.log(`Count बदल गया! नया value है: ${count}`);
}, [count]);

Quick Reference: Dependency Array Comparison

Dependency Syntax कब Execute होता है? Alternative (Class Component Lifecycle)
useEffect(fn) हर render और state change पर None (Runs continuously)
useEffect(fn, []) सिर्फ एक बार (Initial Mount पर) componentDidMount
useEffect(fn, [count]) Mount पर + जब count बदलेगा componentDidUpdate (with conditional checks)

Cleanup Function क्या होता है और इसका use कब करें?

मान लीजिए आपने एक component लोड होने पर setInterval लगाकर एक counter चालू कर दिया। अब user उस component को छोड़ कर किसी दूसरे page पर चला गया। अगर आपने उस timer को बंद नहीं किया, तो background में वो timer चलता रहेगा और धीरे-धीरे आपके browser की memory को खा जाएगा। इसे ही हम Memory Leak कहते हैं।

इस गंभीर error से बचने के लिए हम React useEffect Hook के अंदर से एक Cleanup Function return करते हैं।

Event Listener Cleanup का Real-World Example:

चलिए, एक responsive window resize tracker बनाते हैं जो functional component के destroy होते ही memory को completely safe कर देता है:

import React, { useState, useEffect } from 'react';

function WindowTracker() {
  const [windowWidth, setWindowWidth] = useState(window.innerWidth);

  useEffect(() => {
    const handleResize = () => {
      setWindowWidth(window.innerWidth);
    };

    // Event listener set up किया
    window.addEventListener('resize', handleResize);

    // Cleanup logic return कर रहे हैं
    return () => {
      console.log("Cleanup: Event listener removed!");
      window.removeEventListener('resize', handleResize);
    };
  }, []); // Empty array, यानी listener सिर्फ एक बार setup होगा

  return (
    

Dynamic Resize Window Tracker

Current Browser Width: {windowWidth}px

); } export default WindowTracker;

यह कैसे काम करता है? जब WindowTracker screen से हटेगा (unmount होगा), तो React automatically callback component के return block को call करके console पर प्रिंट करेगा और event handler को background से हटा देगा। इससे memory safe रहती है!

---

Real-World Example: Production-Ready Data Fetching

चलिए, अब एक production-ready dashboard feature बनाते हैं। इसमें हम API response से users की list load करेंगे, loading animations दिखाएंगे और dynamic network errors को gracefully handle करेंगे। इस example को ध्यान से देखिए और अपने project में practice कीजिए:

import React, { useState, useEffect } from 'react';

function ProductDashboard() {
  const [products, setProducts] = useState([]);
  const [loading, setLoading] = useState(true);
  const [errorMessage, setErrorMessage] = useState(null);

  useEffect(() => {
    let activeRequest = true; // Prevents race conditions

    const fetchProducts = async () => {
      try {
        setLoading(true);
        const response = await fetch('https://fakestoreapi.com/products?limit=5');
        
        if (!response.ok) {
          throw new Error('Network settings are not correct or server returned error');
        }

        const data = await response.json();
        
        if (activeRequest) {
          setProducts(data);
          setErrorMessage(null);
        }
      } catch (err) {
        if (activeRequest) {
          setErrorMessage(err.message || "Something went wrong!");
        }
      } finally {
        if (activeRequest) {
          setLoading(false);
        }
      }
    };

    fetchProducts();

    // Cleanup: cancel asynchronous updates if user navigates away
    return () => {
      activeRequest = false;
    };
  }, []); // Run only once on mount

  if (loading) {
    return <div style={{ fontSize: '1.2rem', color: '#06b6d4', padding: '20px' }}>Loading high-quality products...</div>;
  }

  if (errorMessage) {
    return <div style={{ color: '#ef4444', padding: '20px', fontWeight: 'bold' }}>Error: {errorMessage}</div>;
  }

  return (
    <div style={{ fontFamily: 'Arial, sans-serif', padding: '24px' }}>
      <h2 style={{ borderBottom: '2px solid #e2e8f0', paddingBottom: '10px' }}>🔥 Trending Store Products</h2>
      <div style={{ display: 'flex', flexDirection: 'column', gap: '16px', marginTop: '20px' }}>
        {products.map((product) => (
          <div key={product.id} style={{ display: 'flex', gap: '16px', padding: '16px', border: '1px solid #e2e8f0', borderRadius: '10px' }}>
            <img src={product.image} alt={product.title} style={{ width: '80px', height: '80px', objectFit: 'contain' }} />
            <div>
              <h4 style={{ margin: '0 0 8px 0' }}>{product.title}</h4>
              <p style={{ color: '#059669', fontWeight: 'bold', margin: '0' }}>${product.price}</p>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
}

export default ProductDashboard;

इस functional component में हमने async/await structure का बेहतरीन इस्तेमाल किया है, साथ ही dynamic errors को track करने के लिए state hook define किए हैं। यहाँ custom component lifecycle के साथ cleanup switch (activeRequest) यह ensure करता है कि slow-network channels पर fast route-change के दौरान user screen unmount होने के बाद component state update न हो (जिससे memory check bypass crash errors नहीं आते)।

---

Common Errors और Performance Issues को कैसे Fix करें?

अपने development career में मैंने नए developers को अक्सर इन 3 गलतियों के कारण सिर पकड़ते देखा है:

1. Infinite Loop का खतरा (The Infinite Render Loop)

समस्या: मान लीजिए आपने useEffect में dynamic state updates किए, लेकिन dependency array देना भूल गए या फिर उसी dependency variable को अन्दर update कर रहे हैं।

// ❌ Don't do this!
useEffect(() => {
  setCount(count + 1); 
}, [count]); // Infinite render loops!

समाधान: कभी भी direct state modifiers को dependencies array का trigger pointer न बनाएं, जब तक कि आप structural conditioning (जैसे absolute values check limit) न जोड़ रहे हों।

2. Stale Closures (पुरानी values का lock हो जाना)

JavaScript closures की वजह से कई बार useEffect पुराने render variables की outdated values को अपने scope में freeze कर लेता है।

समाधान: हमेशा React dynamic actions में updates के समय state updater callbacks (जैसे setCount(prevCount => prevCount + 1)) का use करें। इससे state calculations को हमेशा brand-new value मिलती है।

3. Missing Dependency warnings

जब भी आप effect structure में component limits के variables (states/props) का use करते हैं, तो ESLint warning show करता है। इन hooks warnings को bypass करने के लिए हमेशा उन dependencies को checklist elements array में register करें। यदि dynamic behavior constant है, तो official guide React Dev Docs reference instructions की help से optimization standards setup करें।

---

तो दोस्तों, हमने आज मिलकर बेहद बारीकी से समझा कि React useEffect Hook किस तरह काम करता है, lifecycle states को functional components में कैसे transition करते हैं, safe API dynamic handling कैसे लिखते हैं, और cleanups का absolute rules pattern क्या है। इस concept को मजबूत बनाने का एक ही नुस्खा है—आज ही अपने system पर बैठें, कम से कम दो timers या background tracking modules design करें, और error checks handle करके खेलें। कोई भी doubts हो, तो हमेशा की तरह खुलकर अपनी बात रखें। हैप्पी कोडिंग!

---

Frequently Asked Questions (FAQs)

Q1: क्या हम एक React Component में एक से ज़्यादा useEffect Hooks इस्तेमाल कर सकते हैं?
हाँ, बिल्कुल! आप एक ही component में multiple useEffect Hooks का इस्तेमाल कर सकते हैं। यह clean code structures बनाए रखने में मदद करता है, जिससे आप अलग-अलग features (जैसे data fetching और analytics tracker) को अलग code groups में handle कर सकते हैं।
Q2: empty dependency array [] और dependencies न देने में क्या अंतर है?
यदि आप empty dependency array [] देते हैं, तो side-effect component render होने के बाद केवल एक बार (initial mount पर) चलता है। लेकिन अगर आप dependency array बिल्कुल नहीं देते, तो हर single re-render पर useEffect का code बार-बार executes होता है, जिससे browser fast slowdowns या network infinite loop loops का शिकार हो सकता है।
Q3: Cleanup Function कब execute होता है?
Cleanup function दो scenarios में trigger होता है: (1) Component के screen से unmount (destroy) होने पर, और (2) उस specific hook cycle के अगले loop updates run होने से ऐन पहले, ताकि पुराने listeners, subscriptions, या stale tasks cleanly clear हो सकें।
Q4: क्या useEffect async callback support करता है?
नहीं, useEffect direct async dynamic functions allow नहीं करता (जैसे `useEffect(async () => {})` invalid है)। क्योंकि async functions implicitly dynamic promises return करते हैं, जबकि useEffect expect करता है कि या तो कुछ न return हो या फिर एक cleanup callback function return हो। इसलिए async process के लिए useEffect block के अंदर एक custom function definition लिखकर उसे execute करना चाहिए।
Q5: Stale Closure Error को कैसे fix कर सकते हैं?
Stale closures को solve करने के लिए dependency array में required states/variables को define करें ताकि parameters change होने पर fresh calculations loop triggers हो सकें, अथवा direct reference updates के स्थान पर current updates calculations trigger callbacks function (जैसे variable values updates using setState callbacks) run करें।

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.