(私は反応的な例を共有するためのサイトがあるが、私はGoogleを介してそれらを見つけることができなかった; "ネイティブシェアコードに反応する"は単に "例"と同じ - 共有ボタンのコードを思い付く。これには良いサイトがありますか?)このListViewには10個のアイテムしか表示されないのはなぜですか?
私はリストビューを持っています(これはanswerのおかげで、@ colin-ramsayへのクレジット)。私がしたいのは、各リストビューの中にいくつかのアイテムを入れ、それらをコンテナの内部に合わせることです(チェックボックスと同じ行のラベル)。しかし、私は20項目のこの配列が10項目しか表示していない理由を理解することができないので、それを得ることはできません。
警告は、発砲すると20個のアイテム(0-19)を表示します。
コード:
import React, {Component} from 'react';
import {View, Text, StyleSheet, ListView} from 'react-native';
var styles = StyleSheet.create({
container:{
marginTop:65,
margin:10, backgroundColor:"#DDDDEE"
},
list:{
height:400,
marginTop:40,
flexDirection:'row',
flexWrap:'wrap', justifyContent:'center', alignItems:'flex-start'
},
item:{
alignItems:'flex-start',
backgroundColor:'red', width:40, height:40, margin:3, padding:3,
justifyContent:'center', alignItems:'center'
}
});
class TestCmp extends Component {
constructor(props) {
super(props);
var ds = new ListView.DataSource({rowHasChanged:(r1, r2) => r1 !== r2});
var data = Array.apply(null, {length:20}).map(Number.call, Number);
alert(data);
this.state = {dataSource:ds.cloneWithRows(data)};
}
render() {
return (
<ListView contentContainerStyle={styles.list} dataSource={this.state.dataSource} renderRow={
(rowData) => {
return (
<View style={styles.item}>
<Text>{rowData}</Text>
</View>
)
}
}/>
);
}
}
export default class TestPage extends Component {
render() {
return (
<View style={styles.container}>
<TestCmp/>
</View>
)
}
}
が、他の10個の項目に何が起こったのか?インスペクタを使用してコンテナの高さを変更しようとしましたが、何も効果がありませんでした。
これは完全にうんざりです。そのコンテナは巨大です - そうでなければ、ページが完全に空のときにアイテムの一部をランダムに表示するだけの理由は何ですか? 'View'要素で' Array.map'を使うだけでいいのですか?よりシンプルで面白いルールはありません。 – jcollum
はい。要素数がそれほど多くない場合、ListViewを使用する理由はありません。 – Jickson
ListViewを使用する主な利点は、レンダリングの最適化であり、 'initialListSize'を項目数に設定すると、絶対に役に立たなくなります。複雑なリスト項目では、UIを応答しないようにするために10個の初期レンダリングでも十分です。 – farwayer