我尝试使用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()
函数中,我已将条件改为真。依然没有。
我该怎么办?此外,如果我错误地表达了我的问题,那么任何编辑建议都会受到赞赏。
答案 0 :(得分:2)
您需要将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