Transfer 穿梭框
如果项目中使用的是 1.x 版本的基础组件(@alifd/next),请在左侧导航顶部切换组件版本。
安装方法
- 在命令行中执行以下命令
npm install @icedesign/base@latest -S
开发指南
何时使用
用直观的方式在两栏中移动元素,完成选择行为。
API
穿梭框
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
prefix | 样式类名的品牌前缀 | String | 'next-' |
className | 自定义类名 | String | - |
style | 自定义内联样式 | Object | - |
dataSource | 数据源 | Array<Object> | [] |
value | (用于受控)当前值 | Array<String> | - |
defaultValue | (用于非受控)初始值 | Array<String> | [] |
onChange | 值发生改变的时候触发的回调函数签名:Function(value: Array, data: Array, extra: Object) => void参数:value: {Array} 右面板值data: {Array} 右面板数据extra: {Object} 额外参数extra.leftValue: {Array} 左面板值extra.leftData: {Array} 左面板数据extra.movedValue: {Array} 发生移动的值extra.movedData: {Object} 发生移动的数据extra.direction: {String} 移动的方向,值为'left'或'right' | Function | - |
showSearch | 是否显示搜索框 | Boolean | false |
searchPlaceholder | 搜索框占位符 | String | 'Search' |
titles | 左右面板标题 | Array<ReactNode> | [] |
operations | 向右向左移动按钮显示内容 | Array<ReactNode> | < |
defaultLeftChecked | 左面板默认选中值 | Array<String> | [] |
defaultRightChecked | 右面板默认选中值 | Array<String> | [] |
listStyle | 左右面板列表自定义样式 | Object | - |
locale | 自定义国际化文案对象 | Object | - |
language | 自定义国际化语言可选值:'zh-cn', 'en-us', 'zh-tw' | Enum | - |
代码示例
最简单的用法。
查看源码在线预览
import { Transfer } from "@icedesign/base";
const dataSource = (() => {
const dataSource = [];
for (let i = 0; i < 10; i++) {
dataSource.push({
label: `content${i}`,
value: `${i}`,
disabled: i % 4 === 0
});
}
return dataSource;
})();
class Demo extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(value, data, extra) {
console.log(value, data, extra);
}
render() {
return (
<Transfer
defaultValue={["3"]}
dataSource={dataSource}
defaultLeftChecked={["1"]}
onChange={this.handleChange}
/>
);
}
}
ReactDOM.render(<Demo />, mountNode);
展示受控的用法。
查看源码在线预览
import { Transfer } from "@icedesign/base";
const dataSource = (() => {
const dataSource = [];
for (let i = 0; i < 10; i++) {
dataSource.push({
label: `content${i}`,
value: `${i}`,
disabled: i % 4 === 0
});
}
return dataSource;
})();
class Demo extends React.Component {
constructor(props) {
super(props);
this.state = {
value: ["3"]
};
this.handleChange = this.handleChange.bind(this);
}
handleChange(value, data, extra) {
console.log(value, data, extra);
this.setState({
value
});
}
render() {
return (
<Transfer
value={this.state.value}
dataSource={dataSource}
defaultLeftChecked={["1"]}
onChange={this.handleChange}
/>
);
}
}
ReactDOM.render(<Demo />, mountNode);
展示自定义样式的用法。
查看源码在线预览
import { Transfer } from "@icedesign/base";
const dataSource = (() => {
const dataSource = [];
for (let i = 0; i < 10; i++) {
dataSource.push({
label:
i % 3 === 0
? `content${i}contentcontentcontentcontentcontent`
: `content${i}`,
value: `${i}`,
disabled: i % 4 === 0
});
}
return dataSource;
})();
class Demo extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(value, data, extra) {
console.log(value, data, extra);
}
render() {
return (
<Transfer
defaultValue={["3"]}
dataSource={dataSource}
listStyle={{ width: "200px", height: "192px" }}
defaultLeftChecked={["1"]}
onChange={this.handleChange}
language="en-us"
titles={["Source", "Target"]}
operations={[">>", "<<"]}
/>
);
}
}
ReactDOM.render(<Demo />, mountNode);
展示搜索的用法。
查看源码在线预览
import { Transfer } from "@icedesign/base";
const dataSource = (() => {
const dataSource = [];
for (let i = 0; i < 10; i++) {
dataSource.push({
label: `content${i}`,
value: `${i}`,
disabled: i % 4 === 0
});
}
return dataSource;
})();
class Demo extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(value, data, extra) {
console.log(value, data, extra);
}
render() {
return (
<Transfer
showSearch
defaultValue={["3"]}
dataSource={dataSource}
defaultLeftChecked={["1"]}
onChange={this.handleChange}
/>
);
}
}
ReactDOM.render(<Demo />, mountNode);