cnd-components-mcp
Version:
An MCP service for Cnd components query | 一个减少 Cnd 组件代码生成幻觉的 MCP 服务,包含系统提示词、组件文档、API 文档、代码示例和更新日志查询
187 lines (163 loc) • 5.51 kB
Markdown
---
group:
title: 云原生业务组件
---
# CndTransfer 穿梭框
## 代码库地址
https://code.alibaba-inc.com/cn-lowcode/cnd-transfer
## 基本使用
```tsx preview
import React, { useState } from "react";
import { CndTransfer } from "@ali/cnd";
const Demo = () => {
const [values, setValues] = useState([]);
const largeData = Array.from({length: 1000}).map((_v, i) => ({
label: `Service ${i}`, value: `Service ${i}`,
}));
return (
<div style={{width: "400px"}}>
<CndTransfer
titles={['选择服务', '已选择']}
dataSource={largeData}
value={values}
onChecked={setValues}
checkedAllButton={{
show: true,
text: `已选择${values.length}项`
}}
clearAllButton={{
show: true,
text: '清空',
}}
/>
</div>
)
};
export default Demo;
```
## 选项禁用
```tsx preview
import React, { useState } from "react";
import { CndTransfer } from "@ali/cnd";
const Demo = () => {
const [values, setValues] = useState([]);
const largeData = Array.from({length: 100}).map((_v, i) => ({
label: `Service ${i}`, value: `Service ${i}`, disabled: i % 2 === 0
}));
return (
<div style={{width: "400px"}}>
<CndTransfer
titles={[
'选择服务',
'已选择'
]}
dataSource={largeData}
value={values}
onChecked={setValues}
checkedAllButton={{
show: true,
text: `已选择${values.length}项`
}}
/>
</div>
)
};
export default Demo;
```
## 隐藏全选
```tsx preview
import React, { useState } from "react";
import { CndTransfer } from "@ali/cnd";
const Demo = () => {
const [values, setValues] = useState([]);
const largeData = Array.from({length: 100}).map((_v, i) => ({
label: `Service ${i}`, value: `Service ${i}`
}));
return (
<div style={{width: "400px"}}>
<CndTransfer
titles={['选择服务', '已选择']}
dataSource={largeData}
value={values}
onChecked={setValues}
checkedAllButton={{
show: false,
}}
/>
</div>
)
};
export default Demo;
```
## 回车添加
```tsx preview
import React, { useState } from "react";
import { CndTransfer } from "@ali/cnd";
const Demo = () => {
const [values, setValues] = useState([]);
const [dataSource, setDataSource] = useState(() => Array.from({length: 10}).map((_v, i) => ({
label: `Service ${i}`, value: `Service ${i}`
})));
const [loading, setLoading] = useState(false);
const handleRefresh = () => {
setLoading(true);
setTimeout(() => {
setLoading(false);
}, 1000)
}
const handlePressEnter = (evt) => {
const value = evt.target.value;
setDataSource([...dataSource, {label: value, value}]);
setValues([...values, value])
}
return (
<div style={{width: "400px"}}>
<CndTransfer
titles={[
<div style={{display: 'flex', justifyContent: 'space-between'}}>
<span>选择服务</span>
<span onClick={handleRefresh} >Refresh</span>
</div>,
'已选择'
]}
dataSource={dataSource}
value={values}
onChecked={setValues}
checkedAllButton={{
show: false,
}}
empty={<div>暂无数据</div>}
onPressEnter={handlePressEnter}
loadingProps={{
show: loading,
slot: <div>Loading...</div>
}}
/>
</div>
)
};
export default Demo;
```
## API
| 属性 | 说明 | 类型 | 默认值 |
| ---------------- | ------------------------ | -------------------------------------- | ------ |
| value | 值 | string[] | [] |
| onChecked | 数据发生改变时触发事件 | (values: string[]) => void | - |
| dataSource | 列表项 | [DataSource](#DataSource)[] | [] |
| titles | 左右标题 | React.ReactNode[] | [] |
| className | 自定义类名 | string | - |
| style | 自定义样式 | React.CSSProperties | - |
| listBoxStyle | 列表区自定义样式 | React.CSSProperties | - |
| checkedBoxStyle | 选择区自定义样式 | React.CSSProperties | - |
| itemSize | 列表项高度 | number | 30 |
| checkedAllButton | 全选按钮 | { show: boolean, text: React.ReactNode } | - |
| clearAllButton | 清空按钮 | { show: boolean, text: React.ReactNode } | - |
| onPressEnter | 按下回车事件 | (evt: React.KeyboardEvent\<HTMLInputElement\>) => void | - |
| empty | 空状态 | React.ReactNode | - |
| loadingProps | 加载状态 | { show: boolean, text: React.ReactNode } | - |
### DataSource
| 属性 | 说明 | 类型 | 默认值 |
| ----- | ----- | ------ | ------ |
| label | 选项名 | string \| number | - |
| value | 选项值 | string \| number | - |
| disabled | 禁用态 | boolean | - |