ऐसा करने के कई तरीके हैं, चूंकि राज्य अपडेट एक एसिंक्स ऑपरेशन है , इसलिए राज्य ऑब्जेक्ट को अपडेट करने के लिए, हमें अपडेटर फ़ंक्शन के साथ उपयोग करना होगा setState
।
1- सबसे सरल:
पहले उसकी एक प्रति बनाएँ jasper
फिर उसमें बदलाव करें:
this.setState(prevState => {
let jasper = Object.assign({}, prevState.jasper); // creating copy of state variable jasper
jasper.name = 'someothername'; // update the name property, assign a new value
return { jasper }; // return new object jasper object
})
उपयोग करने के बजाय Object.assign
हम इसे इस तरह भी लिख सकते हैं:
let jasper = { ...prevState.jasper };
2- प्रसार ऑपरेटर का उपयोग करना :
this.setState(prevState => ({
jasper: { // object that we want to update
...prevState.jasper, // keep all other key-value pairs
name: 'something' // update the value of specific key
}
}))
नोट: Object.assign
और Spread Operator
केवल उथली प्रतिलिपि बनाता है , इसलिए यदि आपने नेस्टेड ऑब्जेक्ट या ऑब्जेक्ट की सरणी को परिभाषित किया है, तो आपको एक अलग दृष्टिकोण की आवश्यकता है।
नेस्टेड स्टेट ऑब्जेक्ट को अपडेट करना:
मान लें कि आपने राज्य को इस प्रकार परिभाषित किया है:
this.state = {
food: {
sandwich: {
capsicum: true,
crackers: true,
mayonnaise: true
},
pizza: {
jalapeno: true,
extraCheese: false
}
}
}
पिज्जा ऑब्जेक्ट की अतिरिक्त मात्रा को अद्यतन करने के लिए:
this.setState(prevState => ({
food: {
...prevState.food, // copy all other key-value pairs of food object
pizza: { // specific object of food object
...prevState.food.pizza, // copy all pizza key-value pairs
extraCheese: true // update value of specific key
}
}
}))
वस्तुओं की अद्यतन सारणी:
मान लें कि आपके पास एक टूडू ऐप है, और आप इस रूप में डेटा का प्रबंधन कर रहे हैं:
this.state = {
todoItems: [
{
name: 'Learn React Basics',
status: 'pending'
}, {
name: 'Check Codebase',
status: 'pending'
}
]
}
किसी भी टॉड ऑब्जेक्ट की स्थिति को अपडेट करने के लिए, ऐरे पर एक मैप चलाएं और प्रत्येक ऑब्जेक्ट के कुछ अनूठे मान के लिए जाँच करें, यदि condition=true
कोई नई वस्तु लौटाए, तो अपडेटेड वैल्यू के साथ, वही ऑब्जेक्ट।
let key = 2;
this.setState(prevState => ({
todoItems: prevState.todoItems.map(
el => el.key === key? { ...el, status: 'done' }: el
)
}))
सुझाव: यदि ऑब्जेक्ट का कोई विशिष्ट मान नहीं है, तो सरणी इंडेक्स का उपयोग करें।
age
संपत्ति खो दी होगीjasper
।