【发布时间】:2020-04-28 16:36:34
【问题描述】:
其实我在UserDataPresentation类中使用了isAvatarUserMenuOpen prop,来判断modal是否打开。我使用此状态生成影响 onClick 打开和关闭模态的条件。但是我需要通过在此模式之外进行的任何点击来关闭此模式,实际上它只在打开它的同一个按钮中关闭。
我一直在做一个handleClick,它在打开模式时添加一个监听器,当我在模式外点击时,它会显示一个警报“关闭模式!”。我需要删除此警报,并找到关闭模式的方法,就像打开和关闭模式的 onclick 一样。
export class UserDataPresentation extends React.Component<Props> {
node: any
componentWillMount() {
document.addEventListener('mousedown', this.handleClick, false)
}
componentWillUnmount() {
document.removeEventListener('mousedown', this.handleClick, false)
}
handleClick = (e: { target: any }) => {
if (!this.node.contains(e.target)) {
alert('close de modal!')
return
}
}
render() {
const { openMenuUserModal, closeMenuUserModal, isAvatarUserMenuOpen } = this.props
return (
<React.Fragment>
<div className="user-data-container" ref={isAvatarUserMenuOpen ? (node) => (this.node = node) : null}>
<div className="text">
<p>Wolfgang Amadeus</p>
</div>
<div className="avatar">
<img src={avatarPhoto} />
</div>
<a href="#" onClick={isAvatarUserMenuOpen ? closeMenuUserModal : openMenuUserModal}>
<div className="svg2">
<SVG src={downArrow} cacheGetRequests={true} />
</div>
</a>
</div>
</React.Fragment>
)
}
}
【问题讨论】:
-
componentWillMount已弃用,请改用componentDidMount -
或者如果它是一个新项目,只需切换到新版本的 react 并开始使用无状态组件、contextApi 和 Hooks(有史以来最好的组合,即使是任天堂也做不到)。此外,您可以使用 Material-ui 或 Ant Design 之类的东西进行反应,它们为您提供所需的一切:)
-
谢谢@HermitCrab,我做了改变。
标签: javascript reactjs ecmascript-6 react-redux