有一个输入字段(<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}
/>
1条答案
按热度按时间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)?