当前位置: 首页 > 面试题库 >

如何将拖放事件侦听器附加到React组件

鲁浩言
2023-03-14
问题内容

我正在构建一个允许将本地文件拖放到div上的组件。然后是有关已删除文件的信息输出。

我的问题是我不知道如何正确地附加事件侦听器drop以及dragover创建组件时。

我的App组件是我所有逻辑所在的地方(拖放和拖移的处理程序),我创建了一个单独的组件,该文件将被放置在该组件上-dropZone组件。

我尝试将事件侦听器放在App组件的dropZone标记上componentDidMount,如果放置了dropZone组件,则在该位置放置事件侦听器:

componentDidMount(){
      const dropZone = document.getElementById('dropZone');
      dropZone.addEventListener('dragover', this.allowDrop.bind(this))
      dropZone.addEventListener('drop', this.dropHandler.bind(this))
    }

这没用

然后,我尝试将其放在应用组件上的dropZone标签中:

<DropZone dropZone = {"dropZone"} onDragOver = {this.allowDrop.bind(this)} 
 onDrop ={this.dropHandler.bind(this)} >      
</DropZone>

这也没有向dropZone添加事件侦听器。我已经尝试了其他一些方法,但是这些都是我应该尝试的方法

所以我的问题是

  • 如何将dropand dragover事件侦听器添加到dropZone?

  • 我应该在App上添加这些事件侦听器,并将其作为道具传递给dropZone组件吗?还是根本不需要传承

  • 还是应该直接在dropZone上添加事件侦听器,这样我的事件处理函数才能存在于dropZone组件中?


问题答案:

您不需要使用道具。您只需将所有事件添加到DropZone组件中即可。

http://codepen.io/jzmmm/pen/bZjzxN?editors=0011

这是我添加事件的地方:

  componentDidMount() {
    window.addEventListener('mouseup', this._onDragLeave);
    window.addEventListener('dragenter', this._onDragEnter);
    window.addEventListener('dragover', this._onDragOver);
    window.addEventListener('drop', this._onDrop);
    document.getElementById('dragbox').addEventListener('dragleave', this._onDragLeave);
  }

您的渲染方法:

  render() {
    return (
      <div>
        {this.props.children}
        <div id="dragbox" className={this.state.className}>
          Drop a file to Upload
        </div>
      </div>
    );
  }

如您在componentDidMount中看到的,我也向#dragbox添加了一个事件监听器。因为一旦将文件拖到页面上,#dragbox就会在鼠标光标下方,因此它需要进行拖拉,以防您决定不想将文件拖放到此处。

此外,dragover还需要捕获drop

然后在我的App组件中,我可以像这样使用它:

class App extends React.Component {
  render() {
    return (
      <DropZone>
        <div>
          <h1>Drag A File Here...</h1>
        </div>
      </DropZone>
    );
  }
}


 类似资料:
  • 是否有办法将AWT侦听器添加到SWT组件? 我以前制作了一个主要在AWT和Swing组件中运行的应用程序。现在,我有热键功能,它依赖于一个定制的库,该库监听全局键事件并返回相应的AWT键代码。 当我改变整个应用程序并使用SWT组件时,我的问题就出现了。正如我们所知,一些键现在返回一个不同的键代码,这扰乱了整个热键功能。 我想到的最初解决方案是: A.使用javax。摆动jtextfield作为my

  • 我正在用canvas构建一个新的Javascript游戏,我想为每个对象添加一个事件监听器。我想画一个有用的操纵杆(箭头),当游戏从智能手机/平板电脑打开。所以,玩家可以通过点击每个箭头来移动角色。 这就是我所拥有的: game.js:

  • 我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?

  • 问题内容: 我具有以下复合组件( ) 在下面的片段中,我想使用以下方式向该组件添加一个 事件: 当我调用Testpage时,出现以下错误: 我该如何解决这个问题? Ajax-Event应该触发UI-Bean-Methode。 谢谢罗纳德 问题答案: 您需要将其注册为Composite界面中的客户端行为。 :您将在Composite的客户端中指定的自定义事件名称。可以与实际事件名称相同。可以定做的。

  • 我可以在下面的代码中为添加事件侦听器,但不能添加到。 是不是因为twitter做了一些事情不让我这么做?有办法绕过它吗?

  • 问题内容: 这是我的问题:是否可以通过某种方式检查是否存在动态附加的事件侦听器?或者如何检查DOM中“onclick”(?)属性的状态?但是没有运气。这是我的html: 然后在Javascript中,将动态创建的事件侦听器附加到第二个链接: 该代码运行良好,但是我所有检测该附加侦听器的尝试均失败: 如果单击“为2添加onclick”,然后单击“[链接2]”,则事件触发良好,但“测试链接2”始终报告