2017-07-26 61 views
1

我使用的反应本地Flatlist和反应本土元素ListItem反应原生限列表项

我想最初限制被装上screen.Otherwise其列表项的数目加载我最初的所有项目。

假设我有300列表项但最初我只是想加载,而不是300

我的代码10项:

import React, { Component } from 'react' 
import { 
    FlatList 
} from 'react-native' 

import {Avatar,Tile,ListItem} from 'react-native-elements' 

export default class Login extends Component{ 
constructor(props) { 
    super(props); 


this.state = { 
    data:[], 
    dataSource: [] 

    }; 
    } 


renderList(item,i){ 


    return(

<View> 
<ListItem 

subtitle={ 
<Avatar 
    small 
    rounded 
    source={{uri: "https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg"}} 

/> 
{<Text>{item.body}</Text>} 
} 

/> 
<View> 
    ) 
} 

render(){ 
    return( 
     <View> 
<List> 
<FlatList 
     data={this.state.data} 
     keyExtractor={item => item.id} 
     renderItem ={({item,index}) => this.renderList(item,index)} 
     /> 
</List> 
</View> 
    ) 
    } 
} 

回答

3

基本上,你需要的是实现排序分页的。您可以通过使用onEndReachedonEndReachedThreshold(更多详细信息请参阅hereFlatList来在用户到达列表末尾时加载更多数据。

你可以改变你的代码如下所示:

import React, { Component } from 'react'; 
import { FlatList } from 'react-native'; 

import { Avatar, Tile, ListItem } from 'react-native-elements'; 

const initialData = [0,...,299]; //all 300. Usually you receive this from server or is stored as one batch somewhere 
const ITEMS_PER_PAGE = 10; // what is the batch size you want to load. 
export default class Login extends Component { 
    constructor(props) { 
    super(props); 

    this.state = { 
     data: [0,..., 9], // you can do something like initialData.slice(0, 10) to populate from initialData. 
     dataSource: [], 
     page: 1, 
    }; 
    } 

    renderList(item, i) { 
    return (
     <View> 
     <ListItem /> 
     </View> 
    ); 
    } 

    loadMore() { 
    const { page, data } = this.state; 
    const start = page*ITEMS_PER_PAGE; 
    const end = (page+1)*ITEMS_PER_PAGE-1; 

    const newData = initialData.slice(start, end); // here, we will receive next batch of the items 
    this.setState({data: [...data, ...newData]}); // here we are appending new batch to existing batch 
    } 


    render() { 
    return (
     <View> 
     <FlatList 
      data={this.state.data} 
      keyExtractor={item => item.id} 
      renderItem={({ item, index }) => this.renderList(item, index)} 
      onEndReached={this.loadMore} 
     /> 
     </View> 
    ); 
    } 
} 
+0

它真的很适合我谢谢:)) –