Files
aurora-admin/site/end-content/rate.react.json
T

113 lines
5.1 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"slug": "rate",
"end": "react",
"curated": true,
"summary": "评分:分数走 value/defaultValue,allowHalf 等为 props,变化回调 onChange。",
"usage": [
"React 端分值逻辑是「传 value 受控、传 defaultValue 非受控」的唯一分流点(Rate.jsx:33)。",
"半星不靠拆图标,而是每个星内部再叠一层宽度百分比填充:stars 数组算出每颗星的填充比例(Rate.jsx:35,55)。",
"半星判定用鼠标位置:allowHalf 时按 getBoundingClientRect 判断是否落在左半边像素(Rate.jsx:41-45)。",
"重复点击同一分值会归零:next === current 时置 0(Rate.jsx:46),是组件内建的行为而不是父组件判断。",
"文案由数值反查 texts 数组,showText 为真才渲染(Rate.jsx:36,58);尺寸用 size=\"sm\" | \"lg\" 拼到根类名上(Rate.jsx:52)。"
],
"bestPractices": [
"只读展示用 readonly,不要用 disabled:两者都阻止交互,但 readonly 有独立的 is-readonly 类供样式区分(Rate.jsx:39,52)。",
"texts 长度要与 count 对齐,反查下标是 Math.ceil(current) - 1,长度不足会取到 undefined(Rate.jsx:36)。",
"需要「点击后归零」以外的清空策略请在父级处理 onChange 的 0 值,组件不提供独立清空入口。"
],
"apiCarrier": {
"kind": "props",
"note": "React 端的 API 载体是 props 与回调:属性驱动外观(type/size/disabled 等布尔与枚举),交互经 onXxx 回传(如 onChange/onClick/onSelectionChange);没有 v-model,受控组件固定写成 value + onChange,非受控则用 defaultValue。",
"table": [
{
"name": "value",
"type": "number",
"desc": "受控分值"
},
{
"name": "defaultValue",
"type": "number",
"desc": "非受控初始分值"
},
{
"name": "count",
"type": "number",
"desc": "星星数量,默认 5"
},
{
"name": "allowHalf",
"type": "boolean",
"desc": "允许半星,按点击位置在星的左右半边判定"
},
{
"name": "readonly",
"type": "boolean",
"desc": "只读,不响应点击"
},
{
"name": "disabled",
"type": "boolean",
"desc": "禁用"
},
{
"name": "size",
"type": "'default' | 'sm' | 'lg'",
"desc": "尺寸,非 default 时追加到根类名"
},
{
"name": "showText",
"type": "boolean",
"desc": "是否显示评分文案"
},
{
"name": "texts",
"type": "string[]",
"desc": "文案数组,按分值取下标"
},
{
"name": "onChange",
"type": "(value) => void",
"desc": "分值变化回调,重复点击同分回传 0"
}
]
},
"a11y": [
"每颗星是带 onClick 的 span(Rate.jsx:54),不是可聚焦控件,键盘用户无法评分。",
"没有 role=\"slider\"/\"radiogroup\" 或 aria-valuenow,读屏读不出当前分值。",
"只读态建议在业务侧补一段可见文本(如「4.5 分」),因为 showText 只覆盖文案而不暴露数值语义。"
],
"resources": [
{
"file": "frameworks/Rate.jsx",
"kind": "React(React)",
"desc": "React 端组件实现源码,props 与回调的唯一定义处"
},
{
"file": "frameworks/Rate.css",
"kind": "样式",
"desc": "该 React 实现依赖的样式文件"
}
],
"exampleIds": [
"rate-ex-1",
"rate-ex-2",
"rate-ex-3",
"rate-ex-4"
],
"notes": [
"frameworks/Rate.jsx:9 中可指到 value(number)——受控分值",
"frameworks/Rate.jsx:9 中可指到 defaultValue(number)——非受控初始分值",
"frameworks/Rate.jsx:10 中可指到 count(number)——星星数量,默认 5",
"frameworks/Rate.jsx:11 中可指到 allowHalf(boolean)——允许半星,按点击位置在星的左右半边判定",
"frameworks/Rate.jsx:12 中可指到 readonly(boolean)——只读,不响应点击",
"frameworks/Rate.jsx:12 中可指到 disabled(boolean)——禁用",
"frameworks/Rate.jsx:13 中可指到 size('default' | 'sm' | 'lg')——尺寸,非 default 时追加到根类名",
"frameworks/Rate.jsx:14 中可指到 showText(boolean)——是否显示评分文案",
"frameworks/Rate.jsx:15 中可指到 texts(string[])——文案数组,按分值取下标",
"frameworks/Rate.jsx:16 中可指到 onChange((value) => void)——分值变化回调,重复点击同分回传 0",
"props 解构清单见 frameworks/Rate.jsx:20-31;本文件 table 只列该端真正消费的属性与回调。",
"过滤口径:事实包 consumedApi 里还包含绑在组件内部节点上的同名处理器(如 onClick/onChange 绑在内部 button、input、checkbox 上,见 frameworks/Rate.jsx 全文),它们不是对外 props,因此未进 table。",
"table 构成核验:10 行中 10 行是 frameworks/Rate.jsx 解构出的顶层 props(解构块 frameworks/Rate.jsx:20-31);本组件 table 全部为顶层 props。"
]
}