AutoComplete 自动补全

输入框自动完成功能。

何时使用

  • 需要一个输入框而不是选择器。
  • 需要输入建议/辅助提示。

和 Select 的区别是:

  • AutoComplete 是一个带提示的文本输入框,用户可以自由输入,关键词是辅助输入。
  • Select 是在限定的可选项中进行选择,关键词是选择。

代码演示

基本使用

基本使用。

AutoComplete自动补全 - 图1

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { AutoComplete, DataSet } from 'choerodon-ui/pro';
  4. class App extends React.Component {
  5. state = {
  6. options: new DataSet({
  7. fields: [{
  8. name: 'value', type: 'string',
  9. }, {
  10. name: 'meaning', type: 'string',
  11. }],
  12. data: [{
  13. value: '1',
  14. meaning: '1',
  15. }, {
  16. value: '12',
  17. meaning: '12',
  18. }, {
  19. value: '123',
  20. meaning: '123',
  21. }],
  22. }),
  23. }
  24. render() {
  25. const { options } = this.state
  26. const optionRenderer = ({ value }) => {
  27. return `${value}@qq.com`

绑定数据源

绑定数据源

AutoComplete自动补全 - 图2

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { AutoComplete, DataSet, Tooltip, Icon } from 'choerodon-ui/pro';
  4. const data = [{
  5. user: 'wu',
  6. }];
  7. const renderer = ({ text }) => (
  8. <div style={{ width: '100%' }}>
  9. {text && <Icon type="people" />} {text}
  10. </div>
  11. );
  12. const optionRenderer = ({ text }) => (
  13. <Tooltip title={text} placement="left">
  14. {renderer({ text })}
  15. </Tooltip>
  16. );
  17. function handleDataSetChange({ record, name, value, oldValue }) {
  18. console.log('[dataset newValue]', value, '[oldValue]', oldValue, `[record.get('${name}')]`, record.get(name));
  19. }
  20. class App extends React.Component {
  21. ds = new DataSet({
  22. data,
  23. fields: [
  24. { name: 'user', type: 'string', label: '用户' },

动态选项

动态选项。

AutoComplete自动补全 - 图3

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { AutoComplete, DataSet } from 'choerodon-ui/pro';
  4. class App extends React.Component {
  5. state = {
  6. options: new DataSet({
  7. fields: [{
  8. name: 'value', type: 'string',
  9. }, {
  10. name: 'meaning', type: 'string',
  11. }],
  12. }),
  13. }
  14. render() {
  15. const { options } = this.state
  16. const handeValueChange = (v) => {
  17. const value = v.target.value
  18. const suffixList = ['@qq.com', '@163.com', '@hand-china.com']
  19. if (value.indexOf('@') !== -1) {
  20. options.loadData([])
  21. } else {
  22. options.loadData(suffixList.map(suffix => ({
  23. value: `${value}${suffix}`,
  24. meaning: `${value}${suffix}`,
  25. })))
  26. }
  27. }

API

属性说明类型
options自动完成的数据源DataSet
optionRenderer渲染 Option 文本的钩子({ record, text, value }) => ReactNode