我的导航栏上有一个简单的下拉菜单的以下代码:https : //jsfiddle.net/jL3yyk98/10/
索引.html
<div id="menu-button"></div>
导航菜单.js
var NavMenu = React.createClass({
getDefaultProps: function()
{
return {
isOpen: false
};
},
render: function()
{
if (this.props.isOpen)
{
return (
<div className="dropdown">
<ul>
<li><a href="#">News</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Guidelines</a></li>
<li><a href="#">Exchange</a></li>
<li><a href="#">Forum</a></li>
</ul>
</div>
);
}
return null;
}
});
导航菜单按钮.js
var NavMenuButton = React.createClass({
getInitialState: function()
{
return {
isOpen: false
};
},
toggleMenu: function(e)
{
e.stopPropagation();
this.setState({isOpen: !this.state.isOpen});
},
onClose: function()
{
this.setState({isOpen: false});
},
componentDidMount: function ()
{
document.body.addEventListener('click', this.onClose);
},
componentWillUnmount: function ()
{
document.body.removeEventListener('click', this.onClose);
},
render: function()
{
return (
<div>
<a onClick={this.toggleMenu} href="#">Menu</a>
<NavMenu isOpen={this.state.isOpen} />
</div>
);
}
});
React.render(<NavMenuButton />, document.getElementById('menu-button'));
我用我当前的代码理解,当用户单击菜单按钮关闭菜单时,toggleMenu 方法和 onClose 方法都会被调用(因为它们也有效地单击了正文);并且首先调用 onClose 方法,这意味着状态设置为 false,然后调用 toggleMenu 方法并将其设置回 true。为什么会这样,我该如何修复它以便单击菜单按钮切换菜单并单击正文隐藏菜单?
如果这种方法看起来不对,我应该使用什么方法?我对react还很陌生,所以我仍在学习什么去哪里以及为什么。
另外,我不能使用全身 div 作为解决方案,它需要是一个典型的下拉列表;因此,如果用户想要与页面的其他部分进行交互(可能单击链接),那么他们可以这样做。