当搜索字符串不在选项标签中时,有没有办法使用 MUI 自动完成?

Posted

技术标签:

【中文标题】当搜索字符串不在选项标签中时,有没有办法使用 MUI 自动完成?【英文标题】:Is there a way to use MUI Autocomplete when the search string is not in the option label? 【发布时间】:2022-01-21 17:15:55 【问题描述】:

我有一组对象,它们在 Material UI 自动完成中使用,并通过“getOptionLabel”显示为选项。有没有办法通过将输入字符串与未显示为标签的选项值的属性匹配来过滤选项? 例如,在下面的示例代码 sn-p 中,我希望用户能够输入项目 id - 例如5141 并且选项应该被过滤为“黄铜管”。

const MyAutoComplete = () => 
    const [item, setItem] = useState()
    const [input, setInput] = useState('')

    const items = [
     id: 5141, name: 'brass pipes', listPrice: 2.32 , 
     id: 214, name: 'bronze pipes', listPrice: 1.89 ,
     id: 3155, name: 'toilet seat ', listPrice: 5.61 
    ]
    
    return (
        <Autocomplete
            options=items
            getOptionLabel=(item) => item.name || ''
            value=item
            onInputChange=(e, v) => 
                setInput(v)
            
            isOptionEqualToValue=(option, value) => option.id === value.id
            inputValue=input
            onSelect=(e, v) => setItem(v)
            renderInput=(params) => (
                <TextField ...params label="items" variant="standard" />
            )
        />
    );
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

【问题讨论】:

【参考方案1】:

我认为createFilterOptions 是正确的做法。修改stringify 选项可以得到你想要的。

const filterOptions = createFilterOptions(
  stringify: (option) => option.name + option.id,
);

<Autocomplete filterOptions=filterOptions />;

这是codesandbox link。

【讨论】:

以上是关于当搜索字符串不在选项标签中时,有没有办法使用 MUI 自动完成?的主要内容,如果未能解决你的问题,请参考以下文章

当用户不在 Yesod/Haskell 的数据库中时如何重定向到特殊页面

不在资源视图中时隐藏属性/工具箱窗格?

MS SQL Server 在空格上拆分单词,但仅在不在双引号中时

串行不在设计中时的 C# 串行事件

可以创建一个 div 来充当下拉菜单吗?

算法第二章上机实验报告