javascript - React - 点击时显示/隐藏元素
问题描述
我正在使用 React 钩子,我有 2 个组件:
- 窗帘
- 导航栏
这是我的Curtain
组件代码:
function Curtain(){
return(
<div className="curtain__div">
<ul className="menu__items">
<li className="about">abc</li>
<li>def</li>
<li>ghi</li>
<li>klm</li>
</ul>
</div>
);
}
export default Curtain;
这是我的NavBar
组件代码:
function NavBar(){
const [show, setShow] = useState(false);
return(
<nav className="nav__bar">
<ul className="menu">
<li className="menu__icon" onClick={() => setShow(true)}><box-icon name='menu' color="floralwhite" size="md"/>
<Curtain/>
</li>
</ul>
</nav>
);
}
export default NavBar;
我的问题:我想Curtain
在用户单击 li 时显示组件,className="menu__icon"
并在用户再次单击它时隐藏。
解决方案
最简单的选择就是根据您的状态有条件地返回组件:
return(
<nav className="nav__bar">
<ul className="menu">
<li className="menu__icon" onClick={() => setShow(currentShow => !currentShow)}>
<box-icon name='menu' color="floralwhite" size="md"/>
{ show ? <Curtain/> : null }
</li>
</ul>
</nav>
);
要show
再次关闭,您可以更改
onClick={() => setShow(true)}
而是像这样反转当前状态:
onClick={() => setShow(!show)}
// or
onClick={() => setShow(currentShow => !currentShow)}
(第二个选项在技术上更好,因为如果您要快速重复单击按钮,它可以避免竞争条件)
推荐阅读
- google-cloud-platform - 谷歌云功能:错误:超出内存限制。函数调用被中断,但它可以工作
- delphi - 从 TIdTCPServer 调用时 TIdNotify.Notify() 不起作用
- hyperledger-fabric - 超级账本结构在 kubernetes 上部署的一些问题
- flutter - 如何从另一个容器中减去一个容器?
- android - 启用深色主题时,windowBackground 不会在样式中选择夜间颜色
- javascript - React Redux Saga:动作必须是普通对象。使用自定义中间件进行异步操作
- java - 要重用的复合注释
- python - python - 如何在python中的两个给定数组中找到非互质数对的数量?
- c# - 在 IIS 中发布 .net 核心 Web 应用程序的示例项目时出现 HTTP 错误 500.19 内部服务器错误
- javascript - 单击单个图像以使其消失的问题