reactjs - 使用 OptGroups 在 Ant Design Select Component 中搜索时忽略变音符号
问题描述
我正在使用Ant Design 的Select 组件。我想在搜索中使用选项组。
要求:
- 选项被分组到 OptGroups
- 搜索适用于选项(不是 OptGroups)
- 选项值是数字(来自数据库的 ID),而不是文本
- 搜索对重音符号不敏感(即当我键入时,应提供
ca
该选项)čaj
前三个要求开箱即用:
<Select
showSearch
defaultValue="2"
style={{ width: 200 }}
optionFilterProp="children"
>
<OptGroup label="Manager">
<Option value="1">Jack</Option>
<Option value="2">Lucy</Option>
</OptGroup>
<OptGroup label="Engineer">
<Option value="3">yiminghe</Option>
</OptGroup>
</Select>
麻烦从第四个要求开始。看来我需要提供自己的过滤器。幸运的是,AntDesign 有一个属性,它叫做filterOption
. 让我们尝试一下:
<Select
showSearch
defaultValue="2"
style={{ width: 200 }}
filterOption={(input, option) =>
prepareStrForSearch(option.props.children).includes(prepareStrForSearch(input))
}
>
<OptGroup label="Manager">
<Option value="1">Jack</Option>
<Option value="2">Lucy</Option>
</OptGroup>
<OptGroup label="Engineer">
<Option value="3">yiminghe</Option>
</OptGroup>
</Select>
页面呈现,让我们尝试搜索。哎呀。浏览器尖叫:
显然,filterOption
接收OptGroup
过滤,而不是Option
. 但是,我需要在选项中搜索,而不是在 OptGroups 中搜索。实现这一点的最简单方法是什么?
解决方案
解决方案是return false
针对 OptGroups。(对我来说似乎违反直觉。)之后,Ant Design 将filterOption
使用 s 再次调用该函数Option
。
这是一个例子:
<Select
showSearch
defaultValue="2"
style={{ width: 200 }}
filterOption={(input, option) => {
if (option.props.value) {
return strForSearch(option.props.children).includes(
strForSearch(input)
);
} else {
return false;
}
}}>
<OptGroup label="Manager">
<Option value="1">Jack</Option>
<Option value="2">Lucy</Option>
<Option value="3">Čaj</Option>
</OptGroup>
<OptGroup label="Engineer">
<Option value="3">yiminghe</Option>
</OptGroup>
</Select>
我删除变音符号的功能:
const strForSearch = str => {
return str
? str
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "")
.toLowerCase()
: str;
};
推荐阅读
- amazon-web-services - AWS Lambda - AwsWrangler - Pandas/Pytz - 无法导入所需的依赖项:pytz:
- oracle - 具有用户功能条件的 MS Access 查询停止处理 odbc 数据
- python - 以不同的方式切片每一行
- java - Axon:启用 JPA 存储库提供 errorTokenEntry 时未映射
- javascript - 在 Next.js 中编译遗留组件(无法解析 'react/jsx-dev-runtime',无法导入全局 CSS)
- javascript - Javascript为什么要调用函数?拿来
- sql - 在sql developer中集成2个代码
- linux - 使用 grep (Linux) 过滤 /usr/share/dict/words 中的单词
- r - 分别在每个多边形内创建 voronoi 单元
- php - 在 WooCommerce 中将 BACS“暂停”订单限制为客户的一个