import React, { Component } from "react";
import { withNavigation } from "react-navigation";
import { TouchableOpacity, Text } from "react-native";
import RefreshListView, { RefreshState } from "react-native-refresh-list-view";
import { getData } from "../comm/feach";
import Item from "../pages/Item";
class List extends Component {
constructor(props) {
super(props);
this.state = {
data: [],
refreshState: RefreshState.Idle, //默认刷新隐藏
tab: this.props.tab, //显示页面
page: 1,
limit: 10
};
}
requestData = async () => {
let obj = {
page: this.state.page,
tab: this.state.tab,
limit: this.state.limit
};
let data = await getData("/topics", obj);
// console.error(JSON.stringify(data));
return data.data;
};
requestFirstData = () => {
// console.error(111);
try {
this.setState(
{
refreshState: RefreshState.HeaderRefreshing,
page: 1
},
async () => {
let data = await this.requestData();
//console.error(JSON.stringify(data));
this.setState({
data: data,
refreshState: RefreshState.Idle
});
}
);
} catch (err) {
this.setState({
refreshState: RefreshState.Failure
});
//console.error(12121);
}
};
requestNextData = () => {
try {
this.setState(
{
refreshState: RefreshState.FooterRefreshing,
page: this.state.page + 1
},
async () => {
let data = await this.requestData();
//console.error(JSON.stringify(data));
this.setState({
refreshState:
this.state.data.length > 30
? RefreshState.NoMoreData
: RefreshState.Idle,
data: [...this.state.data, ...data]
});
}
);
} catch (err) {
this.setState({
refreshState: RefreshState.Failure //请求失败组件
});
}
};
componentDidMount() {
this.requestFirstData();
}
headerRefresh = () => {
this.requestFirstData();
};
footerRefresh = () => {
this.requestNextData();
};
renderItem = rowData => {
//渲染一项列表
return (
<TouchableOpacity
onPress={() =>
this.props.navigation.navigate("Detail", {
//跳转到详情页 传递id和标题过去
id: rowData.item.id,
title: rowData.item.title
})
}
>
{/* {console.error(rowData.item.title)} */}
<Item item={rowData.item} />
</TouchableOpacity>
);
};
render() {
return (
<RefreshListView
data={this.state.data}
KsyExtractor={item => item.id}
renderItem={this.renderItem}
refreshState={this.state.refreshState}
onHeaderRefresh={this.headerRefresh}
onFooterRefresh={this.footerRefresh}
/>
);
}
}
export default withNavigation(List);
import React, { Component } from "react";
import { Text, View, Image, StyleSheet } from "react-native";
import timeago from "timeago.js";
export default class Item extends Component {
render() {
const timeagoInstance = timeago();
return (
<View style={style.box}>
<Text>{this.props.item.title}</Text>
<View style={style.container}>
<View style={style.left}>
<Image
style={style.img}
source={{ uri: this.props.item.author.avatar_url }}
/>
<View>
<Text>{this.props.item.author.loginname}</Text>
<Text>
{timeagoInstance.format(this.props.item.create_at, "zh_CN")}
</Text>
</View>
</View>
</View>
</View>
);
}
}
const style = StyleSheet.create({
box: {
padding: 10,
borderBottomWidth: 1,
borderColor: "#ddd"
},
container: {
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
marginTop: 5
},
left: {
flexDirection: "row",
alignItems: "center"
},
img: {
width: 60,
height: 60,
borderRadius: 30,
marginRight: 10
}
});