2017-10-27 4 views
0

FlatListの中に私のアイテムのうちの3つだけをレンダリングしたいと思います。後でテキストをクリックすると、新しいアイテムがレンダリングされます。ここフラットリストの中に3つのアイテムしかレンダリングしない

はサンプルコードです:

export default class FlatListBasics extends Component { 
renderNewItem =() => { 
// do something here 
} 
     render() { 
     return (
      <View style={styles.container}> 
      <FlatList 
       data={[ 
       {key: 'Devin'}, 
       {key: 'Jackson'}, 
       {key: 'James'}, 
       {key: 'Joel'}, 
       {key: 'John'}, 
       {key: 'Jillian'}, 
       {key: 'Jimmy'}, 
       {key: 'Julie'}, 
       ]} 
       renderItem={({item}) => <Text onPress={this.renderNewItem}>{item.key}</Text>} 
      /> 
      </View> 
     ); 
     } 

私はこれを達成することができ、どのように?

let state = { 
    data = [{key: "Devin"}, {key: "Jackson"}, {key: "James"}] 
} 

をそして、あなたのFlatListをレンダリング: }

答えて

2

Array.prototype.slice()を使用して、レンダリングされるデータの量を制御できます。あなたの状態にカウントを設定し、ボタンを押すたびに1を加えます。この方法では、データの読み込み方法に依存しません。ローカルデータソースを使用することも、APIを使用してリモートデータソースを使用することもできます。もう1つの重要なポイントは、keyExtractorを追加して、再レンダリングのパフォーマンスを向上させることです。

const data = [ 
    {key: 'Devin'}, 
    {key: 'Jackson'}, 
    {key: 'James'}, 
    {key: 'Joel'}, 
    {key: 'John'}, 
    {key: 'Jillian'}, 
    {key: 'Jimmy'}, 
    {key: 'Julie'}, 
]; 
class FlatListBasics extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     itemsCount: 3 
    }; 
    } 
    renderNewItem =() => { 
    if (this.state.itemsCount < data.length) { 
     this.setState((prevState) => ({ itemsCount: (prevState.itemsCount + 1) })); 
    } 
    } 
    render() { 
    return (
     <View style={styles.container}> 
     <FlatList 
      data={data.slice(0, this.state.itemsCount)} 
      keyExtractor={(item, index) => item.key;} 
      renderItem={({ item }) => <Text onPress={this.renderNewItem}>{item.key}</Text>} 
     /> 
     </View> 
    ); 
    } 
} 
+0

私はこれが私が探しているものだと思います、テスト後に私のコードで受け入れます、ありがとう – 2r83

+0

魅力のように動作します。承認済みとしてマークする – 2r83

1

だからまず、あなたのコンストラクタであなたの3つの項目のデータを準備します。

その後、renderItemに、あなたはあなたのdata

renderItem =() => { 
    <TouchableOpacity onPress=() => { this.setState({data: this.state.data.pushBack(/*your new item here*/)}) } 
    </TouchableOpacity> 
} 

this.setStateに項目を追加しますonPressは、したがって、それは、新たな追加項目が表示されます、再度レンダリングするためにすべてを強制する必要があります。

+0

このように私は私のstate.dataに最初の3項目を保存する必要があり、データは20の項目でバックエンドから来たと言った作品、1つのより多くの質問は、その後にstate.dataを供給しますフラットリスト。ボタンを押した後、setStateを呼び出してstate.dataにデータを追加しますか? – 2r83

+1

@ 2r83が正しい。したがって、20個のアイテムを受け取り、それらをローカルに(または一部のグローバル変数または状態に)格納します。それから、各プレス(プレス上で実行したいので)で、サーバーデータから最初の項目を削除し、表示されたデータに追加します。私の答えの 'データ'が表示されたデータであることを考慮に入れて –

関連する問題