reactjs - React拖放事件传播问题
问题描述
我有一个简单的拖放设置。比较特别的是,dropzones里面可以有dropzones。我的问题是,每当我在子组件中放置一些东西时,父事件也会被触发,但仅在某些情况下。
例如(这有效,没有事件传播):
export default class Folder extends Component {
constructor(props) {
super(props);
this.state = {
dragActive: false
};
}
onDragOver = (e) => {
e.preventDefault();
this.setState({ dragActive: true });
}
onDragLeave = () => {
this.setState({ dragActive: false });
}
onDrop = (e) => {
e.stopPropagation();
alert("test");
}
render() {
return (
<div className="col-6 col-sm-4 col-md-3 col-lg-2 col-xl-8ths" onDragOver={this.onDragOver} onDragLeave={this.onDragLeave} onDrop={this.onDrop}>
</div>
);
}
}
重要的部分是这里的这一行:
onDrop={this.onDrop}
如果我的 drop 事件在同一个组件内,一切都会按预期工作。
一旦我将行更改为:
onDrop={() => this.props.onDropFunction(event, this.props.folder.id)}
事件传播停止工作。这是我在父级内部调用的 onDrop 函数:
onDrop = (e, folderId) => {
e.stopPropagation();
e.preventDefault();
var files = this.fileListToArray(e.dataTransfer.files);
this.setState({
dragActive: false,
uploadFiles: files
}, () => {
this.uploadFiles(folderId);
});
}
解决方案
onDrop={(event) => this.props.onDropFunction(event, this.props.folder.id)}
通过这样的事件并尝试
推荐阅读
- php - 如何在页面上提交另一个表单时保留搜索表单结果?
- appium-android - 如何在 AWS 设备场中截取屏幕截图以使用 appium python 运行?
- sql - 在 SQL 中将 table1 行值插入 table2 列
- php - mysql WHERE语句中的字符串数组值
- ionic-framework - Ionic v3:使用离子范围时,离子图标不显示
- javascript - 如何根据其他文件中的键创建可变 html 表单
- django - CreateView + get_absolute_url
- scala - Scala 泛型:类型与折叠不匹配
- azure - 长时间处理后 Azure 网站超时
- matlab - 如何在 MATLAB 中有效地为绘图设置动画?