zent-select

1.1.0 • Public • Published

Select 选择器

选择器,提供多种选择器功能。

使用指南

组件分层:主要分成 Select, Popup, Trigger 三个模块

1. Select

核心控制器,主要职责是格式化数据,负责 Popup 和 Trigger 间的数据传输

2. Popup

选项列表弹出层,主要负责展示选项,数据过滤控制

3. Trigger

  • 触发器,暴露给使用者,可以通过 trigger 属性进行配置
  • 核心的 trigger 有 SelectTrigger 和 InputTrigger
  • TagsTrigger 是基于 InputTrigger 扩展出来的拥有多选功能的 trigger
  • 使用者可以自行扩展或开发 trigger

代码演示

:::demo 基础用法

import { Select } from 'zent';
 
const Option = Select.Option;
 
ReactDOM.render(
  <Select>
    <Option value="1">选项一</Option>
    <Option value="2">选项二</Option>
    <Option value="3">选项三</Option>
  </Select>
  , mountNode
);

:::

:::demo 支持数组类型选项

import { Select } from 'zent';
 
const data = ['选项一', '选项二', '选项三'];
 
ReactDOM.render(
  <Select data={data} />
  , mountNode
);

:::

:::demo 支持对象形式的选项文案与选项值

import { Select } from 'zent';
 
const data = [
     {value: 1, text: '选项一'},
     {value: 2, text: '选项二'},
     {value: 3, text: '选项三'}
];
 
ReactDOM.render(
  <Select data={data} />
  , mountNode
);

:::

:::demo 支持自定义文案与值对应的key

import { Select } from 'zent';
 
const data = [
     {id: 1, name: '选项一'},
     {id: 2, name: '选项二'},
     {id: 3, name: '选项三'}
];
 
ReactDOM.render(
  <Select
    data={data}
    optionValue="id"
    optionText="name"
  />
  , mountNode
);

:::

:::demo 支持键盘上下方向键选择选项

import { Select } from 'zent';
 
const data = [
     {id: 1, name: '选项一'},
     {id: 2, name: '选项二'},
     {id: 3, name: '选项三'}
];
 
ReactDOM.render(
  <Select
    data={data}
    optionValue="id"
    optionText="name"
  />
  , mountNode
);

:::

:::demo 支持选项改变后的回调

import { Select, Dialog } from 'zent';
 
const data = [
     {id: 1, name: '选项一'},
     {id: 2, name: '选项二'},
     {id: 3, name: '选项三'}
];
 
function showOption(ev, data) {
  Dialog.openDialog({
    children: `你选择了${data.name}, 值是${data.id}`
  });
}
 
ReactDOM.render(
  <Select
    data={data}
    optionValue="id"
    optionText="name"
    onChange={showOption}
  />
  , mountNode
);

:::

:::demo 支持禁用选项组件

import { Select } from 'zent';
 
const data = [
     {id: 1, name: '选项一'},
     {id: 2, name: '选项二'},
     {id: 3, name: '选项三'}
];
 
ReactDOM.render(
  <Select
    data={data}
    optionValue="id"
    optionText="name"
    disabled
  />
  , mountNode
);

:::

:::demo 支持过滤功能

import { Select } from 'zent';
 
const data = [
     {id: 1, name: '选项一'},
     {id: 2, name: '选项二'},
     {id: 3, name: '选项三'}
];
 
ReactDOM.render(
  <Select
    data={data}
    optionValue="id"
    optionText="name"
    filter={(item, keyword) => item.name.indexOf(keyword) > -1}
  />
  , mountNode
);

:::

:::demo 支持自定义搜索框文案

import { Select } from 'zent';
 
const data = [
     {id: 1, name: '选项一'},
     {id: 2, name: '选项二'},
     {id: 3, name: '选项三'}
];
 
ReactDOM.render(
  <Select
    data={data}
    optionValue="id"
    optionText="name"
    searchPlaceholder="Search"
    filter={(item, keyword) => item.name.indexOf(keyword) > -1}
  />
  , mountNode
);

:::

:::demo 支持自定义无选项文案

import { Select } from 'zent';
 
const data = [
     {id: 1, name: '选项一'},
     {id: 2, name: '选项二'},
     {id: 3, name: '选项三'}
];
 
ReactDOM.render(
  <Select
    data={data}
    optionValue="id"
    optionText="name"
    emptyText="No Result"
    filter={(item, keyword) => item.name.indexOf(keyword) > -1}
  />
  , mountNode
);

:::

:::demo 支持输入搜索

import { Select } from 'zent';
 
const data = [
     {id: 1, name: '选项一'},
     {id: 2, name: '选项二'},
     {id: 3, name: '选项三'}
];
 
ReactDOM.render(
  <Select
    data={data}
    optionValue="id"
    optionText="name"
    search
    filter={(item, keyword) => item.name.indexOf(keyword) > -1}
  />
  , mountNode
);

:::

:::demo 支持多选标签

import { Select } from 'zent';
 
const data = [
     {id: 1, name: '选项一'},
     {id: 2, name: '选项二'},
     {id: 3, name: '选项三'}
];
 
ReactDOM.render(
  <Select
    data={data}
    optionValue="id"
    optionText="name"
    tags
    filter={(item, keyword) => item.name.indexOf(keyword) > -1}
  />
  , mountNode
);

:::

API

参数 说明 类型 默认值 是否必填
data 选项数据 array []
value 选中的值,当为tags类型时,可以传入数组 any ''
index 选中索引 any ''
disabled 禁用组件 bool false
placeholder 默认提示文案 string '请选择'
searchPlaceholder 搜索框默认文案 string ''
emptyText 空列表提示文案 string '没有找到匹配项'
trigger 自定义触发器 function Select.SelectTrigger
optionText 自定义选项显示文案对应的key, 如{ id: 1, name: '文案' }, 设置optionText="name" string 'text'
optionValue 自定义选项的值对应的key, 如{ id: 1, name: '文案' }, 设置optionValue="id" string 'value'
onChange 选择变更后的回调函数 function noop
onDelete 删除标签后的回调函数 function noop
filter 过滤条件,设置以后才会开启过滤功能 function null
onAsyncFilter 异步设置过滤后的数据 function null
onEmptySelected 选中过滤条件为空时的回调 function noop
onOpen 展开时的回调 function noop
className 自定义额外类名 string ''
prefix 自定义前缀 string 'zent'

如果 data 和 children 两种方式同时使用,data 会将 children 覆盖,主要是为了可以接收异步数据直接改变 data 属性来改变选项。

Trigger开发API

参数 说明 类型 默认值 是否必填
selectedItems 已选择的条目 array []
extraFilter 是否自带过滤功能 boolean false
open 是否打开Popup boolean false

Trigger 可以通过调用 this.props.onChange({...}) 通过改变 Popup 的 props 实现参数传递。

Readme

Keywords

none

Package Sidebar

Install

npm i zent-select

Weekly Downloads

25

Version

1.1.0

License

MIT

Last publish

Collaborators

  • youzan-lc