Files
aurora-admin/site/end-content/cascader.react.json

82 lines
3.6 KiB
JSON
Raw Permalink 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": "cascader",
"end": "react",
"curated": true,
"summary": "React 端级联选择器:单选存一条路径数组,多选存路径数组的数组,带搜索与逐级展开。",
"usage": [
"单选时 value 是一条路径数组,多选时是路径数组的数组;判重统一用 JSON.stringify 比较路径,所以路径元素需保持可序列化。",
"展开层级由 activePath state 记录,每次点某一列都会用 activePath.slice(0, lv) 截断再拼上新值,右侧列随之重算。",
"多选只在叶子节点出现勾选框,源码用 multiple && !n.children 判断,父节点点击仅用于换列。",
"输入搜索词时 results 由 allLeaves 过滤得到,匹配依据是整条路径 label 拼成字符串后 includes,搜索态与逐级浏览态共用同一面板。",
"commit 与 choose 都由内部函数改写值后调 onChange,受控判断与 ListPicker 相同:value 传入即不自持状态。"
],
"bestPractices": [
"判重依赖 JSON.stringify 的结果,选项路径里不能放函数或循环引用,否则比较恒为 false 导致重复选中。",
"多选值类型是数组的数组,onChange 回传的也是它,消费方要按 value.some 逐路径比对而不是 includes。",
"切换单选与多选会改变 value 的形状,不要在同一实例上动态切 multiple,数据形状与渲染分支会同时对不上。"
],
"apiCarrier": {
"kind": "props",
"note": "React 端 6 个 props、唯一回调 onChange;展开层级 activePath 与搜索词 query 是内部 state。",
"table": [
{
"name": "value",
"type": "Array(受控)",
"desc": "单选为路径数组,多选为路径数组的数组;传入即受控"
},
{
"name": "defaultValue",
"type": "Array,默认 []",
"desc": "非受控初始值,作为 useState 初值使用"
},
{
"name": "options",
"type": "Array,树形",
"desc": "每项形如 {value,label,children?},children 存在即还能继续下钻"
},
{
"name": "multiple",
"type": "Boolean",
"desc": "是否多选,仅在叶子节点渲染勾选框"
},
{
"name": "filterable",
"type": "Boolean",
"desc": "是否显示搜索输入与匹配结果列表"
},
{
"name": "onChange",
"type": "(value) => void",
"desc": "选中或取消后回调,参数形状随 multiple 变化"
}
]
},
"a11y": [
"触发器是 div 加 onClick,无 tabindex 与 role,键盘无法进入级联面板。",
"各级选项是 div 加 onClick,没有 role=treeitem 或 aria-expanded,正在展开哪一级、还有没有子级都读不出来。",
"多选勾选框只是 span.box 里的 ✓ 文本,缺 role=checkbox 与 aria-checked。"
],
"resources": [
{
"file": "frameworks/Cascader.jsx",
"kind": "React 实现",
"desc": "Cascader.jsx —— 本端实现全文,含结构与交互逻辑"
},
{
"file": "frameworks/Cascader.css",
"kind": "样式文件",
"desc": "frameworks/Cascader.css —— 组件全部 kole-* 类名与 is-* 状态类的样式定义"
}
],
"exampleIds": [
"cascader-ex-1",
"cascader-ex-2"
],
"notes": [
"props 声明与形状说明见 frameworks/Cascader.jsx:16-25,受控判断在第 27 行。",
"逐级展开见 frameworks/Cascader.jsx:41-52,叶子勾选判定见第 130 行与第 133 行。",
"搜索匹配集 allLeaves 见 frameworks/Cascader.jsx:54-65。",
"组件自带用法示例注释见 frameworks/Cascader.jsx:147-152。"
]
}