nuke-list-view
Version:
列表
172 lines (164 loc) • 4.41 kB
JSX
/** @jsx createElement */
import { createElement, 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 Icon from 'nuke-icon';
import ListView from 'nuke-list-view';
import Image from 'nuke-image';
class ListViewDemo extends Component {
constructor() {
super();
this.state = {
data: [
{
id: 'xxxxxxx',
themeName: '测试',
themeDesc: '默认的一条数据',
},
{
id: 'xxxxxxx',
themeName: '测试',
themeDesc: '默认的一条数据',
},
{
id: 'xxxxxxx',
themeName: '测试',
themeDesc: '默认的一条数据',
},
{
id: 'xxxxxxx',
themeName: '测试',
themeDesc: '默认的一条数据',
},
],
stop: false,
isRefreshing: false,
showLoading: true,
refreshText: '↓ 下拉刷新',
};
this.index = 0;
}
handleRefresh = (e) => {
this.setState({
isRefreshing: true,
refreshText: '加载中',
});
setTimeout(() => {
this.setState({
isRefreshing: false,
data: [{
id: 'xxxxxxx',
themeName: '测试',
themeDesc: '默认的一条数据',
}],
refreshText: '↓ 下拉刷新',
});
}, 1000);
};
handleLoadMore() {
const self = this;
// 这里进行异步操作
if (self.index == 5) {
self.setState({ showLoading: false });
return;
}
setTimeout(() => {
self.state.data.push({ themeName: 'test', themeDesc: 'loadmore1' });
self.setState(self.state);
self.index++;
}, 1000);
}
renderHeader=() => <RefreshControl style={styles.refresh} refreshing={this.state.isRefreshing} onRefresh={this.handleRefresh}><Text style={styles.loadingText}>{this.state.refreshText}</Text></RefreshControl>
renderFooter=() => (this.state.showLoading ?
<View style={[styles.loading]}><Text style={styles.loadingText}>加载中...</Text></View>
: null)
componentWillMount() {
// QN.fetch('http://dip.alibaba-inc.com/api/v2/services/schema/mock/47643', {
// method: 'GET',
// body: 'id=233&t=20161013',
// //mode: 'cors',
// dataType: 'jsonp',
// })
// .then(response => {
// return response.json();
// })
// .then(data => {
// this.setState({data:data.data.result})
// })
// .catch(error => {
// console.log(error);
// });
}
renderItem(item, index) {
return (<View style={[styles.slideItem]} key={`item${index}`}>
<Text>{item.themeName}</Text>
<Text>{item.themeDesc}</Text>
{
item.themePicUrl ?
<Image source={{ uri: item.themePicUrl }} style={{ quality: 'original', width: '750rem', height: '400rem' }} />
: null
}
</View>);
}
render() {
const self = this;
return (
<ListView
renderRow={this.renderItem.bind(this)}
dataSource={this.state.data}
onEndReached={this.handleLoadMore.bind(this)}
renderHeader={this.renderHeader}
renderFooter={this.renderFooter}
showScrollbar={false}
style={styles.listContainer}
/>
);
}
}
const styles = {
listContainer: {
flex: 1,
},
slideItem: {
width: '750rem',
height: '600rem',
borderBottomWidth: '4rem',
borderBottomStyle: 'solid',
borderBottomColor: '#ccccc',
justifyContent: 'center',
alignItems: 'center',
},
ItemText: {
color: '#ffffff',
fontSize: '40rem',
},
img: {
width: '750rem',
height: '1154rem',
},
refresh: {
height: '80rem',
width: '750rem',
// display:"flex",
// flex:"1",
// flexDirection:"row",
backgroundColor: '#cccccc',
justifyContent: 'center',
alignItems: 'center',
},
loading: {
height: '80rem',
display: 'flex',
width: '750rem',
flexDirection: 'row',
backgroundColor: '#cccccc',
alignItems: 'center',
justifyContent: 'center',
},
loadingText: {
color: '#666666',
},
};
render(<ListViewDemo />);