List 列表组件 #

基本用法 #

jsx
import { List, ListItem, ListIcon } from '@chakra-ui/react'
import { CheckCircleIcon } from '@chakra-ui/icons'

function Example() {
  return (
    <List spacing={3}>
      <ListItem>
        <ListIcon as={CheckCircleIcon} color="green.500" />
        列表项 1
      </ListItem>
      <ListItem>
        <ListIcon as={CheckCircleIcon} color="green.500" />
        列表项 2
      </ListItem>
      <ListItem>
        <ListIcon as={CheckCircleIcon} color="green.500" />
        列表项 3
      </ListItem>
    </List>
  )
}

列表样式 #

无序列表 #

jsx
<List styleType="disc">
  <ListItem>项目 1</ListItem>
  <ListItem>项目 2</ListItem>
  <ListItem>项目 3</ListItem>
</List>

有序列表 #

jsx
<List as="ol" styleType="decimal">
  <ListItem>第一项</ListItem>
  <ListItem>第二项</ListItem>
  <ListItem>第三项</ListItem>
</List>

无标记列表 #

jsx
<List styleType="none">
  <ListItem>项目 1</ListItem>
  <ListItem>项目 2</ListItem>
</List>

列表图标 #

jsx
import { 
  CheckCircleIcon, 
  WarningIcon, 
  InfoIcon,
  StarIcon 
} from '@chakra-ui/icons'

<List spacing={3}>
  <ListItem>
    <ListIcon as={CheckCircleIcon} color="green.500" />
    成功项
  </ListItem>
  <ListItem>
    <ListIcon as={WarningIcon} color="orange.500" />
    警告项
  </ListItem>
  <ListItem>
    <ListIcon as={InfoIcon} color="blue.500" />
    信息项
  </ListItem>
  <ListItem>
    <ListIcon as={StarIcon} color="yellow.500" />
    收藏项
  </ListItem>
</List>

列表位置 #

jsx
<List stylePosition="inside">
  <ListItem>内部标记</ListItem>
</List>

<List stylePosition="outside">
  <ListItem>外部标记</ListItem>
</List>

嵌套列表 #

jsx
<List spacing={3}>
  <ListItem>
    <ListIcon as={CheckCircleIcon} color="green.500" />
    主项目 1
    <List mt={2} ml={8} spacing={2}>
      <ListItem>子项目 1.1</ListItem>
      <ListItem>子项目 1.2</ListItem>
    </List>
  </ListItem>
  <ListItem>
    <ListIcon as={CheckCircleIcon} color="green.500" />
    主项目 2
  </ListItem>
</List>

实用示例 #

功能列表 #

jsx
function FeatureList({ features }) {
  return (
    <List spacing={4}>
      {features.map((feature, index) => (
        <ListItem key={index}>
          <HStack align="start">
            <ListIcon as={CheckCircleIcon} color="green.500" mt={1} />
            <Box>
              <Text fontWeight="medium">{feature.title}</Text>
              <Text color="gray.500" fontSize="sm">{feature.description}</Text>
            </Box>
          </HStack>
        </ListItem>
      ))}
    </List>
  )
}

设置列表 #

jsx
function SettingsList() {
  return (
    <List spacing={4}>
      <ListItem>
        <Flex justify="space-between" align="center">
          <HStack>
            <ListIcon as={BellIcon} color="blue.500" />
            <Text>通知</Text>
          </HStack>
          <Switch />
        </Flex>
      </ListItem>
      <ListItem>
        <Flex justify="space-between" align="center">
          <HStack>
            <ListIcon as={LockIcon} color="green.500" />
            <Text>隐私</Text>
          </HStack>
          <IconButton icon={<ChevronRightIcon />} variant="ghost" />
        </Flex>
      </ListItem>
    </List>
  )
}

文件列表 #

jsx
function FileList({ files }) {
  return (
    <List spacing={2}>
      {files.map((file) => (
        <ListItem key={file.id}>
          <Flex
            p={3}
            borderWidth="1px"
            borderRadius="md"
            align="center"
            justify="space-between"
          >
            <HStack>
              <ListIcon as={file.type === 'folder' ? FolderIcon : FileIcon} />
              <Text>{file.name}</Text>
            </HStack>
            <Text color="gray.500" fontSize="sm">{file.size}</Text>
          </Flex>
        </ListItem>
      ))}
    </List>
  )
}

List 属性速查表 #

属性 说明
styleType 列表标记类型 disc, decimal, none…
stylePosition 标记位置 inside, outside
spacing 间距 尺寸值

下一步 #

现在你已经掌握了 List 组件,接下来学习 Card 卡片,了解如何展示卡片内容!

最后更新:2026-03-28