मेरे पास एक फ़ंक्शन है जो एक मान प्राप्त करता है और राज्य को सेट करने के बाद एक और फ़ंक्शन कॉल करता है, हालांकि, जब मैं उस राज्य को दूसरे फ़ंक्शन (जेनरेटपीडीएफ) में कंसोल में लॉग इन करने का प्रयास करता हूं, तो यह कुछ भी लॉग नहीं करता है, जैसे कि राज्य नहीं था अद्यतन किया गया। क्या किसी को पता है कि समस्या कहाँ है?

pickMonth=(value)=>{
  this.setState({ m: value }, ()=>console.log(this.state.m), this.generatePdf())
}

generatePdf(){
  const {m} = this.state
 console.log(m);

अग्रिम में धन्यवाद!

-1
Nina 30 नवम्बर 2020, 22:14

4 जवाब

सबसे बढ़िया उत्तर
pickMonth=(value)=>{
  this.setState({ m: value }, ()=> { console.log(this.state.m), this.generatePdf() })
}

आपके द्वारा ऊपर की स्थिति निर्धारित करने के बाद, m तुरंत उपलब्ध नहीं है क्योंकि सेट स्थिति async है। आपको एक तर्क के रूप में m पास करना चाहिए।

pickMonth=(value)=>{
  this.setState({ m: value }, ()=>console.log(this.state.m), this.generatePdf(value))
}

generatePdf(value){

 console.log(value);
}
2
Someone Special 30 नवम्बर 2020, 22:38

this.generatePdf() का वापसी मान वर्तमान में this.setState(...) के तीसरे तर्क के रूप में पारित किया गया है। चूँकि setState() केवल दो तर्कों को स्वीकार करता है, तीसरा तर्क अप्रयुक्त रहेगा। this.generatePdf() कॉलबैक (दूसरा तर्क) का हिस्सा नहीं है। अगर आप अल्पविराम ऑपरेटर कॉलबैक के भीतर आपको शरीर को कोष्ठक से लपेटना होगा।

this.setState({ m: value }, () => (console.log(this.state.m), this.generatePdf()));

चूंकि setState() कॉलबैक के रिटर्न वैल्यू का उपयोग नहीं करता है, इसलिए आप अभिव्यक्ति का उपयोग करने के बजाय बॉडी ब्रैकेट { ... } का भी उपयोग कर सकते हैं। यह आम तौर पर समझने में भी आसान बोल रहा है।

this.setState({ m: value }, () => {
  console.log(this.state.m);
  this.generatePdf();
});

यहाँ अंतर यह है कि उपरोक्त कॉलबैक undefined लौटाता है (क्योंकि इसमें कोई रिटर्न स्टेटमेंट नहीं है)। जबकि पूर्व कॉलबैक परोक्ष रूप से अभिव्यक्ति परिणाम (this.generatePdf() का वापसी मूल्य) देता है।

1
3limin4t0r 30 नवम्बर 2020, 22:41

generatePdf को कॉल नहीं किया जाएगा, आपको इसकी आवश्यकता है

pickMonth=(value)=>{
  this.setState({ m: value }, ()=> {
        console.log(this.state.m);
        this.generatePdf();
   }
)}

setState दो तर्क लेता है पहला राज्य है और दूसरा कॉलबैक के लिए वैकल्पिक है आपने तीन आर्ग पारित किए जो गलत है

1
Ali Faris 30 नवम्बर 2020, 22:23

इसे इस तरह काम करना चाहिए, आपको अपने पिकमोन्थ फ़ंक्शन के अंदर एक तीर फ़ंक्शन का उपयोग करने की आवश्यकता नहीं है, आप सीधे console.log(this.state.m); this.generatePdf(); कर सकते हैं:

pickMonth = (value) => {
  this.setState({ m: value };
  console.log(this.state.m);
  this.generatePdf();
}

generatePdf(){
  const {m} = this.state
  console.log(m);
}
1
VersifiXion 30 नवम्बर 2020, 22:16