📜  反应原生 ListView 组件

📅  最后修改于: 2022-05-13 01:56:31.286000             🧑  作者: Mango

反应原生 ListView 组件

ListView 组件是一个内置的 React Native 视图组件,它在可垂直滚动的列表中显示项目列表。它需要一个ListView.DataSource API 来填充一个简单的数据 blob 数组,并使用数据源和 renderRow 回调实例化 ListView 组件。

使用 ListView 组件优于 ScrollView 组件的主要优点是它克服了 ScrollView 组件的性能缺点。然而,在幕后,ListView 组件使用 ScrollView 作为其可滚动组件。因此,ListView 组件是对 ScrollView 组件进行优化的抽象。

句法:

ListView 道具:

  • dataSource :它提供了要使用的 ListView.DataSource 的实例。
  • renderRow :它用于从数据数组中获取一个 blob 作为参数并返回一个可渲染组件。
  • initialListSize :用于指定组件初始挂载时要渲染的行数。
  • onEndReachedThreshold :用于指定调用 onEndReached 的阈值(以像素为单位)。
  • pageSize :用于指定每个事件循环要渲染的行数。
  • renderScrollComponent :用于返回渲染列表行的可滚动组件。
  • scrollRenderAheadDistance :它指定在列表行出现在屏幕上之前多早开始渲染列表行。
  • stickyHeaderIndices :它是一个子索引数组,指定滚动时要停靠到屏幕顶部的子索引。
  • enableEmptySections :它是一个标志,指示是否需要呈现空的节标题。
  • onEndReached :当所有行都已在屏幕上呈现并且列表已滚动到 onEndReachedThreshold 内时调用。
  • stickySectionHeadersEnabled :顾名思义,它用于使节标题具有粘性。
  • renderSectionHeader :如果提供此属性,则会为特定部分呈现标题。
  • renderSeparator :如果提供了此属性,则添加一个可渲染组件(在除最后一行之外的每一行下方渲染为分隔符)。
  • onChangeVisibleRows :仅当某些可见行发生更改时才调用它。
  • removeClippedSubviews : 用于性能优化,主要与 overflow: 'hidden' 结合使用在行容器上。
  • renderFooter :如果提供了这些道具,则页眉和页脚总是在每次渲染过程中渲染。

列表视图方法:

  • getMetrics() :用于导出数据的函数,主要用于分析目的。
  • scrollTo() :用于滚动到给定 xy 偏移的函数。
  • scrollToEnd() :用于滚动列表的函数。在垂直ListView的情况下,它用于滚动到列表的底部。在水平ListView的情况下,它用于向右滚动。
  • flashScrollIndicators() :用于简要显示滚动指示器的函数。

现在让我们从实现开始:

  • 第 1 步:打开终端并通过以下命令安装 expo-cli。

    npm install -g expo-cli
  • 第2步:现在通过以下命令创建一个项目。

    expo init listview-demo
  • 第 3 步:现在进入您的项目文件夹,即 listview-demo

    cd listview-demo

项目结构:它看起来像这样。

示例: ListView 组件的基本使用

App.js
import React, { Component } from "react";
import { Text, View, StyleSheet, ListView } from "react-native";
import { Icon } from "react-native-elements";
  
const ds = new ListView.DataSource({
  rowHasChanged: (r1, r2) => r1 !== r2
});
  
class App extends Component {
  state = {
    dataSource: ds.cloneWithRows([
      "Data Structures",
      "STL",
      "C++",
      "Java",
      "Python",
      "ReactJS",
      "Angular",
      "NodeJs",
      "PHP",
      "MongoDb",
      "MySql",
      "Android",
      "iOS",
      "Hadoop",
      "Ajax",
      "Ruby",
      "Rails",
      ".Net",
      "Perl",
    ]),
  };
  
  render() {
    return (
      
         (
            
              {rowData}
              
            
          )}
        />
      
    );
  }
}
  
// Screen styles
const styles = StyleSheet.create({
  screen: {
    marginTop: 30,
  },
  row: {
    margin: 15,
    flexDirection: "row",
    justifyContent: "space-between",
    alignItems: "center",
    paddingHorizontal: 2,
  },
  rowText: {
    fontSize: 18,
  },
});
  
export default App;


使用以下命令启动服务器

npm run android

输出:如果你的模拟器没有自动打开,那么你需要手动打开。首先,去你的安卓工作室并运行模拟器。现在再次启动服务器。

注意:重要的是要注意 ListView 组件现在已弃用。而是使用较新的组件,例如 FlatList 或 SectionList。要使用 ListView 组件,请使用 deprecated-react-native-listview 包。

import ListView from "deprecated-react-native-listview";

参考: https://reactnative.dev/docs/0.62/listview