प्रतिक्रिया मूल निवासी ListView: पंक्तियाँ फिर से प्रतिपादन नहीं कर रहे हैं डेटा स्रोत राज्य बदल गया है के बाद।प्रतिक्रिया मूल निवासी ListView पंक्ति नहीं फिर से प्रतिपादन राज्य परिवर्तन के बाद
यहाँ मेरी कोड का एक सरलीकृत संस्करण है:
render(): {
return <ListView
dataSource={this.state.DS}
renderRow={this.renderRow}/>
}
renderRow(item): {
return <TouchableOpacity onPress={() => this.handlePress(item)}>
{this.renderButton(item.prop1)}
</TouchableOpacity>
}
renderButton(prop1): {
if (prop1 == true) {
return <Text> Active </Text>
} else {
return <Text> Inactive </Text>
}
}
handlePress(item): {
**Change the prop1 of *item* in an array (clone of dataSource), then**
this.setState({
DS: this.state.DS.cloneWithRows(arrayFromAbove)
})
}
फेसबुक के उदाहरण के अनुसार, ListView हर बार डेटा स्रोत बदल गया है rerender माना जाता है। क्या ऐसा इसलिए है क्योंकि मैं केवल डेटा स्रोत में किसी आइटम की संपत्ति बदल रहा हूं? ऐसा लगता है कि रेंडररो फ़ंक्शन दोबारा प्रतिपादन नहीं कर रहा है, लेकिन रेंडर() फ़ंक्शन डेटासोर्स परिवर्तन से है।
धन्यवाद।
धन्यवाद और अधिक पढ़ सकते हैं! मैंने निश्चित रूप से मेरी परियोजना में भी ऐसा ही किया है। मेरा मानना है कि समस्या यह है कि जब सूची स्रोत ऑब्जेक्ट्स की सरणी है और केवल एक ऑब्जेक्ट की एक संपत्ति बदल जाती है तो ListView एक पंक्ति को फिर से प्रस्तुत नहीं करता है। कंसोल मुझे बताता है कि डेटा स्रोत में एक ऑब्जेक्ट की संपत्ति वास्तव में बदल गई है, लेकिन ListView इसे पहचानता है और बदली गई पंक्ति को पुन: प्रस्तुत नहीं करता है। क्या आपके पास इसके लिए एक संभावित कामकाज है? – skleest
अगर आप इसे कॉल करते हैं तो यह फिर से प्रस्तुत होगा .सेटस्टेट। क्या आप यहां इस मुद्दे को डुप्लिकेट कर सकते हैं: https://rnplay.org/apps/Dw08-g। –
निश्चित रूप से, इसे यहाँ दोहराया गया है (https://rnplay.org/apps/1-sNcQ)। ऐसा लगता है कि डेटासोर्स बदल रहा है लेकिन रेंडररो फ़ंक्शन नहीं चल रहा है। धन्यवाद। – skleest