javascript - 调用 setState 后,当从维基百科复制文本时,Chrome 正在取消选择文本
问题描述
我有羽毛笔编辑器,它以只读模式显示从维基百科复制的一些内容。我必须像这样在所选文本上方显示一个按钮。用例
我的做法。
componentDidMount = () => {
let allEditor = document.getElementsByClassName("editor");
for (let i = 0; i < allEditor.length; i++) {
allEditor[i].addEventListener("mouseup", event => {
event.preventDefault();
this.handleSelection();
});
}
};
handleSelection = () => {
this.setState({
popup: true
});
};
如果我删除 setState,选择会保留在那里,但是当我调用 setState 时,选择会消失。经过一些调试后,我发现在 setState 之后触发了 mouseup 事件。我在chrome中面临的这个问题,对于firefox来说它工作正常。
解决方案
你的方法似乎是错误的。你不应该在React 中接触真正的 DOM。当您执行setState
.
每当状态改变时,整个组件都会重新渲染——这就是你现在遇到的问题。相反,请使用onClick
oronMouseUp
属性,以便您可以附加事件处理程序,这是正确的方法,而且它也不引人注目。
您必须听合成事件而不是真实事件。
推荐阅读
- ruby-on-rails - 为什么在更新期间会丢失作为可标记的标记?
- javascript - 需要一个标识符,而是看到“...”
- javascript - vue.js 方法有什么区别
- python - 将python UTC时间戳与字符串转换
- jquery - 通过遍历兄弟元素在父元素中显示 div
- c - Vigenere 测试失败 :( 使用“BaZ”作为关键字将“BaRFoo”加密为“CaQGon”
- c# - Asp.net core 2.1 web api中的自定义授权
- amazon-web-services - 使用 PowerShell Core 上传到 Amazon S3 存储桶
- json - 当我需要将 async/await 嵌入到 javascript 中的 forEach() 中时如何使用它
- reactjs - ReactJS:使用条件表达式嵌套 .map 以将一个数组中的值匹配到第二个数组