क्या आप मुझे राज्य के अंदर और बाहर राज्य के डेटा के बारे में इस तरह से अलग समझा सकते हैं:

constructor(){
this.data1 = "this is data 1", 
this.state = {
this.data2 = "this is data 2"}
}

इसलिए अगर मैं कंपोनेंटडिमाउंट के अंदर डेटा 2 का उपयोग करता हूं या बिना किसी सशर्त कोड के रेंडर फ़ंक्शन में यह त्रुटि फेंकता है जो वर्णन करता है कि रिएक्ट अनंत लूप ब्ला ब्ला ब्ला की अनुमति नहीं दे सकता है, लेकिन अगर मैं कंपोनेंटडिडमाउंट या रेंडर फ़ंक्शन में डेटा 1 का उपयोग करता हूं, तो यह पूरी तरह से काम करता है। तो डिफर्नेट क्या है? क्या मुझे अपने आप को अधिक लचीलापन प्राप्त करने के लिए डेटा 1 का उपयोग करना चाहिए?

2
arga wirawan 23 जिंदा 2020, 03:48

1 उत्तर

सबसे बढ़िया उत्तर
  1. यह एक मान्य सिंटैक्स है

    constructor(){
       this.data = "this is data 1"; 
    }
    
  2. यह मान्य सिंटैक्स नहीं है

    constructor(){
      this.state = {
        this.data = "this is data 2"
      } 
    }
    
  3. हालाँकि, यह मान्य है

    constructor(){
       this.state = {
         data: "this is data 2"
      } 
    }
    

तो यहाँ क्या अंतर है।

1 मान्य है लेकिन this.data = 'Some new value' जैसे मान बदलने पर घटक रेंडर ट्रिगर नहीं होगा और यदि आप अपने जेएसएक्स/एचटीएमएल में यह मान दिखा रहे हैं, तो यह अपडेट किए गए मान को प्रतिबिंबित नहीं करेगा जब तक कि कोई अन्य राज्य परिवर्तन रेंडर फ़ंक्शन को ट्रिगर नहीं करता।

3 एक राज्य चर को परिभाषित करने का तरीका है और आपको कभी भी mutate या सीधे राज्य को this.state.data = 'some value' की तरह अपडेट नहीं करना चाहिए। आपको this.setState({ data: 'some new value' }) जैसे मान को अपडेट करना होगा जो रेंडर फ़ंक्शन को ट्रिगर करेगा

4
Zohaib Ijaz 23 जिंदा 2020, 11:26