UNPKG

weex-nuke

Version:

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

157 lines (147 loc) 3.48 kB
# ScrollView 包含下拉刷新特性 * order: 0 - title_en: includes pull-down refresh feature 包含下拉刷新特性 --- ```js /** @jsx createElement */ import { View, Text, ScrollView, RefreshControl } from 'weex-nuke'; <NukePlayGround> //初始 state constructor() { super(); this.state={ isRefreshing: false, refreshText: '↓ 下拉刷新', data:[ //...省略部分代码 ] } } handleRefresh =()=>{ this.setState({ isRefreshing: true, refreshText: '加载中', }); // mock ajax 此处替换为你的 ajax 请求 setTimeout(() => { this.setState({ isRefreshing: false, data: [ // data 字段变更 ], refreshText: '↓ 下拉刷新', }); }, 1000); } render(){ return( <ScrollView> <RefreshControl isRefreshing={this.state.isRefreshing} style={{width:750,height:100}} onRefresh={this.handleRefresh}> <Text>{this.state.refreshText}</Text> </RefreshControl> {/* 此处为你的内容区域 */} <ScrollView> ) } </NukePlayGround> ``` --- ```js import { createElement, Component, render } from 'rax'; let App = class NukeDemoIndex extends Component { constructor() { super(); this.state = { isRefreshing: false, refreshText: '↓ 下拉刷新', data: [ { key: 'A', bg: '#1170bc', color: '#ffffff' }, { key: 'B', bg: '#3089dc', color: '#ffffff' }, { key: 'C', bg: '#f1f1f1', color: '#3d4145' }, { key: 'F', bg: 'yellow', color: '#ffffff' }, { key: 'G', bg: 'red', color: '#ffffff' } ] }; } getViews() { let doms = []; this.state.data.map((item, index) => { doms.push( <View style={[styles.item, { backgroundColor: item.bg }]}> <Text style={{ color: item.color }}>{item.key}</Text> </View> ); }); doms.push(null); return doms; } handleRefresh = () => { console.log('trigger refresh'); this.setState({ isRefreshing: true, refreshText: '加载中' }); //mock ajax setTimeout(() => { this.setState({ isRefreshing: false, data: [{ key: 'D', bg: '#ff6600', color: '#ffffff' }].concat( this.state.data ), refreshText: '↓ 下拉刷新' }); }, 1000); }; loadmore = () => { console.log('loadmore~~~~~'); // 底部加载更多 this.setState({ data: this.state.data.concat([ { key: 'E', bg: '#B91630', color: '#ffffff' } ]) }); }; render() { return ( <ScrollView ref="vscroller" style={styles.vscroller} onEndReachedThreshold={20} onEndReached={this.loadmore} showScrollBar={false} onScroll={e => { console.log(e); }} > <RefreshControl refreshing={this.state.isRefreshing} style={styles.itemRefresh} onRefresh={this.handleRefresh} > <Text>{this.state.refreshText}</Text> </RefreshControl> {this.getViews()} </ScrollView> ); } }; const styles = { vscroller: { flex: 1 }, itemRefresh: { width: 750, height: 200, backgroundColor: '#ADDADD', alignItems: 'center', justifyContent: 'center' }, item: { height: '300rem', alignItems: 'center', justifyContent: 'center' } }; render(<App />); ```