重复问题
- 我搜索了现有的问题
最新版本
- 我测试了最新版本
重现步骤 🕹
链接到实时示例: https://stackblitz.com/edit/react-taee4w?file=Demo.tsx
步骤:
- 用空输入框,使用键盘箭头选择第三个选项并按Enter键
- 按向下箭头并观察哪个选项被高亮显示
当前行为 😯
第四个选项被高亮显示
预期行为 🤔
第一个选项应该被高亮显示
上下文 🔦
如果你从 createFilterOptions
中移除 limit
,它将按预期工作。可能与 syncHighlightedIndex
的 deps 数组有关,该数组包括 filteredOptions.length
9条答案
按热度按时间iszxjhcz1#
这是一个预期的行为。当你使用键盘选择多个项目时,你不希望在选择第一个后被带回开头,然后不得不再次使用箭头键向下移动以到达下一个选项。
tag5nh1u2#
当你使用键盘选择多个项目时,你不希望在选择第一个后被带回开头,然后不得不再次使用箭头键向下移动以到达下一个选项。
@michaldudak
这正是
filterSelectedOptions: true
发生的情况,对我来说是有道理的 - 选定的选项从列表中移除,然后重新开始。但当我通过
filterOptions
限制显示选项的数量时,filterSelectedOptions: true
不会发生这种情况。我个人认为使用
filterSelectedOptions: true
返回开头更有意义。我期望在这两种情况下都有相同的行为。我已经更新了演示以使区别更清楚 - https://stackblitz.com/edit/react-taee4w?file=Demo.tsx
xriantvc3#
好的,我明白了。基于显示选项数量的限制,这种行为是不一致的。我想说的是,
limit
的行为更好(在第一次选择一个选项后,你可以继续选择更多的选项,而不必再次从顶部移动),但在这两种情况下,按下Enter键后高亮显示都不可见。f0ofjuux4#
嘿,我能处理这个问题吗?
6rqinv9w5#
我会处理这个问题的:)
6ie5vjzr6#
如果修复仅包含在Material UI中(因此
useAutocomplete
钩子没有被修改),那么我们很可能能够合并并发布它。然而,如果你需要接触MUI Base,事情可能会更麻烦。我们最近将其开发转移到了新的仓库,并在那里工作,改变组件API。我们可能不会很快从该仓库发布任何新版本(就像在第三季度之前那样)。请自由调查这个问题,让我知道你的发现。
cc @DiegoAndai,@mnajdova
35g0bw717#
嘿,@michaldudak ,正如你所预料的那样,这个bug来自于"syncHighlightedIndex"中的"filteredOptions.length"依赖。问题在于,当列表的限制小于所有选项的总数量时,当选择一个选项时,列表的大小不会改变。
出于同样的原因,"syncHighlightedIndex"函数没有被调用,索引也没有被重置。
要解决这个bug,我将"filteredOptions.length"依赖更改为"filteredOptions",这样每当"filteredOptions"列表发生变化时,例如删除一个元素,函数就会被调用并重置索引。
kyvafyod8#
所以,正如我提到的,我们必须等到修复完成并在Base UI仓库中实现自动完成功能后才能进行下一步。
ecbunoof9#
嘿,当我做了一些更改后,一些测试开始失败。我需要改变这些测试吗?还是我可以无论如何都打开一个PR?