You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/learn/manipulating-the-dom-with-refs.md
+23-47Lines changed: 23 additions & 47 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -193,9 +193,9 @@ li {
193
193
194
194
<DeepDive>
195
195
196
-
#### लिस्ट के रेफ्स को मैनेज करने के लिए रेफ कॉलबैक का उपयोग करना {/*how-to-manage-a-list-of-refs-using-a-ref-callback*/}
196
+
#### लिस्ट ऑफ़ रिफ्स को `ref`कॉलबैक का उपयोग करके प्रबंधित करना {/*how-to-manage-a-list-of-refs-using-a-ref-callback*/}
197
197
198
-
उपरोक्त उदाहरणों में, रेफ्स की संख्या पहले से तय है। हालांकि, कभी-कभी आपको लिस्ट के प्रत्येक आइटम के लिए एक रेफ चाहिए, और आपको नहीं पता होता कि कितने आइटम होंगे। इस प्रकार का कोड**काम नहीं करेगा**:
198
+
उपरोक्त उदाहरणों में, रिफ्स की संख्या पहले से तय होती है। लेकिन कभी-कभी आपको लिस्ट में प्रत्येक आइटम के लिए एक रिफ की ज़रूरत हो सकती है, और आपको पता नहीं होता कि कितने आइटम होंगे। ऐसा कुछ**काम नहीं करेगा**:
199
199
200
200
```js
201
201
<ul>
@@ -207,13 +207,13 @@ li {
207
207
</ul>
208
208
```
209
209
210
-
यह इसलिए है क्योंकि **Hooks को केवल आपके कंपोनेंट के टॉप-लेवल पर ही कॉल किया जाना चाहिए।** आप `useRef` को किसी लूप, कंडीशन या `map()` कॉल के अंदर कॉल नहीं कर सकते।
210
+
ऐसा इसलिए है क्योंकि **हुक्स को केवल आपके कंपोनेंट के शीर्ष स्तर पर ही कॉल किया जाना चाहिए।** आप `useRef` को किसी लूप, कंडीशन, या `map()` कॉल के अंदर नहीं कॉल कर सकते।
211
211
212
-
इसका एक तरीका यह है कि उनके पैरेंट एलिमेंट का एक रेफ प्राप्त करें, और फिर DOM मैनिपुलेशन मेथड्स जैसे [`querySelectorAll`](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll) का उपयोग करके व्यक्तिगत चाइल्ड नोड्स "ढूंढें।" हालांकि, यह तरीका अस्थिर हो सकता है और यदि आपका DOM स्ट्रक्चर बदलता है तो टूट सकता है।
212
+
इस समस्या को हल करने का एक तरीका यह है कि उनके पैरेंट एलिमेंट के लिए एक रिफ लें और फिर DOM मैनिपुलेशन विधियों जैसे [`querySelectorAll`](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll) का उपयोग करके व्यक्तिगत चाइल्ड नोड्स "खोजें"। लेकिन यह तरीका नाजुक है और आपके DOM स्ट्रक्चर के बदलने पर टूट सकता है।
213
213
214
-
दूसरा समाधान यह है कि **`ref` एट्रिब्यूट को एक फंक्शन पास करें।** इसे [`ref`callback](/reference/react-dom/components/common#ref-callback) कहा जाता है। React आपके रेफ कॉलबैक को DOM नोड के साथ कॉल करेगा जब रेफ सेट करने का समय होगा, और `null` के साथ जब इसे क्लियर करने का समय होगा। इससे आप अपनी खुद की एक Array या [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) बनाए रख सकते हैं और किसी भी रेफ तक उसके इंडेक्स या किसी प्रकार की ID द्वारा पहुंच सकते हैं।
214
+
एक और समाधान है कि **`ref` एट्रिब्यूट को एक फ़ंक्शन पास करें।** इसे [`ref`कॉलबैक](/reference/react-dom/components/common#ref-callback) कहा जाता है। React आपके रिफ कॉलबैक को DOM नोड के साथ तब कॉल करेगा जब रिफ सेट करना हो, और `null` के साथ जब रिफ को क्लियर करना हो। यह आपको अपनी खुद की [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)या ऐरे बनाए रखने देता है और किसी रिफ तक इसकी इंडेक्स या किसी प्रकार के ID के माध्यम से पहुंचने देता है।
215
215
216
-
इस उदाहरण में दिखाया गया है कि आप इस दृष्टिकोण का उपयोग करके लंबी लिस्ट में किसी भी नोड तक स्क्रॉल कैसे कर सकते हैं:
216
+
यह उदाहरण दिखाता है कि आप इस तरीके का उपयोग करके किसी लंबी लिस्ट में किसी भी नोड को स्क्रॉल कैसे कर सकते हैं:
217
217
218
218
<Sandpack>
219
219
@@ -236,7 +236,7 @@ export default function CatFriends() {
236
236
237
237
functiongetMap() {
238
238
if (!itemsRef.current) {
239
-
//Initialize the Map on first usage.
239
+
//पहली बार उपयोग पर Map को इनिशियलाइज़ करें।
240
240
itemsRef.current=newMap();
241
241
}
242
242
returnitemsRef.current;
@@ -256,11 +256,11 @@ export default function CatFriends() {
256
256
key={cat}
257
257
ref={(node) => {
258
258
constmap=getMap();
259
-
if (node) {
260
-
map.set(cat, node);
261
-
} else {
259
+
map.set(cat, node);
260
+
261
+
return () => {
262
262
map.delete(cat);
263
-
}
263
+
};
264
264
}}
265
265
>
266
266
<img src={cat} />
@@ -309,59 +309,35 @@ li {
309
309
}
310
310
```
311
311
312
-
```json package.json hidden
313
-
{
314
-
"dependencies": {
315
-
"react": "canary",
316
-
"react-dom": "canary",
317
-
"react-scripts": "^5.0.0"
318
-
}
319
-
}
320
-
```
321
-
322
312
</Sandpack>
323
313
324
-
इस उदाहरण में, itemsRef एक सिंगल DOM नोड को स्टोर नहीं करता है। इसके बजाय, यह एक Map को स्टोर करता है, जो हर आइटम के ID को उसके संबंधित DOM नोड से जोड़ता है। (Refs किसी भी मान को स्टोर कर सकते हैं!) हर लिस्ट आइटम पर उपयोग किए गए refcallback का काम Map को अपडेट करना है:
314
+
इस उदाहरण में, `itemsRef` एक ही DOM नोड को नहीं रखता है। इसके बजाय, यह एक [Map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Map) रखता है, जो आइटम ID से DOM नोड को मैप करता है। ([Refs किसी भी वैल्यू को रख सकते हैं!](/learn/referencing-values-with-refs)) प्रत्येक लिस्ट आइटम पर [`ref` कॉलबैक](/reference/react-dom/components/common#ref-callback)Map को अपडेट करने का ध्यान रखता है:
325
315
326
316
```js
327
317
<li
328
318
key={cat.id}
329
319
ref={node=> {
330
320
constmap=getMap();
331
-
if (node) {
332
-
// Add to the Map
333
-
map.set(cat, node);
334
-
} else {
335
-
// Remove from the Map
336
-
map.delete(cat);
337
-
}
338
-
}}
339
-
>
340
-
```
341
-
342
-
यह आपको बाद में Map से व्यक्तिगत DOM नोड्स को पढ़ने की अनुमति देता है।
343
-
344
-
<Canary>
345
-
346
-
यह उदाहरण `ref` कॉलबैक के साथ एक क्लीनअप फ़ंक्शन का उपयोग करके Map को प्रबंधित करने का एक और तरीका दिखाता है।
347
-
348
-
```js
349
-
<li
350
-
key={cat.id}
351
-
ref={node=> {
352
-
constmap=getMap();
353
-
// Add to the Map
321
+
// Map में जोड़ें
354
322
map.set(cat, node);
355
323
356
324
return () => {
357
-
//Remove from the Map
325
+
//Map से हटाएं
358
326
map.delete(cat);
359
327
};
360
328
}}
361
329
>
362
330
```
363
331
364
-
</Canary>
332
+
यह आपको बाद में Map से व्यक्तिगत DOM नोड्स पढ़ने की अनुमति देता है।
333
+
334
+
<Note>
335
+
336
+
जब Strict Mode सक्षम होता है, तो डेवेलपमेंट में रिफ कॉलबैक दो बार चलेंगे।
337
+
338
+
`[Ref]` कॉलबैक को फिर से चलाने से बग कैसे ठीक होते हैं, इसके बारे में अधिक जानें। [यहां पढ़ें](/reference/react/StrictMode#fixing-bugs-found-by-re-running-ref-callbacks-in-development)
0 commit comments