আমি আইওএস এবং অ্যান্ড্রয়েড উভয়ের জন্য রিএকটিএটিভের সাথে একটি অ্যাপ তৈরি করেছি ListView
। বৈধ ডেটাসোর্স দ্বারা তালিকার দর্শনটি পপুলেট করার সময়, নিম্নলিখিত সতর্কতাটি স্ক্রিনের নীচে মুদ্রিত হয়:
সতর্কতা: একটি অ্যারে বা পুনরুক্তি করা প্রতিটি শিশুর একটি অনন্য "কী" প্রপস থাকা উচিত। এর রেন্ডার পদ্ধতিটি পরীক্ষা করুন
ListView
।
এই সতর্কতার উদ্দেশ্য কী? বার্তার পরে তারা এই পৃষ্ঠায় লিঙ্ক করে , যেখানে সম্পূর্ণ বিভিন্ন বিষয় নিয়ে আলোচনা করা হয়েছে যা দেশীয় প্রতিক্রিয়াটির সাথে কোনও সম্পর্ক নেই, তবে ওয়েব ভিত্তিক বিক্রিয়াগুলির সাথে।
আমার তালিকাভিউ সেই বিবৃতি দিয়ে নির্মিত:
render() {
var store = this.props.store;
return (
<ListView
dataSource={this.state.dataSource}
renderHeader={this.renderHeader.bind(this)}
renderRow={this.renderDetailItem.bind(this)}
renderSeparator={this.renderSeparator.bind(this)}
style={styles.listView}
/>
);
}
আমার ডেটা সোর্স এ জাতীয় কিছু নিয়ে গঠিত:
var detailItems = [];
detailItems.push( new DetailItem('plain', store.address) );
detailItems.push( new DetailItem('map', '') );
if(store.telefon) {
detailItems.push( new DetailItem('contact', store.telefon, 'Anrufen', 'fontawesome|phone') );
}
if(store.email) {
detailItems.push( new DetailItem('contact', store.email, 'Email', 'fontawesome|envelope') );
}
detailItems.push( new DetailItem('moreInfo', '') );
this.setState({
dataSource: this.state.dataSource.cloneWithRows(detailItems)
});
এবং তালিকাগুলি-সারিগুলিকে এই জাতীয় সামগ্রীর সাথে রেন্ডার করা হয়:
return (
<TouchableHighlight underlayColor='#dddddd'>
<View style={styles.infoRow}>
<Icon
name={item.icon}
size={30}
color='gray'
style={styles.contactIcon}
/>
<View style={{ flex: 1}}>
<Text style={styles.headline}>{item.headline}</Text>
<Text style={styles.details}>{item.text}</Text>
</View>
<View style={styles.separator}/>
</View>
</TouchableHighlight>
);
আমার কাছে সম্পূর্ণ সতর্কবাণী বলে মনে হচ্ছে এমন সতর্কতা বাদে সবকিছু ঠিকঠাক এবং প্রত্যাশার মতো কাজ করে।
আমার "বিবরণ আইটেম" -ক্লাসে কী-সম্পত্তি যুক্ত করা সমস্যার সমাধান করেনি।
এটি হ'ল "ক্লোনওথরউজ" এর ফলস্বরূপ তালিকাভিউতে আসলে কী পাস হবে:
_dataBlob:
I/ReactNativeJS( 1293): { s1:
I/ReactNativeJS( 1293): [ { key: 2,
I/ReactNativeJS( 1293): type: 'plain',
I/ReactNativeJS( 1293): text: 'xxxxxxxxxx',
I/ReactNativeJS( 1293): headline: '',
I/ReactNativeJS( 1293): icon: '' },
I/ReactNativeJS( 1293): { key: 3, type: 'map', text: '', headline: '', icon: '' },
I/ReactNativeJS( 1293): { key: 4,
I/ReactNativeJS( 1293): type: 'contact',
I/ReactNativeJS( 1293): text: '(xxxx) yyyyyy',
I/ReactNativeJS( 1293): headline: 'Anrufen',
I/ReactNativeJS( 1293): icon: 'fontawesome|phone' },
I/ReactNativeJS( 1293): { key: 5,
I/ReactNativeJS( 1293): type: 'contact',
I/ReactNativeJS( 1293): text: 'xxxxxxxxx@hotmail.com',
I/ReactNativeJS( 1293): headline: 'Email',
I/ReactNativeJS( 1293): icon: 'fontawesome|envelope' },
I/ReactNativeJS( 1293): { key: 6, type: 'moreInfo', text: '', headline: '', icon: '' } ] },
একটি কী হিসাবে দেখুন, প্রতিটি রেকর্ডের একটি মূল সম্পত্তি রয়েছে। সতর্কতা এখনও বিদ্যমান।
DetailItem
s এর চাবি থাকা দরকার। যদি তাদের কাছে ইতিমধ্যে অনন্য কী রয়েছে তবে আপনার অন্যান্য রেন্ডার পদ্ধতিগুলি (renderHeader, renderDetailItem, renderSeparator
) দেখানো দরকার । তারা সূক্ষ্মভাবে কাজ করছে এবং প্রত্যাশা করা হচ্ছে যতক্ষণ না ডেটা উত্স কোনওভাবে সংশোধন করা হয় (সারিগুলি সরানো হয়, উদাহরণস্বরূপ) কোন মুহূর্তে প্রতিক্রিয়া জানবে না যে তাদের কোনও অনন্য সনাক্তকারী না থাকলে তাদের সাথে কী করা উচিত।