reactjs - 按下 Escape 键后的 event.stopPropagation() 从 react-select 的 v2 中移除
问题描述
我注意到在 react-select 组件的 Select.js 源文件中,这段代码
event.stopPropagation();
在处理 Escape 键后在 v1 中调用,在 v2 中已删除。
v1:https ://github.com/JedWatson/react-select/blob/v1.x/src/Select.js#L492
v2:https ://github.com/JedWatson/react-select/blob/master/src/Select.js#L1145
这是故意的吗?如果是这样,在 v2 中推荐的方法是什么来防止转义键关闭包含 react-select 组件的对话框(必须由 Escape 键关闭)?
我已经通过检查 react-select onKeyDown 道具回调中的事件弄清楚了如何做到这一点,但我只是想知道这是否被删除以支持开发人员可能想到的其他方法。
解决方案
您可以使用onKeyDown
,onMenuClose
和自行处理onMenuOpen
:
const Component = () => {
const [isMenuOpen, setMenuOpen] = useState(false);
function handleMenuClose() {
setMenuOpen(false);
}
function handleMenuOpen() {
setMenuOpen(true);
}
function handleKeyDown(e: KeyboardEvent) {
if (e.key === "Escape" && isMenuOpen) {
e.stopPropagation();
}
}
return (
<Select
onKeyDown={handleKeyDown}
onMenuClose={handleMenuClose}
onMenuOpen={handleMenuOpen}
options={[
{ label: "A", value: "A" },
{ label: "B", value: "B" },
{ label: "C", value: "C" },
{ label: "D", value: "D" },
{ label: "E", value: "E" }
]}
/>
);
}
我在CodeSandbox上使用 Modal 创建了一个工作示例。
推荐阅读
- html - CSS left:100% 超出设备屏幕尺寸
- php - 如何将值从视图发送到控制器?
- json - JMESPath 嵌套 AND 查询(单行)
- c# - 托管应用程序中的自托管 WCF Web 服务更改服务的定义
- python - Spark KafkaUtils DirectStream 错误:属性 security.protocol、ssl.truststore.location 无效
- python - 如何在python中删除不需要的字符
- visual-studio-code - 一些我无法解释的代码突出显示
- python - 根据元组列表选择并连接 DataFrame 行
- sql - 在 case when 语句中使用计算列结果
- python - Python pywinauto频繁出现TimeoutError