🐛[BUG] ProFormSelect + request 模糊搜索无法根据 value 匹配的问题
🐛 bug 描述
在使用ProFormSelect 组件配合 request 属性进行模糊搜索时,搜索功能只能根据 label 进行匹配,无法根据 value进行匹配。这导致当用户输入的是数据的实际值(value)而非显示标签(label)时,无法正确搜索到对应的选项。
📷 复现步骤
创建一个 ProFormSelect 组件,配置 request 属性进行异步数据加载 设置 showSearch={true} 启用搜索功能 3.返回的数据格式为 [{label: '张三', value:'zhangsan'}, {label: '李四', value: 'lisi'}] 在搜索框中输入 'zhangsan'(value值) 观察搜索结果
🏞 期望结果
期望:能搜索到 "张三" 这个选项 实际:无搜索结果,只有输入 "张三"(label值)才能搜索到
💻 复现代码
import { ProForm, ProFormSelect } from '@ant-design/pro-components';
const Demo = () => {
const requestOptions = async (params) => {
// 模拟异步请求
const mockData = [
{ label: '张三', value: 'zhangsan' },
{ label: '李四', value: 'lisi' },
{ label: '王五', value: 'wangwu' },
];
// 当前只能根据 label 进行过滤
const filteredData = mockData.filter(item =>
item.label.includes(params.keyWords || '')
);return {
data: filteredData,
success: true,
};
};
return (
<ProForm>
<ProFormSelect
name="user"
label="用户选择"
showSearch
request={requestOptions}placeholder="请选择用户(尝试输入 'zhangsan' 或 '张三')"
/>
</ProForm>);
};
export default Demo;
© 版本信息
- ProComponents 版本: [2.8.10]
Hi @chenyajun-create! I'm Dosu and I’m helping the pro-components team.
你的反馈是对的:ProFormSelect 配合 request 时,模糊搜索默认只会匹配 label,不会匹配 value,这确实是历史遗留问题。近期已经有 PR 修复了这个问题(#9162,2025-07-17 合并),现在 showSearch 下会同时匹配 label 和 value,且支持通过 optionFilterProp 配置匹配字段,相关代码已合入新版本详情见此 PR。
如果你用的 2.8.10 版本是在 2025-07-17 之后发布的,理论上已经支持 value 匹配。如果你的版本还没包含这个修复,可以用如下方式临时解决:
- 在 request 里自定义过滤逻辑,让 label 和 value 都能被匹配:
const requestOptions = async (params) => {
const mockData = [
{ label: '张三', value: 'zhangsan' },
{ label: '李四', value: 'lisi' },
{ label: '王五', value: 'wangwu' },
];
const key = params.keyWords || '';
const filteredData = mockData.filter(
item => item.label.includes(key) || item.value.includes(key)
);
return { data: filteredData, success: true };
};
-
加上
fieldProps={{ filterOption: false }},让 request 结果不再被前端二次过滤,完全由你自定义过滤逻辑控制。相关讨论
升级到包含 #9162 修复的版本后,直接用 showSearch 即可支持 label 和 value 同时模糊匹配,无需额外处理。
To reply, just mention @dosu.
How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other
我们是2025-07-24,仍存在这个问题,最后的解决办法是增加这个配置
fieldProps={{ filterOption: (input, option) => { return (option?.label ?? '').toString().includes(input) || (option?.value ?? '').toString().includes(input); }, }}
我们之前使用2.8.7在线上运行一直没有问题,上次发布更新了2.8.10之后才出现这个问题的。