我正在构建一个下拉菜单React组件,当用户单击组件的DOM outside 中的任何位置时,该组件应该关闭 .
使用jQuery我通常会在下拉打开时向 body 添加一个事件监听器,并在关闭下拉时再次将其删除 . (事件侦听器本身关闭下拉列表 - 任何单击事件 within 组件都不会传播以防止正文单击处理程序触发 . )
body
有没有办法从React组件中将侦听器附加到 body 元素?或者我应该只使用jQuery? (我有点担心混合使用React和jQuery . )
React只是JavaScript,所以通过使用 addEventListener() 正常地将点击处理程序附加到任何元素 . 通过删除添加的事件处理程序,在 componentWillUnmount 中执行此操作通常非常好,整洁并且清理完毕 .
addEventListener()
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>; } });
1 回答
React只是JavaScript,所以通过使用
addEventListener()
正常地将点击处理程序附加到任何元素 . 通过删除添加的事件处理程序,在componentWillUnmount
中执行此操作通常非常好,整洁并且清理完毕 .