You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React的ListItemText组件中添加更多文本,实现三级文本展示

实现方案

完全可以实现,Material UI 官方设计上就允许自定义ListItemText的渲染内容,常用有两种实现方式:


方案1:复用secondary属性传入多段文本

ListItemText的secondary本身支持传入任意React节点,不需要被官方预设的“两级文本”限制,直接在secondary内按层级放多段Typography即可:

<Paper>
  <List sx={{ width: '100%', maxWidth: 360, bgcolor: 'background.paper' }}>
    {this.state.bookReviews.map((review =>
      <>
        <ListItem alignItems="flex-start" key={review.id}>
          <ListItemAvatar>
            <Avatar alt="Cindy Baker" />
          </ListItemAvatar>
          <ListItemText
            primary={review.heading}
            secondary={
              <React.Fragment>
                {/* 二级文本:评论者名 */}
                <Typography
                  sx={{ display: 'block' }}
                  component="span"
                  variant="body2"
                  color="text.primary"
                >
                  {review.reviewerName}
                </Typography>
                {/* 三级文本:评论内容 */}
                <Typography
                  sx={{ display: 'block', my: 0.5 }}
                  component="p"
                  variant="body2"
                  color="text.secondary"
                >
                  {review.reviewText}
                </Typography>
                {/* 如需更多层级可继续叠加,比如评论时间 */}
                <Typography
                  sx={{ display: 'block' }}
                  component="span"
                  variant="caption"
                  color="text.disabled"
                >
                  {review.createTime}
                </Typography>
              </React.Fragment>
            }
          />
        </ListItem>
        <Divider variant="inset" component="li"/>
      </>
    ))}
  </List>
</Paper>

该方案改造成本最低,不需要改动原有组件结构,适合只需要新增文本层级的场景。


方案2:自定义文本区域,不使用ListItemText内置封装

如果后续还要在文本区域加点赞、回复按钮等其他交互元素,可以直接放弃ListItemText组件,自己编写文本容器结构,自由度最高:

<ListItem alignItems="flex-start" key={review.id}>
  <ListItemAvatar>
    <Avatar alt="Cindy Baker" />
  </ListItemAvatar>
  {/* 自定义文本容器,完全自主控制层级和元素 */}
  <Box sx={{ ml: 2 }}>
    <Typography variant="subtitle1" color="text.primary">
      {review.heading}
    </Typography>
    <Typography variant="body2" color="text.primary" sx={{ mt: 0.5 }}>
      {review.reviewerName}
    </Typography>
    <Typography variant="body2" color="text.secondary" sx={{ my: 0.5 }}>
      {review.reviewText}
    </Typography>
    <Typography variant="caption" color="text.disabled">
      {review.createTime}
    </Typography>
  </Box>
</ListItem>

内容的提问来源于stack exchange,提问作者Zemelon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:27:05