मैं प्रतिक्रिया के साथ सरणी मान कैसे अपडेट कर सकता हूं? मैं एक कन्स्ट्रक्टर में एक सरणी बनाता हूं और जब कोई उपयोगकर्ता बटन पर क्लिक करता है तो उसे उस विधि के साथ आने वाले पैरामीटर के आधार पर मेरे सरणी मानों को 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});
}
}
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] })
}
हालाँकि यदि ऐसा है, तो आप अपने राज्य के रूप में किसी सरणी के बजाय किसी वस्तु का उपयोग कर सकते हैं।
सेटस्टेट फ़ंक्शन के अंदर पिछले मान का उपयोग करने का प्रयास करें
onButtonClick(animal){
if (animal == "dog"){
this.setState((prev) => ({ ...prev, array: [prev.array[0]+ 1, ...prev.array] }))
}
यदि आपको केवल राज्य में सरणी के पहले तत्व को बढ़ाने की आवश्यकता है। नए राज्य को पुराने के पहले तत्व के सरणी मान के साथ 1 से बढ़ाकर सेट करें और बाकी को फैलाएं।
this.state = { array: [0, 0] }
onButtonClick(animal) {
if (animal == 'dog') {
this.setState({
array: [this.state.array[0] + 1, ...this.state.array.slice(1)]
})
}
}