Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> JavaScript

React त्रुटि: Cannot read property 'setState' of undefined - समाधान

जब आप पहली बार React कंपोनेंट्स लिखना शुरू करते हैं, तो आप रास्ते में कई अलग-अलग त्रुटियों का सामना कर सकते हैं। दो ऐसी त्रुटियां हैं "Cannot read property 'setState' of undefined" और "this.setState is not a function"। यह आर्टिकल इन त्रुटियों को दूर करने के कुछ तरीकों पर नज़र डालता है।

क्यों?

ये त्रुटियां होती हैं क्योंकि आप अपने React कंपोनेंट में जिस मेथड का उपयोग या आह्वान कर रहे हैं वह सही ढंग से बाउंड नहीं है। यहां कोड का एक उदाहरण है जो त्रुटि का कारण बनेगा (यह मानता है कि आपका React कंपोनेंट सही ढंग से सेट अप है):

import React from "react";
import "./styles.css";

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      input: ""
    };
  }

  handleChange(e) {
    this.setState({[e.target.name]: e.target.value})
  }

  render() {
    console.log(this.state)
    return (
      

Sample React Application

); } } export default App;

पहली नज़र में, कोड ठीक दिखता है, लेकिन अगर हम करीब से देखें, तो हम देखते हैं कि handleChange मेथड App क्लास से बाउंड नहीं है इसलिए "this" कीवर्ड इस इंस्टेंस में Window को संदर्भित करेगा। करीब से देखने के लिए, आइए handleChange मेथड की पहली लाइन और फिर render की पहली लाइन में console.log(this) जोड़ें:

handleChange(e) {
  console.log(this, "change")
  this.setState({[e.target.name]: e.target.value})
}

render() {
  console.log(this, "render")
  return (
    

Sample React Application

); }

यदि हम एप्लिकेशन लोड होने पर कंसोल को देखते हैं, तो हम देखेंगे कि "this" कीवर्ड App को संदर्भित करता है। यदि हम अपने इनपुट का उपयोग करने का प्रयास करते हैं, तो हमें स्क्रीन पर एक त्रुटि मिलती है, लेकिन यदि हम कंसोल को देखते हैं, तो हम देखेंगे कि "this" कीवर्ड वहां Window ऑब्जेक्ट को संदर्भित करता है, App को नहीं। इस समस्या को ठीक करने के दो तरीके हैं:

1. मेथड को बाइंड करें

कंस्ट्रक्टर के अंदर, स्टेट ऑब्जेक्ट के बाद, यह लाइन डालें:

this.handleChange = this.handleChange.bind(this);

यह लाइन "this" कीवर्ड को handleChange मेथड से बांध देगी ताकि यह handleChange को इनवोक करते समय App कंपोनेंट को स्पष्ट रूप से संदर्भित कर सके। अन्यथा, मेथड उस कंपोनेंट को नहीं जानता या नहीं देखता जिसके साथ आप चाहते हैं कि यह काम करे।

2. ES6 एरो फंक्शन

बिग एरो फंक्शन के लिए ES6 सिंटैक्स का उपयोग करें। यह स्वचालित रूप से "this" कीवर्ड को उस मेथड से बांध देता है ताकि आपको इसे कंस्ट्रक्टर में बांधने की आवश्यकता न हो:

handleChange = (e) => {
  this.setState({[e.target.name]: e.target.value})
}

बस! React में क्लास कंपोनेंट स्ट्रक्चर का उपयोग करते समय "this.setState" is "undefined" या "not a function" त्रुटि से छुटकारा पाने का तरीका यही है। यदि आप भविष्य में इन त्रुटियों को रोकना चाहते हैं, तो अपने React कंपोनेंट को React Hooks के साथ फंक्शनल कंपोनेंट्स का उपयोग करने के लिए रीफैक्टर करें!

  1. एरर 0xC00D3E8E ठीक करें, Windows 11/10 पर प्रॉपर्टी रीड-ओनली है एरर 0xC00D3E8E ठीक करें, Windows 11/10 पर प्रॉपर्टी रीड-ओनली है

    एरर 0xC00D3E8E: प्रॉपर्टी रीड-ओनली है Windows 10 कंप्यूटर पर एक स्थान से दूसरे स्थान पर फाइल ले जाते समय एरर 0xC00D3E8E का सामना करना बहुत दर्दनाक होता है। इस एरर के कई कारण हो सकते हैं और उनका अनुमान लगाना मुश्किल है – लेकिन मुख्य कारण मेटाडेटा के साथ एक त्रुटि है। हम मीडिया फाइल के मेटाडेटा को बदल

  1. विंडोज डिस्क रीड एरर हल करें: चरण-दर-चरण समाधान और रोकथाम विंडोज डिस्क रीड एरर हल करें: चरण-दर-चरण समाधान और रोकथाम

    यदि आप इस एरर का सामना करते हैं, तो आप अपने विंडोज में बूट नहीं कर पाएंगे, और आप रीस्टार्ट लूप में फंस जाएंगे। पूरा एरर संदेश है डिस्क रीड एरर हुई। रीस्टार्ट करने के लिए Ctrl+Alt+Del दबाएं जिसका अर्थ है कि आपको अपने पीसी को रीस्टार्ट करने के लिए Ctrl + Alt + Del दबाना होगा, आप फिर से इस एरर स्क्रीन

  1. Android पर Parse Error ठीक करें: Input $ मुद्दों को हल करने के लिए त्वरित गाइड Android पर Parse Error ठीक करें: Input $ मुद्दों को हल करने के लिए त्वरित गाइड

    Parse Error Android फोन पर होने वाली सबसे आम त्रुटियों में से एक है। यह त्रुटि डिवाइस पर किसी एप्लिकेशन की विफल इंस्टॉलेशन का परिणाम है। त्रुटि पार्सिंग समस्या के कारण होती है, जिसे .apk पार्सर के रूप में भी जाना जाता है। आमतौर पर, Google Play Store के बजाय किसी थर्ड-पार्टी स्रोत से ऐप इंस्टॉल करने