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 index as key Kyun Bura Hai (Best Practice in Hindi)
Coding info

React me index as key Kyun Bura Hai (Best Practice in Hindi)

TechIT — Banti Kevat जुलाई 03, 2026 5 min read
Listen to this article (Hindi/English)
React me index as key Kyun Bura Hai (Best Practice in Hindi)

React me index as key kyun bura hai? Is detailed Hindi guide me seekho kaise index key use karne se state updates aur performance me bugs aate hain.

क्या आपके साथ कभी ऐसा हुआ है कि आपने ReactJS में एक Dynamic List बनाई, उसमें से कोई Item Delete किया, और अचानक से UI में किसी दूसरे Item का State बदल गया? या फिर List को Sort करने पर Inputs का Data गलत Components में दिखने लगा? हम सब कभी न कभी इस रहस्यमयी error और Behavior से परेशान होते हैं। और जानते हैं इसका असली विलेन कौन है? वह मासूम सा दिखने वाला Array Index जिसे हम आलस्य में आकर key={index} की तरह पास कर देते हैं।

⚡ Quick Answer: React me index as key kyun bura hai kyunki arrays dynamic hote hain. Jab hum array me items add, remove, ya reorder karte hain, to index badal jata hai. Isse React ka Virtual DOM matching algorithm confuse ho jata hai, jiske karan incorrect UI updates, state bugs aur poor performance jaisi problems aati hain.

React में Key Prop का असली काम क्या है?

मेरे दोस्त, इसे बिल्कुल आसान शब्दों में समझते हैं। React के पास अपना खुद का एक सुपरफास्ट सिस्टम होता है जिसे हम Virtual DOM कहते हैं। जब भी आपके Application का State बदलता है, React एक नया Virtual DOM Tree बनाता है और उसे पुराने Tree से Compare करता है। इस Comparison की Process को हम Reconciliation कहते हैं।

अब मान लीजिए आपके पास एक List है जिसमें 100 Items हैं। अगर आपने उसमें से 1 Item को Update किया, तो React को कैसे पता चलेगा कि किस Component को दोबारा Render करना है और किसे छुए बिना छोड़ देना है? यहीं पर एंट्री होती है key Prop की।

key एक Special String Attribute है जिसे आपको React components की Lists बनाते समय हर Element को देना पड़ता है। यह key React को बताती है कि:

  • कौन सा Item Change हुआ है (Updated).
  • कौन सा Item नया Add हुआ है (Inserted).
  • कौन सा Item List से बाहर निकाल दिया गया है (Deleted).

सरल शब्दों में कहें तो, key किसी Component की एक Unique Identity या Aadhaar Card Number की तरह है। जब तक यह ID Unique और Stable रहेगी, React कभी भी UI Rendering में गलती नहीं करेगा।

React me index as key kyun bura hai? (गहराई से समझें)

अब मुख्य मुद्दे पर आते हैं कि React me index as key kyun bura hai। जब हम React को कोई Unique Key नहीं देते, तो React Console में एक लाल रंग का Warning Message दिखाता है:

Warning: Each child in a list should have a unique "key" prop.

इस Warning से बचने के लिए, बहुत से Developers जल्दीबाजी में Array के Index को ही Key बना देते हैं:

{items.map((item, index) => (
  <TodoItem key={index} task={item.task} />
))}

यह कोड पहली बार देखने पर बिल्कुल सही काम करता है। लेकिन जैसे ही आप इस List के साथ छेड़छाड़ (Dynamic Operations) करते हैं, असली समस्या शुरू हो जाती है। आइए इसके मुख्य कारणों को समझते हैं:

1. Dynamic Operations (Add, Remove, Sort) में गड़बड़ी

मान लीजिए आपके पास 3 Items की एक List है:

  1. Index 0: Apple
  2. Index 1: Banana
  3. Index 2: Cherry

अब अगर आप इस List के बिल्कुल शुरुआत (Index 0) पर एक नया Element "Orange" Insert करते हैं, तो नया structure कुछ ऐसा होगा:

  1. Index 0: Orange (पहले यह Apple था)
  2. Index 1: Apple (पहले यह Banana था)
  3. Index 2: Banana (पहले यह Cherry था)
  4. Index 3: Cherry (नया Index)

ध्यान दीजिए! यहाँ Apple का Index 0 से बदलकर 1 हो गया। Banana का Index 1 से बदलकर 2 हो गया। React के लिए, क्योंकि Index ही Key है, React सोचेगा कि Index 0 (Apple) का Content बदलकर Orange हो गया है, और उसने एक नया Element Index 3 पर Add किया है। इस कारण React पूरे List Components को दोबारा Render (Re-render) करेगा, जिससे Performance बुरी तरह प्रभावित होगी।

🏗️ Virtual DOM Reconciliation Issue (Index vs Unique ID)
Index: 0 (Apple)
→ Add Orange at Top →
Index: 0 (Orange) *Confused State!*
ID: app-1 (Apple)
→ Add Orange at Top →
ID: org-2 (Orange) | ID: app-1 (Apple) *Stable!*
Diagram: Comparison of key tracking between Array Index and Unique ID when inserting elements.

2. Component State Loss और Incorrect Rendering

सबसे बड़ा और खतरनाक Bug तब आता है जब आपके List Item Component के पास अपना खुद का Internal State (जैसे कि कोई User Input, Checkbox, या Accordion State) होता है।

चूँकि React Component Instances को उनकी key के आधार पर Identify करता है, अगर key (Index) वही रहती है लेकिन Data बदल जाता है, तो React पुराने Component Instance को ही Reuse कर लेता है। इसका परिणाम यह होता है कि पहले Item में टाइप किया गया Text नए Insertेड Item में दिखाई देने लगता है।

Live Code Example: Index vs Unique ID (दिखने वाला अंतर)

चलिए, एक पूरा और वर्किंग React Component का उदाहरण देखते हैं जहाँ हम इस समस्या को खुद महसूस करेंगे। इस Code को ध्यान से देखिए और समझने की कोशिश कीजिए:

import React, { useState } from 'react';

// Single Todo Component with Internal State
const Todo = ({ task, onDelete }) => {
  const [notes, setNotes] = useState('');

  return (
    <div style={{ border: '1px solid #ccc', padding: '10px', margin: '8px 0', borderRadius: '6px' }}>
      <strong>Task: {task}</strong>
      <div style={{ marginTop: '6px' }}>
        <label>Add Notes: </label>
        <input 
          type="text" 
          value={notes} 
          onChange={(e) => setNotes(e.target.value)} 
          placeholder="Type something..."
        />
      </div>
      <button onClick={onDelete} style={{ marginTop: '8px', background: '#ff4d4f', color: '#fff', border: 'none', padding: '4px 8px', borderRadius: '4px', cursor: 'pointer' }}>
        Delete
      </button>
    </div>
  );
};

// Main Component
export default function TodoListApp() {
  const [todos, setTodos] = useState([
    { id: 'todo-1', task: 'Learn React Internals' },
    { id: 'todo-2', task: 'Master Reconciliation' },
    { id: 'todo-3', task: 'Build Production Apps' }
  ]);

  const deleteWithIndexKey = (indexToDelete) => {
    // Bad Practice State Update
    const updatedTodos = todos.filter((_, index) => index !== indexToDelete);
    setTodos(updatedTodos);
  };

  const deleteWithIdKey = (idToDelete) => {
    // Best Practice State Update
    const updatedTodos = todos.filter(todo => todo.id !== idToDelete);
    setTodos(updatedTodos);
  };

  return (
    <div style={{ maxWidth: '600px', margin: '40px auto', fontFamily: 'sans-serif' }}>
      <h2>Scenario 1: Using INDEX as KEY (Bad Practice)</h2>
      {todos.map((todo, index) => (
        <Todo 
          key={index} // Yahi galti hai!
          task={todo.task} 
          onDelete={() => deleteWithIndexKey(index)} 
        />
      ))}

      <h2 style={{ marginTop: '40px' }}>Scenario 2: Using UNIQUE ID as KEY (Best Practice)</h2>
      {todos.map((todo) => (
        <Todo 
          key={todo.id} // Sahi tarika!
          task={todo.task} 
          onDelete={() => deleteWithIdKey(todo.id)} 
        />
      ))}
    </div>
  );
}

इस Code में Bug कैसे Test करें?

  1. Scenario 1 में जाकर पहले Task ("Learn React Internals") के Input Box में "Important" टाइप करें।
  2. अब उसी Task के "Delete" बटन पर क्लिक करें।
  3. आप देखेंगे कि "Learn React Internals" तो डिलीट हो गया, लेकिन जो "Important" आपने टाइप किया था, वह अब खिसक कर "Master Reconciliation" के Input Box में दिखने लगा है!
  4. यही जादू (गलत वाला) React के Index matching के कारण होता है। React को लगा कि Index 0 अभी भी मौजूद है, बस उसका Task Prop बदला है, इसलिए उसने Input Component की State को रिसेट नहीं किया।

Index vs Unique ID Comparison Table

आइए दोनों Approaches का एक Quick Comparison देखते हैं ताकि आपके दिमाग में सारे Clouds clear हो जाएं:

Feature / Scenario Using Index as Key Using Unique ID as Key
Rendering Performance Poor (Re-renders full list on insertion/deletion) Excellent (Only targets modified items)
Component State Retention Broken (State transfers to neighbor components) Perfect (State is bound to the specific item)
Sorting & Reordering Causes massive UI bugs and mismatches Extremely safe and smooth
Ease of Implementation Very easy (Comes built-in with array map) Requires dynamic ID generation or DB keys

React में Unique Key Generate करने के सही तरीके

अब जब हम समझ चुके हैं कि index का उपयोग करना खतरनाक है, तो सवाल उठता है कि हम एक बेहतरीन और Unique Key कैसे Generate करें? इसके कई आसान और सुरक्षित तरीके हैं:

1. Database IDs का उपयोग करें (सबसे बेस्ट तरीका)

यदि आप डेटा को किसी डेटाबेस जैसे MongoDB या PostgreSQL से Fetch कर रहे हैं, तो आपके पास पहले से ही Unique IDs (जैसे _id या id) मौजूद होंगी। हमेशा उनका ही उपयोग करें:

{products.map((product) => (
  <ProductCard key={product._id} details={product} />
))}

2. Client-Side UUID Generators का उपयोग करें

यदि आप Frontend पर ही Users से List Items बनवा रहे हैं (जैसे कि एक Todo App), तो आप Node/React Ecosystem के प्रसिद्ध Packages का उपयोग कर सकते हैं:

  • uuid: सबसे पॉपुलर लाइब्रेरी।
  • nanoid: एक बहुत ही लाइटवेट और फास्ट लाइब्रेरी।

Example using nanoid:

import { nanoid } from 'nanoid';

const addNewTask = (taskText) => {
  const newTodo = {
    id: nanoid(), // Generates a unique string like "V1StGXR8_Z5jdHi6B-myT"
    task: taskText
  };
  setTodos([...todos, newTodo]);
};

3. Modern JavaScript API: crypto.randomUUID()

अगर आप बिना किसी External Library के Unique ID बनाना चाहते हैं, तो Modern Browsers में उपलब्ध Built-in API crypto.randomUUID() का उपयोग कर सकते हैं:

const item = {
  id: window.crypto.randomUUID(), // Returns "de5006b5-31f6-4148-8df0-7d721fa6e2bb"
  name: 'New Item'
};

क्या कभी Index as Key का Use करना Safe होता है?

यह एक बहुत ही इंट्रेस्टिंग सवाल है। हमारे प्रसिद्ध React Expert Robin Pokorny के अनुसार, आप केवल और केवल तभी index को key की तरह उपयोग कर सकते हैं जब आपकी List निम्नलिखित तीनों शर्तों (Conditions) को एक साथ पूरा करती हो:

  1. Static List: List पूरी तरह से Static हो (यानी उसमें कभी भी नए Items Add न हों, न ही पुराने Delete हों)।
  2. No Reordering: List को कभी भी Sort या Filter न किया जाए।
  3. No State/Input: List Items पूरी तरह से Read-only हों, यानी उनके पास कोई Internal State या HTML Input box/Checkbox न हो।

यदि आपकी List इन तीनों Criteria को पूरा करती है (जैसे कि एक Footer Links की list), तो आप बिना किसी संकोच के index का उपयोग कर सकते हैं। अधिक जानकारी के लिए आप React Rendering Lists Official Docs को भी पढ़ सकते हैं।

Best Practices: Performance और Scalability के लिए

React में Lists को Render करते समय हमेशा इन बातों का ख्याल रखें ताकि आपका App Superfast बना रहे:

  • कभी भी Render Method के अंदर Keys Generate न करें: जैसे कि key={Math.random()} लिखना सबसे बड़ी भूल है। हर Render पर एक नई Key बनेगी जिससे पूरा Component Tree बार-बार Unmount होकर Mount होगा।
  • Keys Globally Unique होना जरूरी नहीं: आपकी Keys सिर्फ अपने Siblings (यानी उस विशिष्ट List) के अंदर Unique होनी चाहिए, पूरे App में नहीं।
  • Prop-Drilling से बचें: यदि आपको Key की Value को Component के अंदर Use करना है, तो उसे एक अलग Prop के रूप में भेजें क्योंकि React key Prop को सीधे Component के अंदर Access करने की अनुमति नहीं देता।

तो दोस्तों, हमने आज विस्तार से सीखा कि कैसे एक छोटी सी लापरवाही (Index as Key) आपके NextJS या React Projects में गंभीर Performance और State Bugs पैदा कर सकती है। अब से हमेशा Unique IDs का उपयोग करने की आदत डालें और अपने React Application को Robust और Bug-Free बनाएं। हैप्पी कोडिंग!

Frequently Asked Questions (FAQs)

Q1: React Console में "unique key prop" की वार्निंग क्यों आती है?
React को Virtual DOM Reconciliation के दौरान यह पहचानने की आवश्यकता होती है कि कौन से Elements बदले हैं या नए Add हुए हैं। जब आप Elements की List को Map करते हैं और उन्हें unique 'key' prop नहीं देते, तो React असमर्थ हो जाता है और यह Warning दिखाता है।
Q2: क्या key={Math.random()} का उपयोग करना सही है?
बिल्कुल नहीं! Math.random() हर Re-render पर एक नई Value Generate करता है। इससे React सोचता है कि पूरा Element बदल गया है और वह पूरे Component को Unmount करके दोबारा Mount करता है, जिससे भयंकर Performance Issues आते हैं।
Q3: क्या Index as Key का उपयोग करने से App क्रैश हो सकता है?
आमतौर पर इससे App तुरंत क्रैश नहीं होता, लेकिन यह अत्यधिक अनप्रेडिक्टेबल UI Bugs, Incorrect Form Inputs Data, Checkbox Mismatches और Slow Rendering जैसी गंभीर समस्याएँ उत्पन्न करता है।
Q4: Database ID न होने पर मुझे क्या करना चाहिए?
यदि आपके पास Database से मिली Unique ID नहीं है, तो आप 'nanoid' या 'uuid' जैसी Small Libraries का उपयोग करके Frontend पर ही Unique Keys Generate कर सकते हैं, या फिर Modern Browsers के crypto.randomUUID() API का उपयोग कर सकते हैं।
Q5: क्या React key prop को हम Component के अंदर props.key की तरह उपयोग कर सकते हैं?
नहीं, React 'key' prop को इंटरनली उपयोग करता है। यह आपके Component के Props Object में पास नहीं होता। यदि आपको उस ID की आवश्यकता Component के अंदर है, तो आपको उसे किसी अन्य नाम (जैसे id={item.id}) से भेजना होगा।

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.