मैं प्रतिक्रिया के साथ सरणी मान कैसे अपडेट कर सकता हूं? मैं एक कन्स्ट्रक्टर में एक सरणी बनाता हूं और जब कोई उपयोगकर्ता बटन पर क्लिक करता है तो उसे उस विधि के साथ आने वाले पैरामीटर के आधार पर मेरे सरणी मानों को 1 से बढ़ाना चाहिए जहां मैं सरणी को अपडेट करने का प्रयास करता हूं। जब उपयोगकर्ता बटन पर क्लिक करता है तो प्रतिक्रिया विधि कहा जाता है और वहां मैंने setState कोड का उपयोग करने का प्रयास किया है लेकिन मुझे एक त्रुटि मिल रही है जो कहती है कि सरणी परिभाषित नहीं है। मैंने console.log से जांच की है कि पैरामीटर onButtonClick विधि में सही रूप में आता है।

this.state = { array: [0, 0] } //this is in the constructor and here I create the array

onButtonClick(animal) {
  //this method gets called when a user clicks a button and here are the ways I have tried to get my array values to be updated.
  if (animal == 'dog') {
    //this.setState({array : array[0].value + 1});
    //this.state.array[0].value = array[0].value+1;
    //this.setState({array : array[0]=array[0].value+1});
  }
}
0
Developer 2 जुलाई 2020, 16:59

3 जवाब

सबसे बढ़िया उत्तर

आपको वेरिएबल को this.state.array के माध्यम से एक्सेस करना होगा और इसे बढ़ाने से पहले पुराने एरे की एक प्रति बनाना होगा।

if (animal == "dog") {
  const newArray = [...this.state.array]
  newArray[0] += 1;
  this.setState({ array: newArray })
}

यहां मैं सरणी स्प्रेड का उपयोग करता हूं। सरणी की प्रतिलिपि बनाएँ।

यदि आपके पास सरणी में केवल कुछ आइटम हैं, तो आप सरणी विध्वंसक उन्हें सार्थक नाम देने के लिए:

if (animal == "dog") {
  const [first, second] = this.state.array
  this.setState({ array: [first + 1, second] })
}

हालाँकि यदि ऐसा है, तो आप अपने राज्य के रूप में किसी सरणी के बजाय किसी वस्तु का उपयोग कर सकते हैं।

0
cbr 2 जुलाई 2020, 17:05

सेटस्टेट फ़ंक्शन के अंदर पिछले मान का उपयोग करने का प्रयास करें

onButtonClick(animal){
      if (animal == "dog"){
          this.setState((prev) => ({ ...prev, array: [prev.array[0]+ 1, ...prev.array] }))  
     }
0
Lucas Brogni 2 जुलाई 2020, 17:05

यदि आपको केवल राज्य में सरणी के पहले तत्व को बढ़ाने की आवश्यकता है। नए राज्य को पुराने के पहले तत्व के सरणी मान के साथ 1 से बढ़ाकर सेट करें और बाकी को फैलाएं।

this.state = { array: [0, 0] }

onButtonClick(animal) {
  if (animal == 'dog') {
    this.setState({
      array: [this.state.array[0] + 1, ...this.state.array.slice(1)]
    })
  }
}
0
hgb123 2 जुलाई 2020, 17:22