- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在组件中嵌套了点击事件处理程序:
class ListItem extends React.Component {
...
render() {
return (
<div onClick={this.save}>
...Content...
<span onClick={this.onDeleteClick}> (Delete)</span>
</div>
);
}
...
}
(本文底部的完整、最小示例。)
此组件用作包含组件中的“列表项”。当我单击 (Delete)
时,它会按预期触发 onDeleteClick
,这会回调父级,从而导致组件从父级组件中删除。如预期的那样,点击事件随后开始冒泡。但是,它会“向上”冒泡到父列表中的下一个组件。毕竟,原始目标已被删除处理程序删除。
如果我将 e.stopPropagation()
添加到 onDeleteClick
处理程序的顶部,一切正常,但我只是想了解 为什么 click 事件被传递到一个完全不同的组件,只是为了确保那里没有任何其他确凿的证据。
我目前的理论是,挂起的事件队列以某种方式索引到虚拟 DOM 中,如果您在事件处理程序期间改变虚拟 DOM,冒泡事件可能会传递到虚拟 DOM 中的错误组件。我原以为冒泡事件只是不会触发,而不是在完全不同的组件上触发。
这是怎么回事?还有其他见解吗?这是一个有缺陷的设计吗?如果是,有没有关于替代方案的建议?
这是一个显示问题的最小示例:https://codepen.io/mgalgs/pen/dRJJyB
这是固定版本:https://codepen.io/mgalgs/pen/KqZBKp
“修复”的完整差异是:
--- orig.jsx
+++ new.jsx
@@ -32,6 +32,7 @@
}
onDeleteClick(e) {
+ e.stopPropagation();
this.props.onDeleteClick(e);
}
}
最佳答案
+1 感谢您提出一个有趣的问题。
该行为似乎符合 W3C's recommendations那:
The chain of EventTargets from the event target to the top of the tree is determined before the initial dispatch of the event. If modifications occur to the tree during event processing, event flow will proceed based on the initial state of the tree.
这可能在某种程度上解释了这里发生的事情。 DOM 树似乎在气泡传播到父元素之前已被修改,届时事件将以树中该位置的元素为目标(如果有的话)。
在此上下文中,触发事件的元素将从树中删除。事件不会冒泡到 下一个 元素,而是冒泡到现在已经在初始元素所在的元素集合中占据其位置的元素(如果有的话)。
关于javascript - react 点击事件冒泡 "sideways",而不仅仅是 "up",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44814526/
实际上,我正在编写一个小型太空射击游戏(2.5D,俯 View )。玩家可以沿着 XZ 轴移动并通过右侧的迷你摇杆(游戏 handle )旋转宇宙飞船或查看光标位置(键盘 + 鼠标)。 因此,运动和旋
在图书页面上,用户点击目录中的第 1 章。 在第 1 章页面,用户点击下一章转到第 2 章。 用户可以点击下一章任意次数来浏览章节。 在任何章节页面,如果用户点击后退 按钮,用户应该返回到图书页面,而
我在 CSS 旋转和定位方面遇到了一些问题。 我想将网页的标题横向放置(旋转 -90°,因此它从左到右 -> 从下到上阅读)并贴在网页的右下角。 这是我目前使用的 CSS: .gallerytitle
这个问题在这里已经有了答案: Relative imports in Python 3 (30 个答案) 关闭 7 年前。 我的文件结构如下 math/ snippets/
以下代码抛出 std::bad_cast struct Foo { void foo () {} }; struct Bar { Bar () { dynamic_ca
我有以下情况,有一个 div,我正在向其中动态添加内容。到目前为止,如果添加的内容太多,它会溢出到 div 之外或拉长 div。这两种情况都是我所不希望的。 我想要做的是在单独的列中溢出侧面的内容。我
我正在使用 Bootstrap 的模式来进行一系列评论。因此,我将一堆模态放入列表中,并在用户查看当前模态后显示下一个模态。 问题:如何更改模态,使当前模态向左滑出,新模态从右侧滑入? 我希望这是一个
我试图在多个方向上创建多个横向背景颜色,例如 here . 我尝试使用 background: -webkit-linear-gradient(top left, white,white 80%,#0
我在组件中嵌套了点击事件处理程序: class ListItem extends React.Component { ... render() { return (
我想将一个 Rust 程序拆分成多个文件,但是 mod 的使用不允许我从 main.rs 以外的文件引用同一目录中的文件。 例如,如果我在同一个文件夹中有main.rs、game.rs和matrix.
我对 C++ 没有那么多经验,但正在努力学习。 以下示例由“相关”类的层次结构组成: Child 是 Parent1 和 Parent2 的 child Parent2 是 VirtualGrandP
我有一个 TD/DIV,里面有一些文字。我使文本显示在 TD/DIV 的中心。但我希望文本使用 writing-mode: sideways-lr 居中.我怎样才能做到这一点? div { wid
我在 OpenGL 中编写了一个 3D 环境,您可以在其中向前/向后移动并环顾四周(上/下左/右),但是我无法弄清楚如何向左或向右侧移。 我正在使用 gluLookAt,我的前进代码是 GLfloat
我想在屏幕上移动一个 div。 div 最初设置为 width:100%。但是当转换开始时,div 的大小似乎缩小了(蓝色边框刚好环绕在文本周围)。为什么会这样? 之前 之后 这是我的代码示例 htt
我真的花了几个小时试图解决这个问题,谷歌搜索解决方案,但我做不到。 我有一辆车,它是一辆手推车,所以没有悬架(技术上有,但值接近 0,以模拟轮胎)。车辆有一个刚体,子对象包含 4 个车轮碰撞器(和模型
我一直认为 SQL 中的连接是两个表之间的某种链接。 例如, select e.name, d.name from employees e, departments d where employe
我是一名优秀的程序员,十分优秀!