跳转到内容

List

显示项目列表,支持分页和加载状态。

import { List } from 'asterui'

基础列表

带项目的简单列表。

  • Racing car sprints past
  • Japanese princess unveiled
  • Australian walks 100km
  • Man charged over missing wedding
import { List } from 'asterui'

function App() {
  const basicData = [
    'Racing car sprints past',
    'Japanese princess unveiled',
    'Australian walks 100km',
    'Man charged over missing wedding',
  ];
  
  return (
      <List
        dataSource={basicData}
        renderItem={(item) => <List.Item>{item}</List.Item>}
      />
    )
}

export default App

带头像

带头像和描述的列表项。

  • Alice Johnson
    Alice Johnson
    alice@example.com
  • Bob Smith
    Bob Smith
    bob@example.com
  • Carol White
    Carol White
    carol@example.com
import { List, Avatar } from 'asterui'

function App() {
  const avatarData = [
    {
      name: 'Alice Johnson',
      email: 'alice@example.com',
      avatar: 'https://i.pravatar.cc/150?img=5',
    },
    {
      name: 'Bob Smith',
      email: 'bob@example.com',
      avatar: 'https://i.pravatar.cc/150?img=12',
    },
    {
      name: 'Carol White',
      email: 'carol@example.com',
      avatar: 'https://i.pravatar.cc/150?img=9',
    },
  ];
  
  return (
      <List
        dataSource={avatarData}
        renderItem={(item) => (
          <List.Item>
            <List.Item.Meta
              avatar={<Avatar src={item.avatar} alt={item.name} />}
              title={item.name}
              description={item.email}
            />
          </List.Item>
        )}
      />
    )
}

export default App

加载状态

带骨架的加载状态列表。

    Loading
import { List } from 'asterui'

function App() {
  return (
      <List
        dataSource={[]}
        renderItem={(item) => <List.Item>{item}</List.Item>}
        loading
      />
    )
}

export default App

带分页

带分页控件的列表。

  • Item 1
  • Item 2
  • Item 3
  • Item 4
  • Item 5
import { List } from 'asterui'
import { useState } from 'react'

function App() {
  const allData = Array.from({ length: 23 }, (_, i) => `Item ${i + 1}`);
  const [page, setPage] = useState(1);
  const pageSize = 5;
  const start = (page - 1) * pageSize;
  const end = start + pageSize;
  const currentData = allData.slice(start, end);
  
  return (
      <List
        dataSource={currentData}
        renderItem={(item) => <List.Item>{item}</List.Item>}
        pagination={{
          current: page,
          pageSize,
          total: allData.length,
          onChange: setPage,
        }}
      />
    )
}

export default App
属性描述类型默认值
dataSource要渲染的数据项数组T[]-
renderItem渲染每个项目的函数(item: T, index: number) => React.ReactNode-
header列表头部内容React.ReactNode-
footer列表页脚内容React.ReactNode-
loading列表是否处于加载状态booleanfalse
pagination分页配置ListPaginationConfig | falsefalse
grid网格布局配置ListGridConfig-
bordered在列表周围显示边框booleantrue
split在项目之间显示分隔符booleantrue
size尺寸变体'sm' | 'md' | 'lg''md'
itemLayout项目的布局方向'horizontal' | 'vertical''horizontal'
locale国际化文本{ emptyText?: React.ReactNode }-
loadMore加载更多内容(例如按钮)React.ReactNode-
rowKey项目的自定义键提取keyof T | ((item: T) => React.Key)-
data-testid组件的测试 IDstring'list'
aria-label列表的可访问标签string-
属性描述类型默认值
children项目内容React.ReactNode-
actions右侧显示的操作按钮React.ReactNode[]-
extra右侧的额外内容React.ReactNode-
className额外的 CSS 类名string-
属性描述类型默认值
avatar头像或图标元素React.ReactNode-
title标题内容React.ReactNode-
description描述内容React.ReactNode-
  • 使用 aria-label 为列表提供上下文
  • 列表项在语义化的 <ul><ol> 元素中渲染
  • 加载状态传达给屏幕阅读器
  • 分页控件支持键盘访问
  • 空状态内容正确朗读