javascript - 如何从 React 组件中向 BODY 添加点击处理程序?

标签 javascript jquery reactjs

我正在构建一个下拉菜单 React 组件,当用户单击该组件 外部 中的 DOM 中的任意位置时,该组件应该关闭。

使用 jQuery,我通常会在打开下拉菜单时向 body 添加一个事件监听器,并在关闭下拉菜单时再次将其删除。 (事件监听器本身会关闭下拉列表——组件的任何点击事件都不会传播,以防止主体点击处理程序触发。)

有什么方法可以在 React 组件中将监听器附加到 body 元素?或者我应该只使用 jQuery 吗? (我对混合使用 React 和 jQuery 有点谨慎。)

最佳答案

React 只是 JavaScript,因此可以使用 addEventListener() 正常将点击处理程序附加到任何元素。在 componentDidMount 中执行此操作通常非常整洁,并且在 componentWillUnmount 中通过删除添加的事件处理程序进行清理。

var Component = React.createClass({
    componentDidMount: function () {
        document.body.addEventListener('click', this.myHandler);
    },
    componentWillUnmount: function () {
        document.body.removeEventListener('click', this.myHandler);
    },
    myHandler: function () {
        alert('click');
    },
    render: function() {
        return <div>Hello {this.props.name}</div>;
    }
});

关于javascript - 如何从 React 组件中向 BODY 添加点击处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32485520/

相关文章:

Javascript Engine V8 快速属性访问

javascript - 对象字面量动态键

javascript - 在javascript中形成数组值

php - 如何使用 jquery/ajax 编辑表列数据并保存到 mysql

javascript - 拒绝加载脚本 'https://cdnjs.cloudflare.com/ajax/libs/jquery-csv/0.71/jquery.csv-0.71.min.js'

javascript - React 教程给出 TypeError

javascript - Vue.js - 如何访问外部 Javascript/Jquery 函数

javascript - Javascript/React 中的动态配置变量

javascript - 使用 react 路由器的链接编码 Uri 不起作用

jQuery.load 不使用 document.write 执行 javascript