Lav*_*aju 12 react-native react-native-android react-native-ios react-native-flatlist
嗨,我正在开发基于FlatList的示例应用程序,这是我的代码.实际上我显示了整个记录,比如我有50条记录到我的账户.但现在我显示了整整50条记录.Bur我需要在添加10条记录后显示10.但我不知道添加到FlatList.
这是我的代码:
<FlatList
data={this.state.profiles}
renderItem={({ item, index }) => this.renderCard(item, index)}
keyExtractor={item => item.id}
ItemSeparatorComponent={() => <Divider style={{ marginTop: 5, marginLeft: width * 0.2 + 20 }} parentStyle={{ backgroundColor: globalStyles.BG_COLOR, alignItems: 'baseline' }} />}
/>
renderCard (profile, index) {
console.log('rendercard', profile);
//
return (
<View key={profile.id}>
<ProfileCard
profile={profile}
style={styles.card}
onPress={() => this.props.screenProps.rootNavigation.navigate('Profile', { profile: this.state.profile, id: profile.id })}
// onPress={() => alert('PROFILE')}
onAddClick={() => this.setState({ connectionPageVisible: true, cardProfile: profile })}
connectedIds={(this.props.screenProps && this.props.screenProps.connectedIds) || this.props.connectedIds}
/>
</View>
);
}
Run Code Online (Sandbox Code Playgroud)
请告诉我使用活动指标加载更多记录.提前致谢
Pra*_*sun 13
如果我正确理解你的问题,那么你正在寻找infinite scrolling在Flatlist.您可以借助onEndReached和onEndThreshold属性实现此目的.
考虑以下原型
假设您正在存储记录this.state.profiles.
从服务器中提取新记录
在构造函数中设置初始页码
constructor(props){
super(props);
this.state = { page: 0}
}
Run Code Online (Sandbox Code Playgroud)
获取新记录
fetchRecords = (page) => {
// following API will changed based on your requirement
fetch(`${API}/${page}/...`)
.then(res => res.json())
.then(response => {
this.setState({
profiles: [...this.state.profiles, ...response.data] // assuming response.data is an array and holds new records
});
});
}
Run Code Online (Sandbox Code Playgroud)
处理滚动
onScrollHandler = () => {
this.setState({
page: this.state.page + 1
}, () => {
this.fetchRecords(this.state.page);
});
}
Run Code Online (Sandbox Code Playgroud)
渲染功能
render() {
return(
...
<FlatList
data={this.state.profiles}
renderItem={({ item, index }) => this.renderCard(item, index)}
keyExtractor={item => item.id}
ItemSeparatorComponent={() => <Divider style={{ marginTop: 5, marginLeft: width * 0.2 + 20 }} parentStyle={{ backgroundColor: globalStyles.BG_COLOR, alignItems: 'baseline' }} />}
onEndReached={this.onScrollHandler}
onEndThreshold={0}
/>
...
);
}
Run Code Online (Sandbox Code Playgroud)
本地更新
如果您已经提取了所有数据,但希望10一次只显示,那么您需要做的就是更改数据fetchRecords
fetchRecords = (page) => {
// assuming this.state.records hold all the records
const newRecords = []
for(var i = page * 10, il = i + 10; i < il && i < this.state.records.length; i++){
newRecords.push(this.state.records[i]);
}
this.setState({
profiles: [...this.state.profiles, ...newRecords]
});
}
Run Code Online (Sandbox Code Playgroud)
Activity Indicator拉动记录时将显示上述方法.
希望这会有所帮助!
| 归档时间: |
|
| 查看次数: |
8873 次 |
| 最近记录: |