reactjs - 如何使用 ReactJS 使下拉列表可滚动?
问题描述
我正在做一个项目,我需要制作一个下拉菜单,该下拉菜单将具有以下功能。
- 使用箭头键向上/向下移动
- 可滚动
- 搜索
这是我迄今为止尝试创建下拉列表的代码。
import React from 'react';
import './style.css';
class Dropdown extends React.Component {
constructor(){
super();
this.state = {
displayMenu: false,
};
this.showDropdownMenu = this.showDropdownMenu.bind(this);
this.hideDropdownMenu = this.hideDropdownMenu.bind(this);
};
showDropdownMenu(event) {
event.preventDefault();
this.setState({ displayMenu: true }, () => {
document.addEventListener('click', this.hideDropdownMenu);
});
}
hideDropdownMenu() {
this.setState({ displayMenu: false }, () => {
document.removeEventListener('click', this.hideDropdownMenu);
});
}
render() {
return (
<div className="dropdown" style = {{background:"red",width:"200px"}} >
<div className="button" onClick={this.showDropdownMenu}> My Setting </div>
{
this.state.displayMenu ? (
<ul>
<li><a className="active" href="#Create Page">Create Page</a></li>
<li><a href="#Manage Pages">Manage Pages</a></li>
<li><a href="#Create Ads">Create Ads</a></li>
<li><a href="#Activity Logs">Activity Logs</a></li>
<li><a href="#Setting">Setting</a></li>
<li><a href="#Log Out">Log Out</a></li>
</ul>
): ( null )
}
</div>
);
}
}
export default Dropdown;
请帮助我编写代码以使其可滚动。提前致谢!
解决方案
应用程序.js
// App.js
import React, { useState } from 'react';
import './style.css';
const App = () => {
const [toggle, setToggle] = useState(false);
return(
<div className="container">
<button onClick={() => setToggle(!toggle)}>Dropdown<button>
<ul className={`${toggle ? show : ''}`}>
<li>one</li>
<li>two</li>
<li>four</li>
<li>five</li>
<li>six</li>
</ul>
</div>
);
}
样式.css
// style.css
.container{
position: relative;
}
ul{
height: 50px; // fixed height
overflow: hidden; // then set overflow to hidden in all respects
overflow-y: scroll; // At the end only from the top and bottom overflow to scrollable
background: 'red';
display: none;
}
.show{
display: block !important;
}
推荐阅读
- c# - 在 List 上实现排序算法
- entity-framework - 在 DBFirst 场景中,在映射中添加 .HasIndex() 有什么好处?
- jasper-reports - 如何用一条线覆盖所有的细节空间
- ios - 归档 iOS 应用程序时出错 - “通用专业化”
Swift.String.init 的" - activemq - 如何使我的上次映像恢复策略主题在代理重新启动后仍然存在?
- docker - 如何更正makefile中的docker,它需要至少1个参数来删除所有容器命令
- sharepoint-online - 使用作者/电子邮件使用 SharePoint REST API 进行查询
- javascript - JS Canvas 游戏使用按键事件来修改按住 shift 按钮时的速度
- php - 如何在 Laravel 中创建用户和帖子之间的关系
- r - 尝试在 R 中绘制复杂函数时出现错误消息