UNPKG

cnd-components-mcp

Version:

An MCP service for Cnd components query | 一个减少 Cnd 组件代码生成幻觉的 MCP 服务,包含系统提示词、组件文档、API 文档、代码示例和更新日志查询

246 lines (211 loc) 27.5 kB
## 简介 结构树也可简称为树,常用于表现树状信息结构的场景,分支可以展开或折叠,也可以提供单选、多选、异步加载等复杂功能。 ## 示例 ```tsx import React from 'react'; import { Tree } from '@alicloud/console-components'; const TreeNode = Tree.Node; const contentStyle = { display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 36, }; export default () => { return ( <div style={contentStyle}> <Tree defaultSelectedKeys={['14']} defaultExpandedKeys={['7', '11']}> <TreeNode label="默认项" key="0"> <TreeNode label="默认项" key="1" /> </TreeNode> </Tree> <Tree defaultSelectedKeys={['14']} defaultExpandedKeys={['0']}> <TreeNode label="默认项" key="0"> <TreeNode label="默认项" key="1" /> </TreeNode> </Tree> <Tree defaultSelectedKeys={['0']}> <TreeNode label="聚焦项" key="0"> <TreeNode label="默认项" key="1" /> </TreeNode> </Tree> <Tree defaultSelectedKeys={['0']} defaultExpandedKeys={['0']}> <TreeNode label="聚焦项" key="0"> <TreeNode label="默认项" key="1" /> </TreeNode> </Tree> <Tree defaultSelectedKeys={['14']}> <TreeNode label="禁用项" key="0" disabled> <TreeNode label="默认项" key="1" /> </TreeNode> </Tree> <Tree defaultSelectedKeys={['14']} defaultExpandedKeys={['0']}> <TreeNode label="禁用项" key="0" disabled> <TreeNode label="默认项" key="1" /> </TreeNode> </Tree> </div> ); }; export const meta = { title: '默认', describe: '分支节点形态。', }; ``` ```tsx import React from 'react'; import { Tree } from '@alicloud/console-components'; const TreeNode = Tree.Node; export default () => { return ( <Tree defaultSelectedKeys={['14']} defaultExpandedKeys={['0', '7', '11']}> <TreeNode label="默认项" key="0"> <TreeNode label="默认项" key="1"> <TreeNode label="默认项" key="4" /> <TreeNode label="默认项" key="5" /> </TreeNode> <TreeNode label="聚焦项" key="2"> <TreeNode label="默认项" key="6"> <TreeNode label="默认项" key="10" /> </TreeNode> <TreeNode label="默认项" key="7"> <TreeNode label="默认项" key="11"> <TreeNode label="默认项" key="15" /> </TreeNode> <TreeNode label="默认项" key="12" /> <TreeNode label="聚焦项" key="13" /> <TreeNode label="选中项" key="14" /> </TreeNode> </TreeNode> <TreeNode label="禁用项" key="3" disabled> <TreeNode label="叶子" key="8" /> <TreeNode label="叶子" key="9" /> </TreeNode> </TreeNode> </Tree> ); }; export const meta = { title: '基本树结构', describe: '通过 defaultSelectedKeys 属性设置默认选中项,通过 defaultExpandedKeys 属性设置默认展开项。', }; ``` ```tsx import React from 'react'; import { Tree } from '@alicloud/console-components'; const TreeNode = Tree.Node; export default () => { return ( <Tree showLine defaultSelectedKeys={['14']} defaultExpandedKeys={['0', '7', '11']} > <TreeNode label="默认项" key="0"> <TreeNode label="默认项" key="1"> <TreeNode label="默认项" key="4" /> <TreeNode label="默认项" key="5" /> </TreeNode> <TreeNode label="聚焦项" key="2"> <TreeNode label="默认项" key="6"> <TreeNode label="默认项" key="10" /> </TreeNode> <TreeNode label="默认项" key="7"> <TreeNode label="默认项" key="11"> <TreeNode label="默认项" key="15" /> </TreeNode> <TreeNode label="默认项" key="12" /> <TreeNode label="聚焦项" key="13" /> <TreeNode label="选中项" key="14" /> </TreeNode> </TreeNode> <TreeNode label="禁用项" key="3" disabled> <TreeNode label="叶子" key="8" /> <TreeNode label="叶子" key="9" /> </TreeNode> </TreeNode> </Tree> ); }; export const meta = { title: '线型树结构', describe: '通过 showLine 属性设置为线性结构。', }; ``` ```tsx ``` ## API ### Tree | 参数 | 说明 | 类型 | 默认值 | 是否必填 | 支持版本 | | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | -------- | -------- | | children | 树节点 | React.ReactNode | - | | - | | dataSource | 数据源,该属性优先级高于 children | TreeDataType\[] | - | | - | | showLine | 是否显示树的线 | boolean | false | | - | | selectable | 是否支持选中节点 | boolean | false | | - | | selectedKeys | (用于受控)当前选中节点 key 的数组 | string\[] | - | | - | | defaultSelectedKeys | (用于非受控)默认选中节点 key 的数组 | string\[] | \[] | | - | | onSelect | 选中或取消选中节点时触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*selectedKeys*: 选中节点key的数组<br/>*extra*: 额外参数<br/>**返回值**:<br/>空 | (<br/> selectedKeys: string\[],<br/> extra: {<br/> selectedNodes: Array\<NodeInstance>;<br/> node: NodeInstance;<br/> selected: boolean;<br/> event: React.KeyboardEvent | React.MouseEvent;<br/> }<br/> ) => void | () => {} | | - | | multiple | 是否支持多选 | boolean | false | | - | | checkable | 是否支持勾选节点的复选框 | boolean | false | | - | | checkedKeys | (用于受控)当前勾选复选框节点 key 的数组或 `{checked: Array, indeterminate: Array}` 的对象 | | {<br/> checked: string\[];<br/> indeterminate: string\[];<br/> }<br/> | string\[] | - | | - | | defaultCheckedKeys | (用于非受控)默认勾选复选框节点 key 的数组 | | {<br/> checked: string\[];<br/> indeterminate: string\[];<br/> }<br/> | string\[] | \[] | | - | | checkStrictly | 勾选节点复选框是否完全受控(父子节点选中状态不再关联) | boolean | false | | - | | checkedStrategy | 定义选中时回填的方式 | 'all' | 'parent' | 'child' | 'all' | | - | | onCheck | 勾选或取消勾选复选框时触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*checkedKeys*: 勾选复选框节点key的数组<br/>*extra*: 额外参数<br/>**返回值**:<br/>空 | (<br/> checkedKeys: string\[],<br/> extra: {<br/> checkedNodes: Array\<NodeInstance>;<br/> checkedNodesPositions: Array\<NodeInstance>;<br/> indeterminateKeys: string\[];<br/> node: NodeInstance;<br/> checked: boolean;<br/> key: Key;<br/> }<br/> ) => void | () => {} | | - | | expandedKeys | (用于受控)当前展开的节点 key 的数组 | string\[] | - | | - | | defaultExpandedKeys | (用于非受控)默认展开的节点 key 的数组 | string\[] | \[] | | - | | defaultExpandAll | 是否默认展开所有节点 | boolean | false | | - | | autoExpandParent | 是否自动展开父节点 | boolean | true | | - | | onExpand | 展开或收起节点时触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*expandedKeys*: 展开节点key的数组<br/>*extra*: 额外参数<br/>**返回值**:<br/>空 | (<br/> expandedKeys: string\[],<br/> extra: {<br/> node: NodeInstance;<br/> expanded: boolean;<br/> }<br/> ) => void | () => {} | | - | | editable | 是否支持编辑节点内容 | boolean | false | | - | | onEditFinish | 编辑节点内容完成时触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*key*: 编辑节点 key<br/>*label*: 编辑节点完成时节点的文本<br/>*node*: 当前编辑的节点<br/>**返回值**:<br/>空 | (key: Key, label: string, node: NodeInstance) => void | () => {} | | - | | draggable | 是否支持拖拽节点 | boolean | false | | - | | onDragStart | 开始拖拽节点时触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*info*: 额外参数<br/>**返回值**:<br/>空 | (info: {<br/> event: React.MouseEvent;<br/> node: NodeInstance;<br/> expandedKeys: string\[];<br/> }) => void | () => {} | | - | | onDragEnter | 拖拽节点进入目标节点时触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*info*: 额外参数<br/>**返回值**:<br/>空 | (info: {<br/> event: React.MouseEvent;<br/> node: NodeInstance;<br/> expandedKeys: Array\<string>;<br/> }) => void | () => {} | | - | | onDragOver | 拖拽节点在目标节点上移动的时候触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*info*: 额外参数<br/>**返回值**:<br/>空 | (info: { event: React.MouseEvent; node: NodeInstance }) => void | () => {} | | - | | onDragLeave | 拖拽节点离开目标节点时触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*info*: 额外参数<br/>**返回值**:<br/>空 | (info: { event: React.MouseEvent; node: NodeInstance }) => void | () => {} | | - | | onDragEnd | 拖拽节点拖拽结束时触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*info*: 额外参数<br/>**返回值**:<br/>空 | (info: { event: React.MouseEvent; node: NodeInstance }) => void | () => {} | | - | | onDrop | 拖拽节点放入目标节点内或前后触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*info*: 额外参数<br/>**返回值**:<br/>空 | (info: {<br/> event: React.MouseEvent;<br/> node: NodeInstance;<br/> dragNode: NodeInstance;<br/> dragNodesKeys: Array\<string>;<br/> dropPosition: number;<br/> }) => void | () => {} | | - | | canDrop | 节点是否可被作为拖拽的目标节点<br/><br/>**签名**:<br/>**参数**:<br/>*info*: 额外参数<br/>**返回值**:<br/>是否可以被当作目标节点 | (info: {<br/> event?: React.MouseEvent;<br/> node: NodeInstance;<br/> dragNode: NodeInstance;<br/> dragNodesKeys: Array\<string>;<br/> dropPosition: number;<br/> }) => boolean | () => {} | | - | | loadData | 异步加载数据的函数<br/><br/>**签名**:<br/>**参数**:<br/>*node*: 被点击展开的节点 | (node: NodeInstance) => Promise\<unknown> | - | | - | | filterTreeNode | 按需筛选高亮节点<br/><br/>**签名**:<br/>**参数**:<br/>*node*: 待筛选的节点<br/>**返回值**:<br/>是否被筛选中 | (node: NodeInstance) => boolean | - | | - | | onRightClick | 右键点击节点时触发的回调函数<br/><br/>**签名**:<br/>**参数**:<br/>*info*: 额外参数<br/>**返回值**:<br/>空 | (info: { event: React.MouseEvent; node: NodeInstance }) => void | () => {} | | - | | isLabelBlock | 设置节点是否占满剩余空间,一般用于统一在各节点右侧添加元素(借助 flex 实现,暂时只支持 ie10+) | boolean | false | | - | | isNodeBlock | 设置节点是否占满一行 | boolean | Record\<string, unknown> | false | | - | | animation | 是否开启展开收起动画 | boolean | true | | - | | focusedKey | 当前获得焦点的子菜单或菜单项 key 值 | Key | - | | - | | renderChildNodes | 渲染子节点<br/><br/>**签名**:<br/>**参数**:<br/>*nodes*: 所有的子节点<br/>**返回值**:<br/>子节点 | (nodes: NodeElement\[]) => React.ReactNode | - | | - | | labelRender | 渲染单个子节点<br/><br/>**签名**:<br/>**参数**:<br/>*node*: 节点数据<br/>**返回值**:<br/>返回节点 | (node: Record\<string, unknown>) => React.ReactNode | - | | 1.25 | | immutable | 是否是不可变数据 | boolean | false | | 1.23 | | useVirtual | 是否开启虚拟滚动 | boolean | false | | - | ### Tree.Node | 参数 | 说明 | 类型 | 默认值 | 是否必填 | | ---------------- | ---------------------------------------------- | --------------- | ------ | -------- | | children | 树节点 | React.ReactNode | - | | | label | 节点文本内容 | React.ReactNode | '-- | | | selectable | 单独设置是否支持选中,覆盖 Tree 的 selectable | boolean | - | | | checkable | 单独设置是否出现复选框,覆盖 Tree 的 checkable | boolean | - | | | editable | 单独设置是否支持编辑,覆盖 Tree 的 editable | boolean | - | | | draggable | 单独设置是否支持拖拽,覆盖 Tree 的 draggable | boolean | - | | | disabled | 是否禁止节点响应 | boolean | false | | | checkboxDisabled | 是否禁止勾选节点复选框 | boolean | false | | | isLeaf | 是否是叶子节点,设置loadData时生效 | boolean | - | | ## 更多示例 ```tsx ``` ```tsx ``` ```tsx ``` ```tsx ``` ```tsx ``` ```tsx ``` ```tsx ``` ```tsx ``` ```tsx ```