蚂蚁设计-在选择项中同时搜索键和值

时间:2020-01-09 09:53:06

标签: javascript reactjs antd

如果我有一个显示名称(例如“ 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>

4 个答案:

答案 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>

示例:https://codesandbox.io/s/brave-bhabha-m5tuy

答案 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
}