跳转至

ISSUE-0077:官网列表「邮箱」列 chip 右对齐显示错位

现象(用户截图 v0.10.114)

官网列表的「邮箱」列内容全部靠右显示:

| 网址                     | 商家           | 电话         | ...        邮箱 |
|--------------------------|----------------|--------------|----------------|
| ...g-wind.com            | Glacier...     | +1 907-978…  | glacierwindshawn@gmail.com |
| ...thefishermansdaught…  | The Fisherman… | +1 907-723…  | thefishermansdaughter@... |

虽然内容能看到,但与其他列对齐方式不一致(其他列都左对齐),视觉错位。

根因

src/sections/data/data-view.tsx:401 v0.10.112 时改:

{
  field: 'emailsCount',
  headerName: '邮箱',
  type: 'number',                          // ← 罪魁
  valueGetter: (_v, row) => (row.emails || []).length,
  renderCell: ({ row }) => <RenderEmail row={row} />,
}

MUI DataGrid 行为type: 'number' 列默认 align: 'right' + headerAlign: 'right'(数字列右对齐是惯例)。 但 renderCell 实际渲染的是 <RenderEmail> chip + 邮箱文字,应该按文本列左对齐

type: 'number' 当时是为了让 sort 按数量排序,但 align 副作用没考虑。

修复(v0.10.117)

{
  field: 'emailsCount',
  headerName: '邮箱',
  width: 240,                              // 加宽 220 → 240(chip + 邮箱文本需要)
  align: 'left',                           // 显式左对齐
  headerAlign: 'left',
  sortComparator: (a, b) => (a || 0) - (b || 0),  // 自定义 sort 按数量
  valueGetter: (_v, row) => (row.emails || []).length,
  renderCell: ({ row }) => <RenderEmail row={row} />,
  // 删 type: 'number'
}
  • 去掉 type: 'number'(避免默认右对齐)
  • 显式 align: 'left' + headerAlign: 'left'
  • sortComparator 保留按数量排序的能力(valueGetter 提供值)

教训

  • type: 'number' 不只是类型声明,还隐含 align: 'right' 视觉行为
  • MUI DataGrid 的 column 配置项强耦合(type / align / filter / sort)— 改一个 type 会动一堆视觉
  • renderCell 自定义渲染时,显式声明 align比依赖 type 默认更安全
  • 加入 ui-change-pre-check 案例:v0.10.112 加 RenderEmail 但忘了改 align,dogfood 截图才暴露

关联

  • ISSUE-0021:v0.9 期间 chip 参差不齐(旧的对齐类 bug)
  • ISSUE-0075:列维度一致性(这次是同列内对齐方式与渲染内容不匹配)