Transfer

Double column transfer choice box.
Importimport{ Transfer }from"antd";

When To Use

  • It is a select control essentially which can be use for selecting multiple items.
  • Transfer can display more information for items and take up more space.

Transfer the elements between two columns in an intuitive and efficient way.

One or more elements can be selected from either column, one click on the proper direction button, and the transfer is done. The left column is considered the source and the right column is considered the target. As you can see in the API description, these names are reflected in.

notice: Transfer is a controlled component, uncontrolled mode is not supported.

Examples

11 itemsSource
  • content1
  • content2
  • content3
  • content4
  • content5
  • content6
  • content7
  • content8
  • content9
  • content10
  • content11
9 itemsTarget
  • content12
  • content13
  • content14
  • content15
  • content16
  • content17
  • content18
  • content19
  • content20

The most basic usage of Transfer involves providing the source data and target keys arrays, plus the rendering and some callback functions.

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
14 itemsSource
  • content1
  • content2
  • content4
  • content5
  • content7
  • content8
  • content10
  • content11
  • content13
  • content14
  • content16
  • content17
  • content19
  • content20
6 itemsTarget
  • content3
  • content6
  • content9
  • content12
  • content15
  • content18

Use oneWay to make Transfer the one way style.

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code

Advanced Usage of Transfer.

You can customize the labels of the transfer buttons, the width and height of the columns, and what should be displayed in the footer.

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
0 item
No data
No data
0 item
No data
No data

Customize each Transfer Item, allowing you to render a complex datasource.

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
0 item
No data
No data
0 item
No data
No data

Store a large amount of items with pagination.

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
20 items
0 item

Customize the render list with a Table component.

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
7 items
0-1
0 item
No data
No data

Customize the render list with a Tree component.

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
0 item
No data
No data
0 item
No data
No data
0 item
0 item

Add status to Transfer with status, which could be error or warning.

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code

API

Common props ref:Common props

PropertyDescriptionTypeDefaultVersion
dataSourceUsed for setting the source data. The elements that are part of this array will be present the left column. Except the elements whose keys are included in targetKeys propRecordType extends TransferItem = TransferItem[][]
disabledWhether disabled transferbooleanfalse
selectionsIconcustom dropdown iconReact.ReactNode5.8.0
filterOptionA function to determine whether an item should show in search result list, only works when searching, (add direction support since 5.9.0+)(inputValue, option, direction: left | right): boolean-
footerA function used for rendering the footer(props, { direction }) => ReactNode-direction: 4.17.0
listStyleA custom CSS style used for rendering the transfer columnsobject | ({direction: left | right}) => object-
localeThe i18n text including filter, empty text, item unit, etc{ itemUnit: string; itemsUnit: string; searchPlaceholder: string; notFoundContent: ReactNode | ReactNode[]; }{ itemUnit: item, itemsUnit: items, notFoundContent: The list is empty, searchPlaceholder: Search here }
oneWayDisplay as single direction stylebooleanfalse4.3.0
operationsA set of operations that are sorted from top to bottomstring[][>, <]
operationStyleA custom CSS style used for rendering the operations columnobject-
paginationUse pagination. Not work in render propsboolean | { pageSize: number, simple: boolean, showSizeChanger?: boolean, showLessItems?: boolean }false4.3.0
renderThe function to generate the item shown on a column. Based on an record (element of the dataSource array), this function should return a React element which is generated from that record. Also, it can return a plain object with value and label, label is a React element and value is for title(record) => ReactNode-
selectAllLabelsA set of customized labels for select all checkboxes on the header(ReactNode | (info: { selectedCount: number, totalCount: number }) => ReactNode)[]-
selectedKeysA set of keys of selected itemsstring[] | number[][]
showSearchIf included, a search box is shown on each columnboolean | { placeholder:string,defaultValue:string }false
showSelectAllShow select all checkbox on the headerbooleantrue
statusSet validation status'error' | 'warning'-4.19.0
targetKeysA set of keys of elements that are listed on the right columnstring[] | number[][]
titlesA set of titles that are sorted from left to rightReactNode[]-
onChangeA callback function that is executed when the transfer between columns is complete(targetKeys, direction, moveKeys): void-
onScrollA callback function which is executed when scroll options list(direction, event): void-
onSearchA callback function which is executed when search field are changed(direction: left | right, value: string): void-
onSelectChangeA callback function which is executed when selected items are changed(sourceSelectedKeys, targetSelectedKeys): void-

Render Props

Transfer accept children to customize render list, using follow props:

PropertyDescriptionTypeVersion
directionList render directionleft | right
disabledDisable list or notboolean
filteredItemsFiltered itemsRecordType[]
selectedKeysSelected itemsstring[] | number[]
onItemSelectSelect item(key: string | number, selected: boolean)
onItemSelectAllSelect a group of items(keys: string[] | number[], selected: boolean)

example

<Transfer {...props}>{(listProps) => <YourComponent {...listProps} />}</Transfer>

Warning

According the standard of React, the key should always be supplied directly to the elements in the array. In Transfer, the keys should be set on the elements included in dataSource array. By default, key property is used as an unique identifier.

If there's no key in your data, you should use rowKey to specify the key that will be used for uniquely identify each element.

// eg. your primary key is `uid`
return <Transfer rowKey={(record) => record.uid} />;

Design Token

Component TokenHow to use?

Token NameDescriptionTypeDefault Value
headerHeightHeight of headerstring | number40
itemHeightHeight of list itemstring | number32
itemPaddingBlockVertical padding of list itemstring | number5
listHeightHeight of liststring | number200
listWidthWidth of liststring | number180
listWidthLGWidth of large liststring | number250

Global TokenHow to use?

FAQ

How to support fetch and present data from a remote server in Transfer column.

In order to keep the page number synchronized, you can disable columns you checked without removing the option: https://codesandbox.io/s/objective-wing-6iqbx