这是一个适用于渲染数据很多时候的无限缓存列表,使用方式和接口和ListView基本一致,但性能比ListView更好
使用方式同 ListView
组件一致,通过 dataSource
属性传递待渲染的数据源,renderRow
属性定义每一行的渲染函数。
<InfiniteListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text style={{ padding: 20, fontSize: 15, backgroundColor: getRandomColor() }}>{rowData}</Text>}
/>
InfiniteListView
列表项每行必须设定一个给定高度,不等高情况下可以通过 configureRowHeight
属性进行指定。
<InfiniteListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text style={{ padding: 20, fontSize: 15, backgroundColor: getRandomColor() }}>{rowData}</Text>}
configureRowHeight={(rowData, rowIndex) => {return rowIndex % 10 === 0 ? 120 : 100}}
/>
如果列表项滑动过快,滚动窗口到达的区域对应的列表项尚未开始渲染,则会出现短暂的白屏现象。对此,我们可以通过 limitedWindow
属性限制滚动窗口仅到达滑动到已经渲染完成的列表项区域,尚未完成渲染的列表项区域暂时无法进入滚动窗口。
import React, { Component } from 'react';
import { View, Text } from 'react-native';
import { InfiniteListView } from 'qunar-react-native';
export default class InfiniteListViewExample extends Component {
constructor(props){
super(props);
const ds = new InfiniteListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2,
});
const rows = [];
for(let i = 0; i < 200; i++){
rows.push(i)
}
this.dataSource = ds.cloneWithRows(rows);
}
render() {
return (
<View style={{ flexGrow: 1, flexShrink: 1 }}>
<InfiniteListView
limitedWindow
dataSource={this.dataSource}
renderRow={(rowData) => <Text style={{ padding: 20, fontSize: 15, backgroundColor: getRandomColor() }}>{rowData}</Text>}
/>
</View>
)
}
}
const getRandomColor = () => {
const letters = '3456789ABC'.split('');
let color = '#';
for (let i = 0; i < 6; i++ ) {
color += letters[Math.floor(Math.random() * 10)];
}
return color;
};
源数据。
指定在组件刚挂载的时候渲染多少行数据。用这个属性来确保首屏显示合适数量的数据,而不是花费太多帧逐步显示出来。
当所有的数据都已经渲染过,并且列表被滚动到距离最底部不足onEndReachedThreshold个像素的距离时调用。原生的滚动事件会被作为参数传递。
调用onEndReached之前的临界值,单位是像素。
每次事件循环(每帧)渲染的行数。
() => renderable
页头与页脚会在每次渲染过程中都重新渲染(如果提供了这些属性)。如果它们重绘的性能开销很大,可以考虑使用renderStaticHeader/renderStaticFooter。页脚会永远在列表的最底部,而页头会在最顶部。
返回值: renderable 页头组件
() => renderable
同renderFooter,渲染页尾组件。
返回值: renderable 页尾组件
() => renderable
只渲染一次的头部组件。
返回值: renderable 页头组件
() => renderable
只渲染一次的尾部组件。
返回值: renderable 页尾组件
(rowData, sectionID, rowID, highlightRow) => renderable
从数据源(Data source)中接受一条数据,以及它和它所在section的ID。返回一个可渲染的组件来为这行数据进行渲染。默认情况下参数中的数据就是放进数据源中的数据本身,不过也可以提供一些转换器。
方法参数:
参数名 | 类型 | 描述 | 支持版本 |
---|---|---|---|
rowData | React.PropTypes.any | 数据源中的数据 | |
sectionID | string | 所处section名 | |
rowID | number | 所处section中的index | |
highlightRow | function | 通过调用该函数可通知InfiniteListView高亮该行 |
返回值: renderable 每行渲染组件
(props) => renderable
指定一个函数,在其中返回一个可以滚动的组件。InfiniteListView将会在该组件内部进行渲染。默认情况下会返回一个包含指定属性的ScrollView。
方法参数:
参数名 | 类型 | 描述 | 支持版本 |
---|---|---|---|
可滚动组件的属性 | object |
返回值: renderable 可滚动组件
当一个行接近屏幕范围多少像素之内的时候,就开始渲染这一行。
如果提供了此属性,会使用原生ScrollView,配置了renderScrollComponent时不生效。
限制滚动窗口以防止渲染跟不上滑动速度,默认 false
触发onScroll最小间隔毫秒数,默认值为50。
(rowData, rowID) => number 指定每一行的高度。
同ScrollView,当前组件有refreshControl属性,并且没有正在下拉刷新,则强制触发下拉刷新,变成正在刷新的状态。
同ScrollView,当前组件有refreshControl属性,并且正在下拉刷新,则停止下拉刷新的状态。
同ScrollView,当前组件有loadControl属性,并且没有正在加载,则强制触发加载更多,变成正在加载更多的状态。
同ScrollView,当前组件有loadControl属性,并且正在加载,则停止加载更多的状态。
同ScrollView ScrollTo。
第一个参数为目标index,第二个参数为configs对象,里面可配置animated: bool。
立即回到顶部,相当于scrollTo({y: 0})
获取ScrollView,当使用原生ScrollView时(useOriginScrollView属性为true)返回滚动响应器。
返回值: scrollResponder ScrollView,当使用原生ScrollView时返回滚动响应器