reactjs - 将鼠标悬停在选项上时反应选择,打开子菜单
问题描述
我正在尝试使用 React-select 在主菜单中构建一个子菜单,它应该是这样的:
将鼠标悬停在主菜单中的选项上时,它会触发子菜单在侧面打开。
有没有办法使用 react-select 做到这一点?我找不到任何关于此的示例或文档,是否有类似 ```optionOnMouseover`` 的功能呢?先感谢您!
const options = [
{ value: 'chocolate', label: 'Chocolate' },
{ value: 'strawberry', label: 'Strawberry' },
{ value: 'vanilla', label: 'Vanilla' },
];
...
<Select
value={...}
onChange={...}
options={options}
/>```
解决方案
这是点击,但如果你需要悬停,只需修改它
import React, { useState } from "react";
import ReactDOM from "react-dom";
import Select, { components } from "react-select"
const CustomOption = (props) => {
const [submenu, setSubmenu] = useState(false)
const [height, setHeight] = useState(0)
const handleOption = (e) => {
if(submenu) {
setSubmenu(false)
} else {
setHeight(e.clientY)
setSubmenu(true)
}
}
const handleSubOption = (e) => {
console.log('clicked')
}
const { data } = props;
return data.custom ? (
<>
<div onClick={handleOption} className="customs">
{data.label} <span className="caret"/>
{
submenu && (
<div className="dropdown-submenu">
<div className="drops" onClick={handleSubOption}>
Test dropdown 1
</div>
<div className="drops" onClick={handleSubOption}>
Test dropdown 2
</div>
<div className="drops" onClick={handleSubOption}>
Test dropdown 3
</div>
</div>
)
}
</div>
<style jsx>{`
.customs {
height: 36px;
padding: 8px;
position: relative;
}
.drops {
height: 36px;
padding: 8px;
}
.customs:hover, .drops:hover {
background-color: #17cf76;
}
.dropdown-submenu {
position: fixed;
top: ${height - 10}px;
left: 410px;
min-height: 36px;
overflow: auto;
border: 1px solid hsl(0,0%,80%);
border-radius: 4px;
color: #212529;
}
`}</style>
</>
) : (
<components.Option {...props} />
);
};
const options = [
{ custom: true, label: "I'm a custom link", value: "cust" }
];
function App() {
return (
<>
<Select classNamePrefix="category-select" className="w-30" components={{ Option: CustomOption }} options={options} />
<style jsx global>{`
* {
font-family: sans-serif;
text-align: center;
}
.w-30 {
width: 30% !important;
}
`}</style>
</>
)
}
export default App
推荐阅读
- jquery - 在一个提交中合并两个表单值,但单选按钮无法正常工作-Jquery
- javascript - 如何在firebase Angular11上批量验证用户
- angular - .NET Core 3.1 + Angular 上的 PreflightMissingAllowOriginHeader CORS 错误
- sql - 如何解决 ORDER BY 列的 GROUP BY 错误?
- google-cloud-storage - 负载均衡器为静态网站(存储桶)提供 404
- r - 如何在 for 循环中收集值?
- javascript - 如何在图像删除时在 dropzone 中传递 id?
- python - 如何使用 VS Code 检测 DJango/Docker 项目中未使用的 python 包?
- makefile - makefile 目标比先决条件更新,但会重新完成
- javascript - 在 Razor 页面上显示 Javasciprt 文件的数据