【发布时间】:2019-05-10 16:41:49
【问题描述】:
所以我正在尝试制作下拉选项组件。我想通过单击按钮来显示它,如果在此组件之外检测到单击,则将其隐藏。
这是一个代码。我做了参考,但我不明白如何检查点击是否在组件上:
import React, { Component } from 'react'
import './OptionsMenu.sass'
import DropdownBox from '../DropdownBox/DropdownBox'
import Icon from '../Icon/Icon'
class OptionsMenu extends Component {
constructor(){
super()
this.dropdownBoxRef = React.createRef()
}
handleClickOutside = event => {
if (this.dropdownBoxRef && !this.dropdownBoxRef.contains(event.target)) {
this.props.close()
}
}
componentDidMount() {
document.addEventListener('mousedown', this.handleClickOutside)
}
componentWillUnmount() {
document.removeEventListener('mousedown', this.handleClickOutside)
}
render() {
const options = this.props.options.map(option => (
<li className='OptionsList-Element'>
<div className='OptionsList-ElementIcon'>
<Icon name={option.icon} />
</div>
<span>{option.label}</span>
</li>
))
return (
<DropdownBox ref={this.dropdownBoxRef} styles={this.props.styles}>
<ul className='OptionsList'>{options}</ul>
</DropdownBox>
)
}
}
export default OptionsMenu
使用此代码我有错误: OptionsMenu.js:14 Uncaught TypeError: _this.dropdownBoxRef.contains 不是函数
我知道错误,因为它没有 .contains()。那么我必须尝试使用什么?
【问题讨论】:
-
您介意提供
DropdownBox组件的代码吗? -
您的
Dropdown需要一个isVisible状态
标签: javascript reactjs