reactjs - 如何在 ReactJS 的功能组件中编写 this.handle click
问题描述
我想隐藏并显示下拉 div 点击使用一个饱和度。在这个方法中,所有的 div 都可以一键打开。
如果我点击 button1 div 1 应该打开 如果我点击 button2 div 2 应该打开
this.click如何写在功能组件中,请帮助我
const [dropdownOpen, setdropdownOpen] = useState(false);
const handleDropdown = () =>{
setdropdownOpen(!dropdownOpen)
}
div{
display:none
}
.dropdown-menu.show{
display:block
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<button type="button" onClick={handleDropdown}>Button 1</button>
<button type="button" onClick={handleDropdown}>Button 2</button>
<button type="button" onClick={handleDropdown}>Button 3</button>
<div className={`dropdown-menu ${dropdownOpen === true ? "show" : "hide"}`} aria-labelledby="dropdownMenuLink">
Div 1
</div>
<div className={`dropdown-menu ${dropdownOpen === true ? "show" : "hide"}`} aria-labelledby="dropdownMenuLink">
Div 2
</div>
<div className={`dropdown-menu ${dropdownOpen === true ? "show" : "hide"}`} aria-labelledby="dropdownMenuLink">
Div 3
</div>
解决方案
我认为您应该在这里使用数组状态。这对我来说似乎是最简单的方法。所有divs
并相应buttons
地应该有它们单独的状态变量。切换它们应该可以解决问题。
要唯一标识,您可以使用 adata-attribute
将按钮链接到其 div。我用过data-reactid
。
为了保持通用性,下面的代码只是映射到数组上以生成不同的divs
. argument
地图回调函数的第二个是索引,因此利用了它。
const [dropdownOpen, setdropdownOpen] = useState([false,false,false]);
const handleDropdown = (e) =>{
let newArray= [...dropdownOpen];
newArray[e.target.dataset.reactid] = !newArray[e.target.dataset.reactid];
setdropdownOpen(newArray)
}
div{
display:none
}
.dropdown-menu.show{
display:block
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<button type="button" onClick={handleDropdown} data-reactid={1}>Button 1</button>
<button type="button" onClick={handleDropdown} data-reactid={2}>Button 2</button>
<button type="button" onClick={handleDropdown} data-reactid={3}>Button 3</button>
{dropdownOpen.map( (x,index) => {
return <div className={`dropdown-menu ${x === true ? "show" : "hide"}`} aria-labelledby="dropdownMenuLink">
`Div ${index+1}`
</div>
})
注意:该片段不起作用。我刚刚复制了你的。
推荐阅读
- java - Java 错误:输入在 Cicle 中不起作用
- ruby-on-rails - 搜索以小时为整数的数据库池
- plugins - FIJI / ImageJ:如何在另一个插件中使用一个插件的类?
- java - Storm bolt 无法从 spout 反序列化对象
- javascript - Telegram BOT - 如何添加图标?
- filter - jquery TableSorter - 如何重建或刷新下拉过滤器
- sql - SQL Server 存储过程 - 引用两个表
- r - 通过 RStudio 中的 sparklyr 连接 Livy,比通过 sparkmagic 连接慢
- java - %_gpg_name 未使用 maven rpm 插件设置
- sql - SQL查询以获取第一个不同(给定)列值的所有值