【发布时间】:2018-01-30 23:01:38
【问题描述】:
如果我将菜单项标记为突出显示,我将如何告诉我的渲染只填充类名(我使用的是类名)。
有两个限制:
一些菜单项是指向应用程序部分的 href/nav 链接,单击它们时必须应用我想要以支持整个组件能够检查地址的方式构建我的代码的样式它决定菜单项是否应该具有样式也取决于它。 (As-in 支持用户通过手动导航(在地址栏中输入 /item)而不是单击菜单项来“破坏”应用程序。
-
有些菜单项展开有些不展开,单击链接菜单项或展开下拉菜单是应用该样式的两个正当理由,请记住,在其他地方导航时展开的元素保持展开状态。
因此,这不仅仅是“如果您不是最后点击的项目,则失去样式”的情况。
更新(2017 年 8 月 23 日):
我从@taylorc93 那里得到了这个,这是一个进步:
constructor(props) {
super(props);
this.state = {
selected: null;
};
this.setSelected = this.setSelected.bind(this);
}
setSelected(row) {
return () => {
this.setState({ selected: row });
}
}
render() {
var classes = classNames(this.props.className, {
// if(this.selected)
'selected': (this.props.selected === this.props.className),
});
return (
<div id="menu">
<div
onClick={this.setSelected(1)}
className={classNames(this.props.className, {
'selected': this.state.selected === 1,
})}
>
Dropdown 1
</div>
<div
onClick={this.setSelected(1)}
className={classNames(this.props.className, {
'selected': this.state.selected === 1,
})}
>
Menu item 2
</div>
<div
onClick={this.setSelected(1)}
className={classNames(this.props.className, {
'selected': this.state.selected === 1,
})}
>
Menu item 3
</div>
</div>
);
}
thta 的问题是它没有考虑下拉行为(单击一次以选择第二次以取消选择) 所以我对它说话,这就是我所在的位置:
constructor(props) {
super(props);
this.state = {
tttattta: '',
selected: null,
dropDownOne: false,
dropDownTwo: false,
};
this.setSelected = this.setSelected.bind(this);
}
setSelected(row) {
let tttattta = this.state.tttattta;
let drop1 = this.state.dropDownOne;
let drop2 = this.state.dropDownTwo;
if (row === 1) {
if (drop1) {
drop1 = false;
} else {
drop1 = true;
}
} else if (row === 3) {
if (drop2) {
drop2 = false;
} else {
drop2 = true;
}
} else {
tttattta = row;
}
return () => {
this.setState({ selected: tttattta,
dropDownOne: drop1,
dropDownOne: drop2,
});
};
}
render() {
var classes = classNames(this.props.className, {
// if(this.selected)
'selected': (this.props.selected === this.props.className),
});
return (
<div id="menu">
<div
onClick={this.setSelected(1)}
className={classNames(this.props.className, {
'selected': this.state.selected === 1,
})}
>
Dropdown 1
</div>
<div
onClick={this.setSelected(1)}
className={classNames(this.props.className, {
'selected': this.state.selected === 1,
})}
>
Menu item 2
</div>
<div
onClick={this.setSelected(1)}
className={classNames(this.props.className, {
'selected': this.state.selected === 1,
})}
>
Menu item 3
</div>
</div>
);
}
【问题讨论】:
标签: reactjs