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:列维度一致性(这次是同列内对齐方式与渲染内容不匹配)