ReactNative FlatList--------实现上拉加载,下拉刷新

ReactNative FlatList解析,详情

import React, { Component } from "react";
import {
  Platform,
  StyleSheet,
  Text,
  View,
  Image,
  TouchableHighlight
} from "react-native";
import RefreshListView, { RefreshState } from "react-native-refresh-list-view";
import { StackNavigator } from "react-navigation";
import Shows from "./Shows";

class Item extends Component {
  render() {
    return (
      <View style={{ flexDirection: "row" }}>
        <Image
          source={{ uri: this.props.url }}
          style={{ width: 100, height: 100 }}
        />
        <Text>{this.props.title}</Text>
      </View>
    );
  }
}

class Home1 extends Component {
  constructor(props) {
    super(props);

    this.state = {
      //数据源
      dataValue: [],
      //刷新进度条的状态:默认我静止状态
      refreshState: RefreshState.Idle
    };
  }
  //生命周期方法:默认加载第一次数据
  componentDidMount() {
    this.HeaderRefresh();
  }
  
  //下拉刷新
  HeaderRefresh = () => {
	 //HeaderRefreshing:下拉刷新进度头
    this.setState({
      refreshState: RefreshState.HeaderRefreshing
    });
    //请求网络路劲
    fetch("https://cnodejs.org/api/v1/topics?page=1&tab=good&limit=10")
	    //通过箭头函数,数据解析,返回解析后的json对象
      .then(response => response.json())
	    //接收解析后的json对象,获取有用数据,状态机中做数据刷新
      .then(responseJson => {
	     //刷新数据
        this.setState({
          dataValue: responseJson.data,
          refreshState: RefreshState.Idle
        });
      })
	    //请求错误情况下进行调用
      .catch(error => {
        this.setState({
          refreshState: RefreshState.Failure
        });
      });
  };
  
  //上拉加载
  FooterRefresh = () => {
	 //FooterRefreshing上拉加载进度条
    this.setState({
      refreshState: RefreshState.FooterRefreshing
    });
	//请求网络路径
    fetch("https://cnodejs.org/api/v1/topics?page=1&tab=good&limit=10")
	    //通过箭头函数,数据解析,返回解析后的json对象
      .then(response => response.json())
	    //接收解析后的json对象,获取有用数据,在状态机中做数据刷新
      .then(responseJson => {
	     //刷新数据
        this.setState({
          dataValue: [...this.state.dataValue, ...responseJson.data],
          refreshState: RefreshState.Idle
        });
      })
	    //请求错误情况下进行调用
      .catch(error => {
        this.setState({
          refreshState: RefreshState.Failure
        });
      });
  };

  render() {
    return (
      <View style={styles.container}>
        <RefreshListView
          style={styles.welcome}
          data={this.state.dataValue}
          renderItem={({ item }) => {
            return (
              <TouchableHighlight
                //点击详情传入内容
                onPress={() => {
                  this.props.navigation.navigate("Show", {
                    title: item.title,
                    content: item.content
                  });
                }}
              >
                <Item url={item.author.avatar_url} title={item.title} />
              </TouchableHighlight>
            );
          }}
          keyExtractor={index => {
            return index;
          }}
          //上拉,下拉,状态刷新
          refreshState={this.state.refreshState}
          onFooterRefresh={this.FooterRefresh}
          onHeaderRefresh={this.HeaderRefresh}
        />
      </View>
    );
  }
}

//样式
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
    backgroundColor: "#F5FCFF"
  },
  welcome: {
    flex: 1
  }
});

//路由
const Home1Route = StackNavigator({
  List: {
    screen: Home1,
    navigationOptions: {
      header: null
    }
  },
  Show: { screen: Shows }
});

export default Home1Route;

显示详情

import React, { Component } from "react";
import { ScrollView, StyleSheet, Text, View } from "react-native";
import HTML from "react-native-render-html"; //渲染html成原生内容

export default class Shows extends Component {
  static navigationOptions = ({ navigation }) => ({
	 //获取传过来的title标题
    title: navigation.getParam("title", "详情")
  });

  render() {
    return (
      <View style={styles.container}>
	      //滑动事件
        <ScrollView>
          <HTML
            style={styles.welcome}
            //获取要展示内容
            html={this.props.navigation.getParam("content", "content")}
          />
        </ScrollView>
      </View>
    );
  }
}

//样式
const styles = StyleSheet.create({
  welcome: {
    fontSize: 20,
    textAlign: "center",
    margin: 10
  }
});

需要导入的依赖

下载项目:
react-native init HelloWorld --version 0.55.4

yarn库:
yarn add react-navigation

三方刷新加载:
yarn add react-native-refresh-list-view

import RefreshListView, { RefreshState } from “react-native-refresh-list-view”;

StackNavigator
import { StackNavigator } from “react-navigation”;

HTML 依赖 yarn add react-native-render-html

import HTML from “react-native-render-html”;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native Web 中使用 FlatList 实现下拉刷新功能,您可以按照以下步骤进行操作: 1. 导入所需的模块: ```javascriptimport React, { useState useEffect } from 'react'; import { FlatList, View, Text, RefreshControl } from 'react-native'; ``` 2. 创建状态变量来追踪刷新状态和数据: ```javascript const [data, setData] = useState([]); const [refreshing, setRefreshing] = useState(false); ``` 3. 创建一个函数来处理刷新操作: ```javascript const handleRefresh = () => { setRefreshing(true); // 在这里执行刷新操作,例如从服务器获取最新数据 // 模拟异步请求 setTimeout(() => { // 更新数据 setData([...newData]); setRefreshing(false); }, 2000); }; ``` 4. 在 FlatList 组件中添加 `refreshControl` 属性,并设置 `onRefresh` 为上一步创建的函数: ```javascript <FlatList data={data} renderItem={({ item }) => ( <View> <Text>{item}</Text> </View> )} keyExtractor={(item) => item.id} refreshControl={ <RefreshControl refreshing={refreshing} onRefresh={handleRefresh} /> } /> ``` 现在,当用户下拉 FlatList 列表时,将触发 `handleRefresh` 函数,并显示下拉刷新指示器。您可以在 `handleRefresh` 函数中执行实际的刷新操作,例如从服务器获取最新数据,并在获取数据后更新 FlatList 的内容。 请注意,上述示例中的 `newData` 是一个代表新数据的数组,您需要根据您的实际情况进行替换。 希望这可以帮助您在 React Native Web 中实现 FlatList下拉刷新功能!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值