如果我有一个显示名称(例如“ John Smith”)和用户名(例如“ johsmi”)的用户对象,如何同时搜索显示名称和用户名?
此示例仅搜索用户名,即找到“ johsmi”,而不是“ Smith”:
<Select
showSearch={true}
optionFilterProp="children"
placeholder="Select account"
>
{users.map(user => (
<Select.Option value={user.name}>
{user.displayName}
</Select.Option>
))}
</Select>
我最终在key属性中添加了显示名称以使其可搜索,但是我想知道这是否是推荐的方法:
<Select.Option key={user.displayName} value={user.name}>
{user.displayName}
</Select.Option>
答案 0 :(得分:4)
您可以使用filterOption
道具
const person = [{
username: 'jstuart123',
displayName: 'John Stuart'
}]
<Select
showSearch
optionFilterProp="children"
onSearch={onSearch}
filterOption={(input, option) =>
option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
|| option.props.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
>
{person.map(p => <Option value={p.username}>{p.displayName}</Option>)}
</Select>
答案 1 :(得分:2)
在尝试上述答案时,我也遇到了错误。其实我是这样解决的。
filterOption={(input, option) =>
option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
答案 2 :(得分:0)
// add the "filterOption" props to the ant design Select component
filterOption={(input, option) =>
// make sure that the value and key is not null
option.props.value !== null
&& toLower(option.props.value).includes(toLower(input))
||
option.props.key !== null
&&
toLower(option.props.key).includes(toLower(input))
}
// here is what the "toLower" function looks like just to convert string to lower case
toLower = (value) => {
return value.toLowerCase()
}
答案 3 :(得分:0)
试试这个:
filterOption={(input, option) =>
option.props.value.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
option.props.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}