जवाबों:
this.state.myArray.push('new value')
विस्तारित सरणी की लंबाई देता है, सरणी के बजाय ही। Array.prototyp.push () ।
मुझे लगता है कि आप ऐरे होने के लिए दिए गए मान की अपेक्षा करते हैं।
ऐसा लगता है कि यह प्रतिक्रिया का व्यवहार है:
कभी भी इसे बदल न दें। सीधे सेट करें, जैसे कि सेटस्टैट () बाद में आपके द्वारा किए गए उत्परिवर्तन को बदल सकता है। यह समझो कि यह अपरिवर्तनीय है। React.Component ।
मुझे लगता है, आप इसे इस तरह से करेंगे (प्रतिक्रिया से परिचित नहीं):
var joined = this.state.myArray.concat('new value');
this.setState({ myArray: joined })
setState()
घटक राज्य में परिवर्तन करता है और प्रतिक्रिया देता है कि इस घटक और उसके बच्चों को अद्यतन स्थिति के साथ फिर से प्रस्तुत करने की आवश्यकता है। इसलिए मुझे लगता है कि इसे स्थापित करने के ठीक बाद उस समय इसे अपडेट नहीं किया गया। क्या आप कृपया एक कोड उदाहरण पोस्ट कर सकते हैं, जहां हम यह देख सकते हैं कि आप किस बिंदु को सेट और लॉग इन कर रहे हैं, कृपया?
concat()
विधि के लिए मान्य हैं । देखें: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ( Arrays और / या मानों को एक नए सरणी में
Es6 का उपयोग करके इसे इस तरह किया जा सकता है:
this.setState({ myArray: [...this.state.myArray, 'new value'] }) //simple value
this.setState({ myArray: [...this.state.myArray, ...[1,2,3] ] }) //another array
this.props
और this.state
अतुल्यकालिक रूप से अपडेट किया जा सकता है, आपको अगले राज्य की गणना के लिए उनके मूल्यों पर भरोसा नहीं करना चाहिए।" एक सरणी को संशोधित करने के मामले में, चूंकि सरणी पहले से ही एक संपत्ति के रूप में मौजूद है this.state
और आपको एक नया मान सेट करने के लिए इसके मूल्य को संदर्भित करने की आवश्यकता है, आपको setState()
एक तर्क के रूप में पिछले राज्य के साथ एक फ़ंक्शन को स्वीकार करने के रूप में उपयोग करना चाहिए । उदाहरण: this.setState(prevState => ({ myArray: [...this.state.myArray, 'new value'] }));
देखें: reactjs.org/docs/...
राज्य को सीधे म्यूट करने की अनुशंसा कभी नहीं की गई।
बाद के रिएक्ट संस्करणों में अनुशंसित दृष्टिकोण रेस स्थितियों को रोकने के लिए राज्यों को संशोधित करते समय एक अपडेटर फ़ंक्शन का उपयोग करना है:
सरणी के अंत में स्ट्रिंग को पुश करें
this.setState(prevState => ({
myArray: [...prevState.myArray, "new value"]
}))
सरणी की शुरुआत करने के लिए स्ट्रिंग को पुश करें
this.setState(prevState => ({
myArray: ["new value", ...prevState.myArray]
}))
सरणी के अंत में ऑब्जेक्ट पुश करें
this.setState(prevState => ({
myArray: [...prevState.myArray, {"name": "object"}]
}))
सरणी की शुरुआत में ऑब्जेक्ट को पुश करें
this.setState(prevState => ({
myArray: [ {"name": "object"}, ...prevState.myArray]
}))
this.setState((prevState) => ({ myArray: [values, ...prevState.myArray], }));
आपको राज्य का संचालन बिल्कुल नहीं करना चाहिए। कम से कम, सीधे नहीं। यदि आप अपने एरे को अपडेट करना चाहते हैं, तो आप ऐसा कुछ करना चाहेंगे।
var newStateArray = this.state.myArray.slice();
newStateArray.push('new value');
this.setState(myArray: newStateArray);
राज्य वस्तु पर सीधे काम करना वांछनीय नहीं है। आप रिएक्ट के अपरिवर्तनीय सहायकों पर भी नज़र डाल सकते हैं।
.slice()
एक नया एरे बनाने और अपरिवर्तनीयता को संरक्षित करने के लिए भी उपयोग करता है। सहायता के लिए धन्यवाद।
आप .concat
नए डेटा के साथ अपने एरे की कॉपी बनाने के लिए विधि का उपयोग कर सकते हैं :
this.setState({ myArray: this.state.myArray.concat('new value') })
लेकिन .concat
सरणियों को पारित करते समय विधि के विशेष व्यवहार से सावधान रहें - [1, 2].concat(['foo', 3], 'bar')
परिणाम होगा [1, 2, 'foo', 3, 'bar']
।
यह कोड मेरे लिए काम करता है:
fetch('http://localhost:8080')
.then(response => response.json())
.then(json => {
this.setState({mystate: this.state.mystate.push.apply(this.state.mystate, json)})
})
fetch(`api.openweathermap.org/data/2.5/forecast?q=${this.searchBox.value + KEY} `) .then( response => response.json() ) .then( data => { this.setState({ reports: this.state.reports.push.apply(this.state.reports, data.list)}); });
this.state = { reports=[] }
अगर आप भी उर यूआई चाहते हैं (यानी उर फ्लैट लिस्ट) अप टू डेट, प्रीवस्टेट का उपयोग करें: नीचे दिए गए उदाहरण में यदि उपयोगकर्ता बटन पर क्लिक करता है, तो यह सूची में एक नया ऑब्जेक्ट जोड़ने जा रहा है (मॉडल और यूआई दोनों में) )
data: ['shopping','reading'] // declared in constructor
onPress={() => {this.setState((prevState, props) => {
return {data: [new obj].concat(prevState.data) };
})}}.
निम्नलिखित तरीके से हम वस्तुओं की जाँच और अद्यतन कर सकते हैं
this.setState(prevState => ({
Chart: this.state.Chart.length !== 0 ? [...prevState.Chart,data[data.length - 1]] : data
}));
यहां आप ऑब्जेक्ट को इस तरह राज्य सरणी में नहीं धकेल सकते हैं। आप सामान्य सरणी में अपने तरीके से धक्का दे सकते हैं। यहां आपको राज्य सेट करना होगा,
this.setState({
myArray: [...this.state.myArray, 'new value']
})
यदि आप केवल राज्य को अपडेट करने का प्रयास कर रहे हैं तो
handleClick() {
this.setState(
{myprop: this.state.myprop +1}
})
}
इस दृष्टिकोण पर विचार करें
handleClick() {
this.setState(prevState => {
return {
count: prevState.count + 1
}
})
}
असल में prevState यह लिख रहा है। हमारे लिए।
console.log(this.state.myArray)
करता हूं तो यह हमेशा पीछे रहता है। कोई विचार क्यों?