当前位置:首页 > React

react如何实现列表

2026-03-30 18:59:57React

使用 map 方法渲染列表

在 React 中,可以通过 map 方法遍历数组并生成列表项。假设有一个数组 items,可以将其渲染为 <li> 元素列表:

const items = ['Apple', 'Banana', 'Orange'];

function ListComponent() {
  return (
    <ul>
      {items.map((item, index) => (
        <li key={index}>{item}</li>
      ))}
    </ul>
  );
}

添加唯一 key 属性

React 要求列表中的每个子元素必须有一个唯一的 key 属性,通常是数据的唯一标识(如 id)。避免使用数组索引作为 key,除非列表是静态的:

const items = [
  { id: 1, name: 'Apple' },
  { id: 2, name: 'Banana' },
  { id: 3, name: 'Orange' }
];

function ListComponent() {
  return (
    <ul>
      {items.map((item) => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  );
}

动态加载列表数据

如果数据来自 API 或异步操作,可以使用 useStateuseEffect 动态加载:

import { useState, useEffect } from 'react';

function DynamicList() {
  const [items, setItems] = useState([]);

  useEffect(() => {
    fetch('https://api.example.com/items')
      .then(response => response.json())
      .then(data => setItems(data));
  }, []);

  return (
    <ul>
      {items.map((item) => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  );
}

列表过滤与排序

可以通过 JavaScript 方法(如 filtersort)处理列表数据后再渲染:

const filteredItems = items.filter(item => item.price > 10);
const sortedItems = [...items].sort((a, b) => a.price - b.price);

// 渲染过滤后的列表
<ul>
  {filteredItems.map((item) => (
    <li key={item.id}>{item.name}</li>
  ))}
</ul>

可交互列表

为列表项添加点击事件或其他交互逻辑:

function InteractiveList() {
  const handleClick = (itemId) => {
    console.log(`Item ${itemId} clicked`);
  };

  return (
    <ul>
      {items.map((item) => (
        <li 
          key={item.id}
          onClick={() => handleClick(item.id)}
        >
          {item.name}
        </li>
      ))}
    </ul>
  );
}

使用组件拆分列表项

将列表项拆分为独立的组件以提高可维护性:

function ListItem({ item, onItemClick }) {
  return (
    <li onClick={() => onItemClick(item.id)}>
      {item.name}
    </li>
  );
}

function ListComponent() {
  return (
    <ul>
      {items.map((item) => (
        <ListItem 
          key={item.id}
          item={item}
          onItemClick={(id) => console.log(id)}
        />
      ))}
    </ul>
  );
}

虚拟列表优化

对于长列表(如数千项),使用虚拟滚动库(如 react-window)提升性能:

react如何实现列表

import { FixedSizeList as List } from 'react-window';

const Row = ({ index, style }) => (
  <div style={style}>{items[index].name}</div>
);

function VirtualList() {
  return (
    <List
      height={500}
      itemCount={items.length}
      itemSize={50}
      width={300}
    >
      {Row}
    </List>
  );
}

分享给朋友:

相关文章

vue列表实现

vue列表实现

Vue 列表实现方法 使用 v-for 指令 v-for 是 Vue 中用于渲染列表的核心指令,基于数据源动态生成 DOM 元素。语法格式为 item in items 或 (item, index)…

h5响应式布局如何实现

h5响应式布局如何实现

使用媒体查询(Media Queries) 通过CSS媒体查询针对不同屏幕尺寸设置不同的样式规则。例如: @media screen and (max-width: 768px) { .co…

vue如何实现单选

vue如何实现单选

使用原生 HTML 单选按钮 在 Vue 中可以直接使用 HTML 的原生单选按钮,通过 v-model 绑定数据。 <template> <div>…

vue如何实现递归

vue如何实现递归

递归组件的实现方法 在Vue中实现递归组件通常用于渲染树形结构或嵌套数据。核心思路是组件在其模板中调用自身,但需注意终止条件以避免无限循环。 定义递归组件 组件需设置name选项,才能在模板中调用自…

vue实现传输列表

vue实现传输列表

Vue 实现传输列表 在 Vue 中实现传输列表功能,通常涉及两个列表之间的数据传递,用户可以通过按钮或拖拽操作将项目从一个列表移动到另一个列表。以下是实现传输列表的几种方法。 使用组件间数据传递…

vue如何实现修改

vue如何实现修改

修改 Vue 组件或数据 在 Vue 中修改数据或组件状态通常涉及响应式数据的更新、组件方法的调用或状态管理工具的使用。以下是几种常见场景的实现方式: 修改响应式数据 Vue 的响应式系统会自动追踪…