【问题标题】:Material UI Autocomplete: exclude defaults from optionsMaterial UI 自动完成:从选项中排除默认值
【发布时间】:2021-04-05 17:17:39
【问题描述】:

我有一个 Material-ui 自动完成元素(标签模式),其中包含一个选项列表和一个默认值列表,它们也包含在选项中。有没有办法排除第二次添加的默认值?

我尝试过使用

for (var i = options.length - 1; i >= 0; i--) {
    for (var j = 0; j < defualtOptions.length; j++) {
        if (options[i] && options[i].name === defualtOptions[j].name) {
            options.splice(i, 1);
        }
    }
}

但这意味着如果删除任何默认选项,它们将不会显示为重新选择。

这是我的组件代码:

export default function PersonPicker(params) {
    let { people, defualtPeople, label, variant, onChange } = params;

    for (var i = people.length - 1; i >= 0; i--) {
        for (var j = 0; j < defualtPeople.length; j++) {
            if (people[i] && people[i].name === defualtPeople[j].name) {
                people.splice(i, 1);
            }
        }
    }

    return (
        <div>
            <Autocomplete
                onChange={(event, value) => onChange(event, value)}
                multiple={true}
                options={people}
                getOptionLabel={(option) => option.name}
                defaultValue={defualtPeople}
                filterSelectedOptions={true}
                selectOnFocus={true}
                renderInput={(paramaters) => (
                    <TextField
                        variant={variant}
                        label={label}
                        placeholder={label}
                        {...paramaters}
                        {...params}
                    />
                )}
                renderTags={(tagValue, getTagProps) => {
                    return tagValue.map((option, index) => (
                        <Chip
                            {...getTagProps({ index })}
                            label={option.name}
                            avatar={
                                <Avatar
                                    alt={option.name}
                                    src={option.imageSrc}
                                />
                            }
                        />
                    ));
                }}
            />
        </div>
    );
}

【问题讨论】:

  • 我建议添加该组件的一段代码:
  • 当然,忘记那是我的愚蠢!

标签: reactjs autocomplete material-ui


【解决方案1】:

我不确定我是否理解这个问题,但是,除非我错了,否则只需在自动完成组件中使用 filterSelectedOptions 道具即可实现您的需要。如果它不起作用,也许您应该检查用于比较的选项值/道具是什么,这会使您的组件无法按预期过滤。我认为问题更多在于使用什么来进行比较,而不是其他任何事情。

以你的问题代码为例:

<Autocomplete
            onChange={(event, value) => onChange(event, value)}
            multiple={true}
            options={people}
            getOptionLabel={(option) => option.name}
            defaultValue={defualtPeople}
            filterSelectedOptions
            selectOnFocus={true}
            renderInput={(paramaters) => (
                <TextField
                    variant={variant}
                    label={label}
                    placeholder={label}
                    {...paramaters}
                    {...params}
                />
            )}

查看文档: https://material-ui.com/es/components/autocomplete/#multiple-values

【讨论】:

  • 谢谢!根据您的建议,我找到了 this code sandbox,它向我展示了如何使其工作。
猜你喜欢
  • 1970-01-01
  • 2022-01-09
  • 2021-11-12
  • 2020-04-16
  • 2021-11-17
  • 2020-05-04
  • 2018-04-27
  • 2020-04-16
  • 2022-12-23
相关资源
最近更新 更多