UNPKG

weex-nuke

Version:

基于 Rax 、Weex 的高性能组件体系 ~~

172 lines (160 loc) 3.72 kB
# ListView 基本使用 - order: 0 - title_en: ListView usage --- ```js <NukePlayGround> <ListView renderHeader={func} renderFooter={func} renderRow={func} dataSource={[dataArray]} style={style} onEndReached={LoadMore func} /> </NukePlayGround> ``` --- ```js /** @jsx createElement */ import { createElement, PureComponent, Component, render } from 'rax'; import View from 'nuke-view'; import Text from 'nuke-text'; import RefreshControl from 'nuke-refresh-control'; import Touchable from 'nuke-touchable'; import ListView from 'nuke-list-view'; const originalData = []; for (let i = 0; i < 20; i++) { originalData.push({ id: i, text: '列表项' }); } class ListItem extends PureComponent { render() { const { id, text, onPress } = this.props; return ( <Touchable id={`cell_${id}`} style={styles.cellItem} onPress={() => { onPress(id); }}> <Text style={styles.itemTextList}> {text}-{id} </Text> </Touchable> ); } } class ListViewDemo extends Component { constructor() { super(); this.state = { data: [...originalData], isRefreshing: false, showLoading: true, refreshText: '↓ 下拉刷新' }; this.onRefresh = this.onRefresh.bind(this); this.renderItem = this.renderItem.bind(this); this.onLoadMore = this.onLoadMore.bind(this); this.renderHeader = this.renderHeader.bind(this); this.renderFooter = this.renderFooter.bind(this); } onItemPress(index) { console.log(`clicked ${index}`); } onRefresh(e) { this.setState({ isRefreshing: true, refreshText: '加载中' }); setTimeout(() => { this.setState({ isRefreshing: false, data: [...originalData], refreshText: '↓ 下拉刷新' }); }, 1000); } onLoadMore() { // 模拟网络加载 setTimeout(() => { this.state.data.push({ id: 'b100', text: '新数据' }); this.setState({ data: this.state.data }); }, 300); } renderHeader() { return ( <RefreshControl style={styles.refresh} refreshing={this.state.isRefreshing} onRefresh={this.onRefresh}> <Text style={styles.loadingText}>{this.state.refreshText}</Text> </RefreshControl> ); } renderItem(item, index) { return <ListItem id={item.id} text={item.text} onPress={this.onItemPress} />; } renderFooter() { this.state.showLoading ? ( <View style={[styles.loading]}> <Text style={styles.loadingText}>加载中...</Text> </View> ) : null; } render() { const { data } = this.state; return ( <ListView renderHeader={this.renderHeader} renderFooter={this.renderFooter} renderRow={this.renderItem} dataSource={data} style={styles.listContainer} onEndReached={this.onLoadMore} /> ); } } const styles = { listContainer: { flex: 1 }, cellItem: { backgroundColor: '#ffffff', 'backgroundColor:active': '#f2f3f7', height: 160, flex: 1, alignItems: 'center', justifyContent: 'center', borderBottomWidth: 1, borderBottomStyle: 'solid', borderBottomColor: '#e6e7eb' }, itemTextList: { fontSize: 32, color: '#5F646E' }, refresh: { height: 80, width: 750, backgroundColor: '#cccccc', justifyContent: 'center', alignItems: 'center' }, loading: { height: 80, width: 750, flexDirection: 'row', backgroundColor: '#cccccc', alignItems: 'center', justifyContent: 'center' }, loadingText: { color: '#666666' } }; render(<ListViewDemo />); ```