MaterialUI 自动完成 - 选择选项时避免清除输入文本过滤器

FDG*_*FDG 3 javascript reactjs material-ui

我在我的 React 项目中从 MaterialUI 导入了自动完成组件,并将其用作带有复选框的多选:https : //material-ui.com/components/autocomplete/#checkboxes

我注意到当我输入输入来过滤列表然后选择一个值时,用户插入的过滤器会重置。我想避免这种情况并继续使用过滤器进行多选,而不是每次都重新插入它。我没有在组件 API 中找到任何道具来解决这个问题。

有什么建议吗?

这是我的组件代码:

const VirtualAutocomplete = (props) => {
    const classes = useStyles();
    const textClasses = textStyles();

    return (
        <Autocomplete
            id={props.id}
            style={{ width: 'auto' }}
            value={props.value}
            limitTags={4}
            noOptionsText="No records found."
            classes={classes}
            disableCloseOnSelect
            ListboxComponent={ListboxComponent}
            renderGroup={renderGroup}
            onChange={props.onChange}
            options={props.options}
            filterOptions={startsWith}
            multiple={props.multiple}
            renderInput={(params) =>
                <ThemeProvider theme={theme}>
                    <TextField {...params}
                        variant='outlined'
                        classes={{ root: textClasses.formControlRoot }}
                        InputLabelProps={{ classes: { root: textClasses.labelRoot } }}
                        label={props.label}
                    />
                </ThemeProvider>
            }
            renderOption={(option, { selected }) => (
                <Fragment>
                    <Checkbox
                        icon={icon}
                        checkedIcon={checkedIcon}
                        style={{ marginRight: 8 }}
                        checked={selected}
                    />
                    {option}
                </Fragment>
            )}
        />
    );
}
Run Code Online (Sandbox Code Playgroud)

小智 5

创建一个保存输入值的状态。然后TextField onChange通过函数来​​改变这个状态。然后Autocomplete传递inputValue具有该状态内容的道具。您还可以使用disableCloseOnSelect道具来Autocomplete使选项框不会在选择的选项上关闭。

看看他们关于这些道具的文档https://material-ui.com/pt/api/autocomplete/

这是使用他们的演示的示例:https : //codesandbox.io/s/material-demo-forked-pdh81?file=/ demo.js: 746-766

  • 当您想将其用作可搜索选择时,可能的改进是清除 onBlur 的输入值。那么搜索字符串就不会留在您的选择旁边。 (4认同)
  • 只是想对您的解决方案表示感谢 - 我很惊讶地发现多选自动完成的几个早期规范和模型显示了与 MUI 提供的相同的内置行为 - 在输入过滤器并选择一个选项后,过滤器会清除。这是令人困惑的用户体验,按理说,您可能希望根据该初始过滤器选择多个相关项目。不管怎样,再次感谢。 (2认同)