首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react-bootstrap-typeahead如何在`Enter`上触发回调(更新状态),而不是在用户选择提示时触发?

react-bootstrap-typeahead如何在`Enter`上触发回调(更新状态),而不是在用户选择提示时触发?
EN

Stack Overflow用户
提问于 2020-08-22 03:55:27
回答 1查看 564关注 0票数 0

我正在尝试做一个输入,允许用户选择多个项目。选择完成后,他可以按Enter将选择的内容推入状态中的数组中。然后,输入将清除,并为他的下一组选择做好准备。(想象一下快速填充一个二维数组)。但是,使用下面的代码,如果用户按Enter选择提示,我的回调pushToState将像在onKeyDown中一样触发。实现此行为的正确方法是什么?

代码语言:javascript
复制
<Typeahead
  id="basic-typeahead-multiple"
  labelKey="name"
  multiple
  onChange={setMultiSelections}
  options={options}
  selected={multiSelections}
  onKeyDown={(event) => {
    if (event.key === 'Enter') {
      pushToState(multiSelections);
      setMultiSelections([]);
    }
  }}
/>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-23 03:51:54

您的用例类似于the one in this question。您基本上需要确定用户是否正在选择菜单项。可以通过检查typeahead的activeIndex来做到这一点:

代码语言:javascript
复制
// Track the index of the highlighted menu item.
const [activeIndex, setActiveIndex] = useState(-1);

const onKeyDown = useCallback(
  (e) => {
    // Check whether the 'enter' key was pressed, and also make sure that
    // no menu items are highlighted.
    if (event.key === 'Enter' && activeIndex === -1) {
      pushToState(multiSelections);
      setMultiSelections([]);
    }
  },
  [activeIndex]
);

return (
  <Typeahead
    id="basic-typeahead-multiple"
    labelKey="name"
    multiple
    onChange={setMultiSelections}
    options={options}
    onChange={setMultiSelections}
    onKeyDown={onKeyDown}
    selected={multiSelections} >
    {(state) => {
      // Passing a child render function to the component exposes partial
      // internal state, including the index of the highlighted menu item.
      setActiveIndex(state.activeIndex);
    }}
  </Typeahead>
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63529327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档