Rate
输入评分。中文惯用名:评分。
稳定本期新增已接入
元信息
| 字段 | 值 |
|---|---|
| 规范 ID | component.rate |
| 名称 | Rate |
| 二级分类 | 数据录入(data-entry) |
| 用途 | 输入评分 |
| 描述 | 中文惯用名:评分。 |
预览
静态结构:Rate 渲染为 data-slot="rate" 的 radiogroup 容器,内部每星为 data-slot="rate-star" 节点——lucide Star 图标叠加透明 button 点击区(allowHalf 时拆为左 / 右两个半区,分别得 x.5 与整数);选中星以 warning 色填充,半星以左半裁剪层呈现。Form 内声明 name 时外层包 FieldShell(label + 校验错误),控件本体为内联星组。
DSL 结构
{
"type": "Rate",
"props": {
"name": "satisfaction",
"value": 4,
"count": 5,
"allowHalf": true
},
"events": {
"onChange": {
"action": "setState",
"params": {
"satisfaction": "${event}"
}
}
}
}何时用
何时使用
- 输入用户对内容、商品、服务的满意度或质量评分(如 1-5 星)。
- 评论、反馈表单中的轻量评分字段;精度要求不高、强调直观表达。
- 半星精度场景(allowHalf)满足更细的评分粒度。
何时不用
- 精确数值输入或大范围连续取值:使用 NumberInput 或 Slider——Rate 语义是「评分」,值域小且离散。
- 单纯展示评分结果(不允许修改):使用数据展示组件渲染,不要把 Rate 只读使用。
- 二元的好 / 不好反馈:使用 RadioGroup 或 Switch 更直白。
变体
| 变体 | 视觉形态 | 适用场景 |
|---|---|---|
| 整数评分(缺省) | count 颗星,点击整星得整数分 | 常规 1-5 星满意度评价 |
| allowHalf 半星 | 每星拆左 / 右两个点击区,可出现半星填充 | 需要 0.5 步进精度的评分(如课程、酒店) |
| count 自定义星数 | 星数按 count 渲染,缺省 5 | 非 5 档评分体系(如 10 分制拆 10 星) |
| disabled 禁用 | 星组半透明,点击区禁用 | 历史评分回显、无权限修改 |
API 属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name | string | — | 字段名;在 Form 内声明即自动成为表单项 |
label | string | — | 表单项标签(FieldShell 呈现) |
rules | FieldRule[] | — | 校验规则 |
value | number | — | 受控值(独立渲染时生效);Form 内作为字段初始值(优先于 Form initialValues) |
count | number | 5 | 星总数 |
allowHalf | boolean | false | 允许半星:点击星左半得 x.5,右半得整数 |
disabled | boolean | false | 禁用,星组半透明且不可点击 |
onChange | (value: number) => void | — | 评分变化事件,传出 number(DSL 语义值) |
className | string | — | 根节点 class(Form 内为 form-item 容器,独立渲染时为控件本身) |
style | CSSProperties | — | 根节点内联样式(同 className 的挂载规则) |
使用规范
- 评分值域保持小而离散;count 缺省 5,非必要不改动,避免与常见 5 星心智冲突。
- 需要 0.5 步进再开 allowHalf;开了就不要在展示层四舍五入成整数。
- Form 内声明 name 后配合 rules 做必填校验(如评价提交必须打分)。
- onChange 传出 number;半星场景值为 x.5,落库字段需支持小数。
- 不用 Rate 做只读展示:展示场景禁用交互语义,避免用户误以为可改。
正例
- ✓ 评价表单:Rate 声明 name 与必填 rules,提交时校验「请打分」。
- ✓ 酒店评分:allowHalf 开启,用户可打 4.5 分,onChange 传出 4.5。
- ✓ 只读回显:disabled 渲染历史评分,配合文字「4.5 分」辅助说明。
反例
- ✕ 用 Rate 录入价格、数量等精确数值(应使用 NumberInput / Slider)。
- ✕ 把 Rate 当展示组件长期 disabled 使用,用户反复点击无响应。
- ✕ allowHalf 评分落库到整数字段,0.5 分被静默截断。
Design Token 映射
不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。