[英]Can't get onMouseEnter to change state in react.js
我正在尝试使用react组件将className添加到div中。 这就是我所拥有的。 我是新来的反应者,顺便说一句。
class PrimaryNavigation extends Component {
constructor(props) {
super(props);
this.state = {
condition: false
};
}
onMouseEnterHandler() {
this.setState({
condition: !this.state.condition
});
}
clickHandlerFor(component) {
return (e) => {
if (typeof this.props.onClick !== 'function') {
return;
}
e.preventDefault();
var componentData = this.componentDataFor(component);
this.props.onClick(e, componentData);
};
}
componentDataFor(component) {
...
}
render(): ReactElement {
...
return (
<div className='PrimaryNavigation'>
<nav className='PrimaryNavigation-Links'>
<ul>
...
<li className="dropdown" onMouseEnter={this.onMouseEnterHandler}>
<Link to='/account' className='PrimaryNavigation-link dropbtn'>
<span className='PrimaryNavigation-label'><FormattedMessage id='navigation.my_account' /></span>
</Link>
<div id="myDropdown" className={this.state.condition ? "dropdown-content show" : "dropdown-content" }>
<div className="dropdown-box">
...
</div>
</div>
</li>
</ul>
</nav>
</div>
);
}
}
对于其中具有三元条件的div,如果我将其保留为this.state.condition
则将显示"dropdown-content"
的className。 当我将其更改为!this.state.condition
将"dropdown-content show"
的类名。 表示我遇到的问题正在改变状态。 在我的onMouseEnterHandler()
函数中,我已将条件更改为true。 依然没有。
我能做什么? 另外,如果我用错误的方式表达了我的问题,那么任何编辑建议都将不胜感激。
您需要将onMouseEnterHandler()
方法绑定到构造函数中的组件实例,否则, this
上下文将不是组件,并且setState()
将是未定义的。 查看更新的代码:
class PrimaryNavigation extends Component {
constructor(props) {
super(props);
this.state = {
condition: false
};
this.onMouseEnterHandler = this.onMouseEnterHandler.bind(this);
}
onMouseEnterHandler() {
this.setState({
condition: !this.state.condition
});
}
clickHandlerFor(component) {
return (e) => {
if (typeof this.props.onClick !== 'function') {
return;
}
e.preventDefault();
var componentData = this.componentDataFor(component);
this.props.onClick(e, componentData);
};
}
componentDataFor(component) {
...
}
render(): ReactElement {
...
return (
<div className='PrimaryNavigation'>
<nav className='PrimaryNavigation-Links'>
<ul>
...
<li className="dropdown" onMouseEnter={this.onMouseEnterHandler}>
<Link to='/account' className='PrimaryNavigation-link dropbtn'>
<span className='PrimaryNavigation-label'><FormattedMessage id='navigation.my_account' /></span>
</Link>
<div id="myDropdown" className={this.state.condition ? "dropdown-content show" : "dropdown-content" }>
<div className="dropdown-box">
...
</div>
</div>
</li>
</ul>
</nav>
</div>
);
}
}
在此处查看相关的React文档: https : //facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.