material-ui [自动完成]如果选项长度不变,高亮显示的索引不会重置,

tez616oj  于 5个月前  发布在  其他
关注(0)|答案(9)|浏览(52)

重复问题

  • 我搜索了现有的问题

最新版本

  • 我测试了最新版本

重现步骤 🕹

链接到实时示例: https://stackblitz.com/edit/react-taee4w?file=Demo.tsx
步骤:

  1. 用空输入框,使用键盘箭头选择第三个选项并按Enter键
  2. 按向下箭头并观察哪个选项被高亮显示

当前行为 😯

第四个选项被高亮显示

预期行为 🤔

第一个选项应该被高亮显示

上下文 🔦

如果你从 createFilterOptions 中移除 limit,它将按预期工作。可能与 syncHighlightedIndex 的 deps 数组有关,该数组包括 filteredOptions.length

iszxjhcz

iszxjhcz1#

这是一个预期的行为。当你使用键盘选择多个项目时,你不希望在选择第一个后被带回开头,然后不得不再次使用箭头键向下移动以到达下一个选项。

tag5nh1u

tag5nh1u2#

当你使用键盘选择多个项目时,你不希望在选择第一个后被带回开头,然后不得不再次使用箭头键向下移动以到达下一个选项。
@michaldudak
这正是 filterSelectedOptions: true 发生的情况,对我来说是有道理的 - 选定的选项从列表中移除,然后重新开始。
但当我通过 filterOptions 限制显示选项的数量时,filterSelectedOptions: true 不会发生这种情况。
我个人认为使用 filterSelectedOptions: true 返回开头更有意义。我期望在这两种情况下都有相同的行为。
我已经更新了演示以使区别更清楚 - https://stackblitz.com/edit/react-taee4w?file=Demo.tsx

xriantvc

xriantvc3#

好的,我明白了。基于显示选项数量的限制,这种行为是不一致的。我想说的是,limit 的行为更好(在第一次选择一个选项后,你可以继续选择更多的选项,而不必再次从顶部移动),但在这两种情况下,按下Enter键后高亮显示都不可见。

f0ofjuux

f0ofjuux4#

嘿,我能处理这个问题吗?

6rqinv9w

6rqinv9w5#

我会处理这个问题的:)

6ie5vjzr

6ie5vjzr6#

如果修复仅包含在Material UI中(因此useAutocomplete钩子没有被修改),那么我们很可能能够合并并发布它。然而,如果你需要接触MUI Base,事情可能会更麻烦。我们最近将其开发转移到了新的仓库,并在那里工作,改变组件API。我们可能不会很快从该仓库发布任何新版本(就像在第三季度之前那样)。
请自由调查这个问题,让我知道你的发现。
cc @DiegoAndai,@mnajdova

35g0bw71

35g0bw717#

嘿,@michaldudak ,正如你所预料的那样,这个bug来自于"syncHighlightedIndex"中的"filteredOptions.length"依赖。问题在于,当列表的限制小于所有选项的总数量时,当选择一个选项时,列表的大小不会改变。
出于同样的原因,"syncHighlightedIndex"函数没有被调用,索引也没有被重置。
要解决这个bug,我将"filteredOptions.length"依赖更改为"filteredOptions",这样每当"filteredOptions"列表发生变化时,例如删除一个元素,函数就会被调用并重置索引。

kyvafyod

kyvafyod8#

所以,正如我提到的,我们必须等到修复完成并在Base UI仓库中实现自动完成功能后才能进行下一步。

ecbunoof

ecbunoof9#

嘿,当我做了一些更改后,一些测试开始失败。我需要改变这些测试吗?还是我可以无论如何都打开一个PR?

相关问题