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

如何在React列表组件中将Amount属性值移至右侧?

问题

我没法把amount属性的值移到列表组件的右侧。试过修改Typography组件、React.Fragment,也用sx样式调整,但都没效果,不知道是不是要新建组件,或者该用什么组件来放{amount}。

原代码

type ExploreCardsProps = {
    avatar: string
    headgear: string
    amount: number
}

const ListText = styled(ListItem)(() => ({
    color: "white",
}))

export function ExploreCards ({avatar, headgear, amount} : ExploreCardsProps)  {
  return (
    <Grid
      container
      direction="column"
      alignItems="center"
    >
      <Grid item xs={3}>
        <List sx={{ width: '100%', maxWidth: 360, bgcolor: 'black'}}>
          <ListText alignItems="flex-start">
            <ListItemAvatar>
              <Avatar alt="Luis" src= {avatar} />
            </ListItemAvatar>
            <ListItemText 
              primary="Headgear"
              secondary={
                <React.Fragment>
                  <Typography color="#ffffff"
                    sx={{ display: 'inline'}}
                    variant="body2"
                    component="span"
                  >
                    {headgear}
                  </Typography>
                  {amount}
                </React.Fragment>
              }
            />
          </ListText>
          <Divider variant="inset" component="li" />
        </List>
      </Grid>
    </Grid>
  );
}
解决方案

核心问题是你把amount放在了ListItemText的文本块内部,没法单独控制对齐。MUI的ListItem默认是flex布局,只需要把amount作为ListItem的独立子元素,利用flex的margin-left: auto就能推到右侧。

修改后的代码:

import { Grid, List, ListItem, ListItemAvatar, Avatar, ListItemText, Typography, Divider, Box } from '@mui/material';
import styled from '@mui/material/styles/styled';

type ExploreCardsProps = {
  avatar: string;
  headgear: string;
  amount: number;
};

const ListText = styled(ListItem)(() => ({
  color: "white",
}));

export function ExploreCards({ avatar, headgear, amount }: ExploreCardsProps) {
  return (
    <Grid container direction="column" alignItems="center">
      <Grid item xs={3}>
        <List sx={{ width: '100%', maxWidth: 360, bgcolor: 'black' }}>
          <ListText alignItems="center">
            <ListItemAvatar>
              <Avatar alt="Luis" src={avatar} />
            </ListItemAvatar>
            <ListItemText 
              primary="Headgear"
              secondary={
                <Typography 
                  color="#ffffff"
                  variant="body2"
                  component="span"
                >
                  {headgear}
                </Typography>
              }
            />
            {/* 用Box包裹amount,设置margin-left:auto实现右对齐 */}
            <Box sx={{ color: 'white', marginLeft: 'auto' }}>
              {amount}
            </Box>
          </ListText>
          <Divider variant="inset" component="li" />
        </List>
      </Grid>
    </Grid>
  );
}

关键调整点

  • 将amount从ListItemText的secondary中移出,作为ListItem(也就是你定义的ListText)的直接子元素。
  • 用Box(或Typography)包裹amount,通过marginLeft: 'auto'让它自动占据剩余空间,从而对齐到右侧。
  • 无需新建额外组件,利用MUI自带的布局组件即可实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:07:14