reactjs 在不按Enter键的情况下在React中的TagInput组件中创建标记

ddrv8njm  于 2022-12-22  发布在  React
关注(0)|答案(1)|浏览(224)

有一个输入字段(<TagInput>)用于输入evergreen-ui库中的标签。现在,按Enter键后将创建一个标签。
我想删除此行为,并创建一个标签,只有当焦点已被改变(onBlur),它应该忽略按下回车键。
看起来onKeyDown工作不正常,如果我按Enter键,我仍然可以创建标记。

const createPlaceholder = (arr) => {
    if (arr > 0) {
      return { placeholder: '' };
    } else {
      return { placeholder: 'Enter tag' };
    }
  }
  const [tagProps, setTagProps] = useState(createPlaceholder(task?.labels?.length));

  const handleChangeLabels = (values) => {
    var arr = values.map(v => {
      return { id: null, task: null, value: v }
    });
    arr = arr.length ? [arr[0]] : [];
    handleChangeAttribute(arr, 'labels');
    setTagProps(createPlaceholder(arr.length));
  }

  const handleChangeAttribute = (value, attr) => {
    const res = { ...task };
    res[attr] = value && value.trim && value.trim() == '' ? '' : value;
    setTask(res);
  };

  const handleKeyDown = (event) => {
    if (event.key === 'Enter') {
      event.preventDefault();
    }
  };

  <TagInput
    inputProps={tagProps}
    values={value}
    onChange={handleChange}
    onKeyDown={handleKeyDown}
    onBlur={handleBlur}
  />
mznpcxlj

mznpcxlj1#

为此,您可以使用 prop “onKeyDownCapture”。
您还可以使用addOnBlur属性来添加有关更改焦点的标签,而不是使用“onBlur”属性
下面是我使用的一个例子:https://codesandbox.io/s/practical-brook-350z2s?file=/index.js
如果您想了解更多关于“onKeyDownCapture”和“onKeyDown”之间区别的信息,请点击此处:In React, what is the difference between onKeyUp and onKeyUpCapture (and onKeyDown/Capture)?

相关问题