javascript - 仅从 React.js 中的单击按钮切换内容
问题描述
我正在尝试更改div.Filters
单击加号或减号按钮时的显示。按钮在单击时更改,如果它是+更改为-,反之亦然。
这是代码:
export class NavLeftMobile extends React.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
this.state = {
isToggle: true
};
}
handleClick(e) {
this.setState({
isToggle: !this.state.isToggle
});
}
render() {
let button;
if (this.state.isToggle) {
button = (
<button className="Menos" onClick={() => this.handleClick()}>
-
</button>
);
} else {
button = (
<button className="Menos" onClick={() => this.handleClick()}>
+
</button>
);
}
return (
<div>
<div className="NavLeftMobile">
<h1>categories</h1>
<h3>Manufacturer{button}</h3>
<div
className="Filters"
style={{ display: this.state.isToggle ? "block" : "none" }}
>
<p>Lusograph (10)</p>
</div>
<h3>Color{button}</h3>
<div
className="Filters"
style={{ display: this.state.isToggle ? "block" : "none" }}
>
<p>Black (10)</p>
</div>
</div>
</div>
);
}
}
因此,当单击其中一个按钮时,将调用 handleClick 函数,并且显示从div.Filters
发生变化,如果它被阻止则变为无,反之亦然。基本上,我想将每个部分相互独立地切换。
解决方案
如果您希望每个部分都是可折叠和独立的,那么状态不应该存在于您的包装组件上,而是您可以创建另一个跟踪它的类组件。
class Collapsible extends React.Component {
constructor(props) {
super(props);
this.state = {
collapsed: true
};
}
onToggle = () => {
const { collapsed } = this.state;
this.setState(() => ({
collapsed : !collapsed
}))
}
render () {
const { title, children } = this.props;
const { collapsed } = this.state;
return (
<div>
<h3>
{title}
<a onClick={this.onToggle}>
{collapsed ? '+' : '-'}
</a>
</h3>
<div style={{
display : collapsed ? "block" : "none"
}}>
{children}
</div>
</div>
);
}
}
class NavLeftMobile extends React.Component {
render() {
return (
<div>
<div className="NavLeftMobile">
<h1>categories</h1>
<Collapsible title="Manufacturer">
Lusograph (10)
</Collapsible>
<Collapsible title="Color">
Black (10)
</Collapsible>
</div>
</div>
);
}
}
ReactDOM.render(
<NavLeftMobile/>,
document.querySelector('#app')
);
推荐阅读
- c - 当我使用 sprintf 将大小为 3 的字符串和字符输出到大小为 5 的字符串时,出现分段错误(核心转储)
- python - 使用 numpy 浮点数时如何包含 .0 小数
- python - 滑动窗口但改变下一个窗口开始的位置
- wso2 - synapse-core_2.1.7.wso2v182 找不到 HashiCorpVaultLookupXPathFunctionProvider
- eclipse - 为什么当我在 Eclipse 中运行 tomcat 时,在部署的项目中出现异常,但是当从 startup.bat 或 IntelliJ 启动时,一切正常?
- sql - 精确数据库:当不使用EXISTS引入子查询时,选择列表中只能指定一个表达式
- javascript - 在另一个页面中设置 JavaScript 变量
- flutter - 当所有变量都有值时,空检查运算符错误?
- javascript - 车把表单模板,使用 keyup 更新时输入失去焦点
- flutter - Flutter 中 mp3 文件的元数据