List 列表
列表是对文本或图像的连续、垂直的索引。
列表能够承载一组连续的文本或图像。 它们由包含主要和补充操作的项子集组成,而这些操作由图标和文本表示。
上一个样例的最后一个子集展示了如何渲染一个链接:
function ListItemLink(props) {
return <ListItem button component="a" {...props} />;
}
//...
<ListItemLink href="#simple-list">
<ListItemText primary="Spam" />
</ListItemLink>;
你可以从这里查看 React Router与文档此部分结合使用的相关样例。
嵌套列表
- Photos
Jan 9, 2014
- Work
Jan 7, 2014
- Vacation
July 20, 2014
Text only
- Single-line item
- Single-line item
- Single-line item
Icon with text
- Single-line item
- Single-line item
- Single-line item
Avatar with text
- Single-line item
- Single-line item
- Single-line item
Avatar with text and icon
- Single-line item
- Single-line item
- Single-line item
- Brunch this weekend?
Ali Connors — I'll be in your neighborhood doing errands this…
- Summer BBQ
to Scott, Alex, Jennifer — Wish I could come, but I'm out of town this…
- Oui Oui
Sandra Adams — Do you have Paris recommendations? Have you ever…
该复选框执行了列表项的辅助操作,并且是一个单独的目标。
- Settings
- Wi-Fi
- Bluetooth
固定的副标题列表
在滚动列表时,子标题保持固定在屏幕的顶端,直到被下一个子标题推离屏幕。
此性能由 CSS sticky 位置实现。 可惜的是,这一功能并未在我们支持的所有浏览器中 实现 。 若浏览器不支持,则默认使用 disableSticky
。
- I'm sticky 0
- Item 0
- Item 1
- Item 2
- I'm sticky 1
- Item 0
- Item 1
- Item 2
- I'm sticky 2
- Item 0
- Item 1
- Item 2
- I'm sticky 3
- Item 0
- Item 1
- Item 2
- I'm sticky 4
- Item 0
- Item 1
- Item 2
<List className={classes.root} subheader={<li />}>
{[0, 1, 2, 3, 4].map((sectionId) => (
<li key={`section-${sectionId}`} className={classes.listSection}>
<ul className={classes.ul}>
<ListSubheader>{`I'm sticky ${sectionId}`}</ListSubheader>
{[0, 1, 2].map((item) => (
<ListItem key={`item-${sectionId}-${item}`}>
<ListItemText primary={`Item ${item}`} />
</ListItem>
))}
</ul>
</li>
))}
</List>
<List component="nav" className={classes.root} aria-label="contacts">
<ListItem button>
<ListItemIcon>
<StarIcon />
</ListItemIcon>
<ListItemText primary="Chelsea Otakan" />
</ListItem>
<ListItem button>
<ListItemText inset primary="Eric Hoffman" />
</ListItem>
</List>
- Line item 1
- Line item 2
- Line item 3
<List className={classes.root}>
{[1, 2, 3].map((value) => (
<ListItem key={value} disableGutters>
<ListItemText primary={`Line item ${value}`} />
<ListItemSecondaryAction>
<CommentIcon color="action" />
</ListItemSecondaryAction>
</ListItem>
))}
</List>
大型列表渲染
在下面的示例中,我们演示了如何将 react-window 与 List
组件一起使用。 它渲染了200多行,并且可以轻松的延展到更多行。 可视化优化了整体的性能。
<FixedSizeList
height={400}
width={360}
itemSize={46}
itemCount={200}
overscanCount={5}
>
{renderRow}
</FixedSizeList>
我们鼓励尽可能使用 react-window。 如果这个库不包括你的用例,你应该考虑使用 react-virtualized,然后使用 react-virtuoso等替代品。
Customization 个性化
🎨 如果您还在寻找灵感,您可以看看 MUI Treasury 特别定制的一些例子。