【发布时间】:2018-01-17 09:30:51
【问题描述】:
我用react 创建了一个切换列表,当用户单击列表项时,它会折叠并显示一些内容。到目前为止,上帝,但现在它只会在用户点击另一个列表项时再次隐藏,这没问题,但我想实现我可以切换一个项目,我的意思是,当我点击同一个项目时显示和隐藏 - > 例如,我想在单击时将项目的状态设置为真/假,但我不知道该怎么做。现在我只是添加一个活动类,但是如何一次触发两个事件,即设置一个活动类并同时更改状态?
这是我目前得到的:
export default class ToggleList extends React.Component{
constructor(props){
super()
this.state = {
activeItem: null
activeState: false // maybe something like this?
};
}
onItemActive(item) {
this.setState({activeItem: item})
this.setState({activeState: !this.state.activeState}) // SOMETHING LIKE THIS?
}
render() {
let itemsArray = [
"Lorem ipsum dolor?",
"consectetur adipiscing elit?",
"commodo consequat?",
"Excepteur sint occaecat?"
]
let items = itemsArray.map( (item, index) => {
return (
<ToggleListItem key={index} item={item} onItemActive={this.onItemActive.bind(this)}
active={item === this.state.activeItem} />
);
});
return(
<div className="flex-grid">
<div className="flex-grid-1">
<div className="flex-grid-header">
<h3>{this.props.title}</h3>
</div>
</div>
<div className="flex-grid-2 faq-list">
<div className="toggleList">
<ul>
{items}
</ul>
</div>
</div>
</div>
)
}
}
class ToggleListItem extends React.Component {
constructor(props){
super()
}
setActive() {
this.props.onItemActive(this.props.item);
}
render() {
let item = this.props.item;
return (
<li className={this.props.active ? 'active' : ''} onClick={this.setActive.bind(this)} data-selected={this.props.selected}>
<div className="item-title">
<p>{item}</p>
</div>
<div className="toggle-icon-wrapper">
<div className="toggle-icon"></div>
</div>
<div className="toggleList-content">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam
</p>
</div>
</li>
);
}
}
【问题讨论】:
-
active={item === this.state.activeItem} 检查这个比较,如果是对的,那么 activeitem 是一个数字还是一个对象。如果它是一个对象,可能会比较对象总是返回 false
-
@stack26 啊,是的,当然 :-) 愚蠢的我,我可能再也看不到森林了 :-) 非常感谢!
标签: javascript reactjs