react-native-multiple-select:基于 React Native 的多选组件项目

Simple multi-select component for react-native

Branch5Tags10
This repository is empty

反应原生多选组件

npm 版本 下载量 许可证

适用于React Native的简易多选组件(类似Select2的React Native版本)。

多选演示 单选演示

重要通知

近期因工作和其他项目非常忙碌,我无法投入足够时间维护此项目。如果你有兴趣接管维护,请通过 邮箱 联系我。谢谢。

安装

$ npm install react-native-multiple-select --save

或使用yarn:

$ yarn add react-native-multiple-select

使用方法

注意:在使用此包之前,请确保已在你的项目中添加并配置了 react-native-vector-icons

你可以克隆并尝试 示例应用,或者尝试 另一个示例

以下代码片段展示了如何使用该组件:

// 导入组件
import React, { Component } from 'react';
import { View } from 'react-native';
import MultiSelect from 'react-native-multiple-select';

const items = [
  { id: '92iijs7yta', name: 'Ondo' },
  { id: 'a0s0a8ssbsd', name: 'Ogun' },
  // ...其他项目
  { id: 'suudydjsjd', name: 'Abuja' },
];

class MultiSelectExample extends Component {
  state = {
    selectedItems: [],
  };

  onSelectedItemsChange = (selectedItems) => {
    this.setState({ selectedItems });
  };

  render() {
    const { selectedItems } = this.state;
    
    return (
      <View style={{ flex: 1 }}>
        <MultiSelect
          hideTags
          items={items}
          uniqueKey="id"
          ref={(ref) => { this.multiSelect = ref; }}
          onSelectedItemsChange={this.onSelectedItemsChange}
          selectedItems={selectedItems}
          selectText="选择项目"
          searchInputPlaceholderText="搜索项目..."
          onChangeInput={(text) => console.log(text)}
          altFontFamily="ProximaNova-Light"
          tagRemoveIconColor="#CCC"
          tagBorderColor="#CCC"
          tagTextColor="#CCC"
          selectedItemTextColor="#CCC"
          selectedItemIconColor="#CCC"
          itemTextColor="#000"
          displayKey="name"
          searchInputStyle={{ color: '#CCC' }}
          submitButtonColor="#CCC"
          submitButtonText="提交"
        />
        <View>
          {this.multiSelect && this.multiSelect.getSelectedItemsExt(selectedItems)}
        </View>
      </View>
    );
  }
}

该组件需要三个强制属性:itemsuniqueKeyonSelectedItemsChange,而其他属性是可选的。下表提供了更多详细说明。

属性列表

...(此处省略属性详情,因为原文没有给出具体的表格细节,实际使用时请参考文档提供的属性描述)

属性 必需 目的
altFontFamily (字符串) searchInputPlaceholderText 的字体族
canAddItems (布尔) 默认为 "false"。允许用户向项目列表中添加项。您需要在 onAddItem 函数属性中处理新增项目的逻辑。可以通过原生键盘上的回车键添加项目。
displayKey (字符串) 默认为 "name"。此字符串用于从 items 数组中的对象选取显示的关键值
fixedHeight (布尔) 默认为 false。指定下拉选择器是取内容高度还是固定高度并带有滚动条(当组件嵌套在 ScrollView 中时,滚动事件仅分发给父级 ScrollView,下拉组件无法滚动)。更多信息请参阅此问题
filterMethod (字符串) 默认为 "partial"。选项:["partial", "full"]。选择根据 searchTerm 过滤项目的逻辑方式。partial: 检查所有单独单词,只要至少匹配一个单词则包含该项目。full: 确保项目包含完整的搜索子串,不包括前导或尾随空格。
flatListProps (对象) 对于下拉菜单的 FlatList 的属性。传递FlatList所需的任何属性。
fontFamily (字符串) 组件中使用的自定义字体家族(影响除上面描述的 searchInputPlaceholderText 外的所有文本)
fontSize (数字) 选中项名称作为多选标签显示的字体大小
hideDropdown (布尔) 默认为 false。隐藏下拉菜单,使用取消按钮,并用返回箭头代替
hideSubmitButton (布尔) 默认为 false。从下拉菜单中隐藏提交按钮,改为搜索字段内的箭头按钮
hideTags (布尔) 默认为 false。隐藏标记化的已选项目,如果已选项目需要在视图的其他地方显示(更多信息请见下方)
searchIcon (元素,对象,布尔,函数) 改变搜索图标的元素或功能组件
itemFontFamily (字符串) 多选下拉菜单中每个未选项目所用的字体族
itemFontSize (数字) 多选下拉菜单中每个项目的字体大小
itemTextColor (字符串) 多选下拉菜单中每个未选项目的文字颜色
items (数组,控制属性) 显示在多选组件中的项目列表。JavaScript 数组,每个对象包含一个名称和唯一标识符(查看上方示例)
noItemsText (字符串) 替换默认“无项目显示”的文本
onAddItem (函数) 作为参数传递的 JavaScript 函数。每次添加新项目时调用,接收整个项目列表。在这里确保新项目被添加到提供的 items 列表和其他添加新项目的结果中。
onChangeInput (函数) 作为参数传递的 JavaScript 函数。每次 TextInput 变化时调用,传入值。
onClearSelector (函数) 作为参数传递的 JavaScript 函数。每次点击“后退”按钮时调用。
onSelectedItemsChange (函数) 作为参数传递的 JavaScript 函数。定义一个参数(selectedItems)。多选时点击“提交”按钮触发,单选时点击项目触发。(查看上方示例)
onToggleList (函数) 作为参数传递的 JavaScript 函数。每次点击 multiselect 组件时调用
searchInputPlaceholderText (字符串) 多选过滤输入框中的占位符文本
searchInputStyle (对象) 多选输入元素的样式对象
selectText (字符串) 主组件中显示的文本
selectedText (字符串) 选定项目显示的文本,可以替换为任意字符串
selectedItemFontFamily (字符串) 多选下拉菜单中每个已选项目的字体族
selectedItemIconColor (字符串) 多选下拉菜单中每个已选项目的选中标记颜色
selectedItemTextColor (字符串) 多选下拉菜单中每个已选项目的文字颜色
single (布尔) 切换组件为单一选项或多选项模式
styleDropdownMenu (样式) 配置下拉菜单的视图样式
styleDropdownMenuSubsection (样式) 配置下拉菜单内层视图的样式
styleIndicator (样式) 配置指示器图标样式
styleInputGroup (样式) 配置文本输入组容器的样式
styleItemsContainer (样式) 配置显示在列表中的项目容器的样式
styleListContainer (样式) 配置主列表容器的样式。更多信息见此问题
styleMainWrapper (样式) 配置 MultiSelector 主容器的样式
styleRowList (样式) 配置显示后的行样式
styleSelectorContainer (样式) 用户点击下拉时配置选择器容器的样式
styleTextDropdown (文本样式) 配置下拉文本的样式
styleTextDropdownSelected (文本样式) 配置已选下拉文本的样式
styleTextTag (文本样式) 配置标签文本的样式
submitButtonColor (字符串) 提交按钮的背景颜色
submitButtonText (字符串) 提交按钮上显示的文本
tagBorderColor (字符串) 已选项目边框颜色
tagContainerStyle (样式) 标签视图容器的样式
tagRemoveIconColor (字符串) 已选项目列表中移除图标的颜色
tagTextColor (字符串) 已选项目列表的文字颜色
textColor (字符串) 作为多选标签显示的已选项目名称的颜色
textInputProps (对象) 文本输入的属性。传递文本输入所需任何属性
uniqueKey (字符串) 作为每个项目属性一部分的唯一标识符。内部用作识别每个项目的方式(查看上方示例)
selectedItems (数组,控制属性) 选定项目的键列表。JavaScript 字符串数组,可与组件实例化一起使用
removeSelected (布尔) 过滤掉要显示在列表中的已选项目

注意事项

  • 要在视图的其他部分显示标记化的已选项目,给 MultiSelect 组件添加一个 ref ,如 ref={(component) => { this.multiSelect = component }},然后在屏幕任何地方添加 this.multiSelect.getSelectedItemsExt(selectedItems)。上述方法传入的 selectedItems 参数与主要组件的 selectedItems 属性相同。(见上方示例)。

  • 如果不应让用户选择下拉列表中的任何项目,在项目中设置一个 disabled 键为 true。这样的项目将以灰色渲染且不可点击。

  • 使用 single 属性时,仍应以已选项目键的数组形式传入 selectedItems。在单选模式下,当选项目被返回为一个字符串数组。

  • items 属性必须作为包含每个对象的必需名称键的数组传递,因为名称键用于在选项组件中显示项目。

  • filterMethod 示例:

    • partial 示例:若 searchTerm 为 "University of New",将返回 "University of New York", "University of New Orleans", "The University of New York" 以及 "University of Columbia" 和 "New England Tech",因存在部分匹配。
    • full 示例:若 searchTerm 为 "University of New",将返回 "University of New York", "University of New Orleans", "The University of New York",因为这三者都包含子串 "University of New"。

删除所有选中项

使用时,在父组件中给 MultiSelect 组件添加 ref,然后通过引用调用方法。例如:

<MultiSelect
  ref={(c) => { this._multiSelect = c; }}
  ...
/>

clearSelectedCategories = () => {
  this._multiSelect._removeAllItems();
};

贡献指南

我们热烈欢迎并会充分致谢您的贡献

请通过GitHub提交拉取请求(Pull Requests)来进行贡献。

拉取请求注意事项

  • 记录行为上的任何变化 - 确保 README.md 及其他相关文档保持最新。

  • 考虑我们的发布周期 - 我们尽量遵循 SemVer v2.0.0。不应随意更改公共API。

  • 从功能分支发起请求 - 请不要让我们从你的主分支拉取代码。

  • 一事一请求 - 如果你想做多件事,请发送多个拉取请求。

  • 提交清晰的历史记录 - 确保你的拉取请求中的每个单独提交都有意义。在开发过程中如有多个中间提交,提交前请使用 Git 的合并历史功能整合它们。

问题

检查问题列表以了解当前存在的问题。

贡献者

查看贡献者名单。

许可证

本项目采用 MIT 许可证。更多信息,请参考 LICENSE 文件。

Introduction

Simple multi-select component for react-native

Customize your domain