reactjs - 当鼠标悬停时,navdropdown 在 React 中出现错误
问题描述
class Navigation extends React.Component {
constructor(props) {
super(props);
this.state = { isOpen: false };
}
handleOpen = () => {
this.setState({ isOpen: true });
};
handleClose = () => {
this.setState({ isOpen: false });
};
render() {
return (
<div className={s.root} role="navigation">
<Navbar className={s.menuBar}>
<Nav>
<NavDropdown
title="Auction"
id="basic-nav-dropdown"
onMouseEnter={this.handleOpen}
onMouseLeave={this.handleClose}
open={this.state.isOpen}
noCaret
>
如您所见,我在 NavDropdown 中设置了 open prop。但是此时,我遇到了屏幕显示的错误如果有人曾经这样做过,请告诉我
解决方案
如果您正在改变状态(并且您是),请使用defaultOpen
而不是。open
如果不是,open 正在请求一个函数,也许尝试传递您的处理程序而不是状态(我认为这不是最好的解决方案,因为您正在使用 onMouseLeave/Enter 处理打开事件)
默认打开
class Navigation extends React.Component {
constructor(props) {
super(props);
this.state = { isOpen: false };
}
handleOpen = () => {
this.setState({ isOpen: true });
};
handleClose = () => {
this.setState({ isOpen: false });
};
render() {
return (
<div className={s.root} role="navigation">
<Navbar className={s.menuBar}>
<Nav>
<NavDropdown
title="Auction"
id="basic-nav-dropdown"
onMouseEnter={this.handleOpen}
onMouseLeave={this.handleClose}
defaultOpen={this.state.isOpen}
noCaret
>
编辑
试试这个 hack 看看它是否有效
class Navigation extends React.Component {
constructor(props) {
super(props);
this.state = { isOpen: false };
}
handleOpen = () => {
this.setState({ isOpen: true });
};
handleClose = () => {
this.setState({ isOpen: false });
};
render() {
return (
<div className={s.root} role="navigation">
<Navbar className={s.menuBar}>
<Nav>
<div
onMouseEnter={this.handleOpen}
onMouseLeave={this.handleClose}
>
<NavDropdown
title="Auction"
id="basic-nav-dropdown"
defaultOpen={this.state.isOpen}
noCaret
>
</div>
如果需要,您可以使用跨度而不是 div
推荐阅读
- c++ - 错误打印二维字符数组
- python-3.x - Apache PySpark 的字数统计程序
- android - React Native:推送通知正在冻结 iOS 上的应用程序(白屏)
- apache-spark - 阅读时忽略Spark中排序文件的镶木地板摘要文件(_metadata)?
- ansible - 在ansible变量数组上传递数字参数
- javascript - 显示/隐藏选定的表格 tr
- python - Python 高负载能力的微服务架构
- airflow - 带有 Apache Airflow 的 JdbcOperator
- python - Snake-Game:蛇的连续运动有问题
- neo4j - 未找到 Apoc.algo.betweenness 程序:调用 apoc.help('algo') 正在运行