首页 > 其他分享 >react native 使用 FlatList 实现单选列表组件

react native 使用 FlatList 实现单选列表组件

时间:2024-01-15 11:45:31浏览次数:40  
标签:const FlatList title selectedId react item 单选 backgroundColor id

1. 最终效果:

image

2. 实现代码:

import React, { useState } from 'react';
import {
  FlatList,
  SafeAreaView,
  StatusBar,
  StyleSheet,
  Text,
  TouchableOpacity,
} from 'react-native';

const DATA = [
  {
    id: 'zh_CN',
    title: '简体中文',
  },
  {
    id: 'zh_TW',
    title: '繁體中文',
  },
  {
    id: 'en_US',
    title: 'English',
  },
];

const Item = ({ item, onPress, backgroundColor, textColor }) => (
  <TouchableOpacity
    onPress={onPress}
    style={[styles.item, { backgroundColor }]}>
    <Text style={[styles.title, { color: textColor }]}>{item.title}</Text>
  </TouchableOpacity>
);

const App = () => {
  const [selectedId, setSelectedId] = useState();

  const renderItem = ({ item }) => {
    const backgroundColor = item.id === selectedId ? '#6e3b6e' : '#fff';
    const color = item.id === selectedId ? 'white' : 'black';

    return (
      <Item
        item={item}
        onPress={() => setSelectedId(item.id)}
        backgroundColor={backgroundColor}
        textColor={color}
      />
    );
  };

  return (
    <SafeAreaView style={styles.container}>
      <FlatList
        data={DATA}
        renderItem={renderItem}
        keyExtractor={(item) => item.id}
        extraData={selectedId}
      />
    </SafeAreaView>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop: StatusBar.currentHeight || 0,
  },
  item: {
    paddingVertical: 11,
    paddingHorizontal: 14,
    marginBottom: 10,
    borderWidth: 1,
    borderColor: '#EEEEEE',
    borderRadius: 10,
  },
  title: {
    fontSize: 15,
    lineHeight: 22,
    color: '#000',
  },
});

export default App;

3. 参考文档:

React Native FlatList 文档

标签:const,FlatList,title,selectedId,react,item,单选,backgroundColor,id
From: https://www.cnblogs.com/lpkshuai/p/17965039

相关文章

  • 想给组件加上进入离开动画?试试 react-transition-group
    列表是很常见的场景:如果我们想给它加上进入离开的动画效果:怎么做呢?一般我们会用react-transition-group来做。在npm官网可以看到,这个包每周有750w下载量,还是非常流行的:那这个包怎么用呢?我们写下代码试一下:npxcreate-react-apptransition-group-test用create-react-app创......
  • React 系列 useImperativeHandle
    ReactHooks为我们提供了一种全新的方式来处理组件的状态和生命周期。其中,useImperativeHandle 是一个相对较少被提及的Hook,但在某些场景下,它是非常有用的。本文将深入探讨 useImperativeHandle 的用法,并通过实例来加深理解。什么是 useImperativeHandle?useImperativeHandle......
  • React-hook-form-mui(一):基本使用
    前言在项目开发中,我们选择了React+MUI作为技术栈。在使用MUI构建form表单时,我们发现并没有与antd类似的表单验证功能,于是我们选择了MUI推荐使用的react-hook-form-mui库去进行验证。但是发现网上关于这个库的使用方法和demo比较少且比较简单,并没有复杂的表单验证的demo。因此本文及......
  • React 详解(1)
    React简介React基础JSX的本质JSX并不是标准的JS语法,它是JS的语法扩展,浏览器本身不能识别,需要通过解析工具做解析之后才能在浏览器中运行。这里主要依靠BABEL解析工具来解析,下面简单的介绍一下这个解析工具(http://babeljs.io):JSX中使用JS表达式在JSX中可以通过大括号语法......
  • 多种 React 组件通信方式实践
    使用ReactContext基于ReactContext实现跨组件通信的一个常见用例是创建一个能够在不同组件间共享和触发行为的上下文。以下是一个简化的例子,展示了如何在app.tsx中触发其他组件(例如,一个弹窗组件)中的方法。1.创建一个Context首先,我们创建一个新的Context。这个Context将......
  • 2024-01-13 Can't perform a React state update on an unmounted component. This i
    react+antd业务代码报错: Can'tperformaReactstateupdateonanunmountedcomponent.Thisisano-op,butitindicatesamemoryleakinyourapplication.Tofix,cancelallsubscriptionsandasynchronoustasksinauseEffectcleanupfunction.无法对未安装的......
  • pm2启动react项目总是stopped
    执行命令pm2start--name服务名npm--start总是不成功status一直显示stopped使用命令pm2logs查看日志报错如下网上查看这篇教程解决问题原文:https://blog.csdn.net/qq_52912134/article/details/127262835现在项目里面下载一个node-cmdnpminstallnode-cmd--save......
  • react 横向文字滚动动画 ,及纵向文字滚动动画带有间歇时间 交替渐变显示文字动画
    水平滚动demo.less#scroll_x{ width:300px; height:30px; background-color:#ccc; color:green; position:relative; overflow:hidden;}#scroll_x_text{ font-size:20px; position:absolute; white-space:nowrap; word-wrap:norm......
  • 使用React构造前端应用
    简单了解React和NodeReact是一个构建用户界面的JavaScript库,由Facebook开发,很流行,已被广泛使用。React基于组件构建,编写一段代码即可在多处复用,这很有优势。可以创建像Thumbnail、LikeButton和Video这样的组件,然后将它们组合成整个应用程序。React组件是JavaScript函数,学......
  • 关于REACT2024挑战赛
    关于REACT2024首先,挑战赛官网如下:https://sites.google.com/cam.ac.uk/react2024/home这个挑战赛的任务是:建立一个机器学习模型,在双人交互的背景下,通过说话者的视频、音频、表情等数据,生成听者的面部反应并要保证反应的合理性(FRDistandFRCorr)、多样性(FRVar,FRDiv,andFRD......