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

113 lines
5.2 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": "slider",
"end": "react",
"curated": true,
"summary": "滑块:value 给数值或区间,range 等为布尔 props,拖拽与输入都回调 onChange。",
"usage": [
"React 端一条组件覆盖单值与区间两种形态:range 为真时 value/defaultValue 是 [lo, hi] 数组(Slider.jsx:23,31,51-53)。",
"拖拽用指针事件实现:按下时挂载 window 上的 pointermove/pointerup,抬起后移除(Slider.jsx:63-69)。",
"点击轨道也可改值,且会选距离更近的手柄:range 模式下比较两端距离决定拖哪个(Slider.jsx:70-79)。",
"showInput 打开后渲染受控的数字输入框,与滑块共享同一份 value,输入即联动(Slider.jsx:81-89,123-134)。",
"刻度数量由 min/max/step 推导,而不是手工传刻度数组:Array.from 生成 tickPercents(Slider.jsx:97-100)。"
],
"bestPractices": [
"step 必须能整除量程方向上的取值,clamp 里用 Math.round 归一到步长,非整除会导致末值取不到 max(Slider.jsx:35-36)。",
"range 模式下区间始终升序:赋值后组件会 sort,父组件不必自己保证顺序(Slider.jsx:52,75)。",
"showInput 的数字框没有额外的空值保护,输入空字符串会被转成 NaN,业务侧应在 onChange 里做兜底。"
],
"apiCarrier": {
"kind": "props",
"note": "React 端的 API 载体是 props 与回调:属性驱动外观(type/size/disabled 等布尔与枚举),交互经 onXxx 回传(如 onChange/onClick/onSelectionChange);没有 v-model,受控组件固定写成 value + onChange,非受控则用 defaultValue。",
"table": [
{
"name": "value",
"type": "number | [number, number]",
"desc": "受控值,区间模式下为两元素数组"
},
{
"name": "defaultValue",
"type": "number | [number, number]",
"desc": "非受控初始值"
},
{
"name": "min",
"type": "number",
"desc": "最小值,默认 0"
},
{
"name": "max",
"type": "number",
"desc": "最大值,默认 100"
},
{
"name": "step",
"type": "number",
"desc": "步长,取值会按它归一"
},
{
"name": "range",
"type": "boolean",
"desc": "双滑块区间模式"
},
{
"name": "showTicks",
"type": "boolean",
"desc": "显示刻度"
},
{
"name": "showInput",
"type": "boolean",
"desc": "显示联动的数值输入框"
},
{
"name": "disabled",
"type": "boolean",
"desc": "禁用拖拽与输入"
},
{
"name": "onChange",
"type": "(value) => void",
"desc": "值变化回调,拖拽与输入框共用"
}
]
},
"a11y": [
"滑块本体是 div 而非 input[type=range](Slider.jsx:104-121),无 role=\"slider\"、无 aria-valuenow/aria-valuemin/aria-valuemax,键盘与读屏都无法操作。",
"range 模式下两个手柄都是无标签的 div,视觉用户只能靠位置判断,是明确的可访问性缺口。",
"showInput 渲染的原生数字输入框是唯一可键盘操作与可读屏的入口,需要无障碍支持时应打开它。"
],
"resources": [
{
"file": "frameworks/Slider.jsx",
"kind": "React(React)",
"desc": "React 端组件实现源码,props 与回调的唯一定义处"
},
{
"file": "frameworks/Slider.css",
"kind": "样式",
"desc": "该 React 实现依赖的样式文件"
}
],
"exampleIds": [
"slider-ex-1",
"slider-ex-2",
"slider-ex-3",
"slider-ex-4"
],
"notes": [
"frameworks/Slider.jsx:9 中可指到 value(number | [number, number])——受控值,区间模式下为两元素数组",
"frameworks/Slider.jsx:9 中可指到 defaultValue(number | [number, number])——非受控初始值",
"frameworks/Slider.jsx:10 中可指到 min(number)——最小值,默认 0",
"frameworks/Slider.jsx:10 中可指到 max(number)——最大值,默认 100",
"frameworks/Slider.jsx:10 中可指到 step(number)——步长,取值会按它归一",
"frameworks/Slider.jsx:11 中可指到 range(boolean)——双滑块区间模式",
"frameworks/Slider.jsx:12 中可指到 showTicks(boolean)——显示刻度",
"frameworks/Slider.jsx:13 中可指到 showInput(boolean)——显示联动的数值输入框",
"frameworks/Slider.jsx:14 中可指到 disabled(boolean)——禁用拖拽与输入",
"frameworks/Slider.jsx:15 中可指到 onChange((value) => void)——值变化回调,拖拽与输入框共用",
"props 解构清单见 frameworks/Slider.jsx:17-28;本文件 table 只列该端真正消费的属性与回调。",
"过滤口径:事实包 consumedApi 里还包含绑在组件内部节点上的同名处理器(如 onClick/onChange 绑在内部 button、input、checkbox 上,见 frameworks/Slider.jsx 全文),它们不是对外 props,因此未进 table。",
"table 构成核验:10 行中 10 行是 frameworks/Slider.jsx 解构出的顶层 props(解构块 frameworks/Slider.jsx:17-28);本组件 table 全部为顶层 props。"
]
}