【发布时间】:2022-01-23 05:08:17
【问题描述】:
作为大学作业的一部分,我不得不制作自定义下拉菜单,并且需要帮助解决以下问题:
- 在新行中显示每个数组值而不是一行
- 摆脱滚动条
JSX和CSS文件如下:
import React, { useState } from "react";
import './state_filter.css';
import { IoMdArrowDropdown } from 'react-icons/io';
import { GoTriangleUp } from 'react-icons/go';
const StatusFilter = (props) => {
const [openStatus, setOpenStatus] = useState(false);
const [enterStatus, setEnterStatus] = useState('');
const items = ['Open', 'Pending', 'Closed']; //The values that need to be rendered in the dropdown
const onSelect = (value) => {
setEnterStatus(value);
setOpenStatus(!openStatus);
props.setStatus(value);
}
return (
<div style={{ display: "block" }}>
<div className="statusFilter">
<div className="filterStatusCaption">
{!enterStatus ? "Enter Status" : enterStatus}
</div>
<div className="filterStatusDropdown" onClick={() => setOpenStatus(prev => !prev)}>
{openStatus ? <GoTriangleUp size={"11px"} /> : <IoMdArrowDropdown />}
</div>
</div>
<div className={openStatus ? "selectFilterStatusDropdown" : "notSelected"}>
{items.map((value, key) => <div className="selectFilterStatusDropdownOption" key={key} onClick={() => onSelect(value.toLowerCase())}>
{value}
</div>)}
</div>
</div>
);
}
export default StatusFilter;
overflow 属性在 selectFilterStatusDropdown 元素中不起作用
.statusFilter {
display: flex;
width: 200px;
height: 40px;
border-radius: 5px;
box-shadow: 1px 2px 4px 1px gray;
}
.filterStatusCaption {
display: flex;
justify-content: flex-start;
align-items: center;
flex: 4;
height: 100%;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
background-color: white;
padding-left: 5px;
}
.filterStatusDropdown {
display: flex;
justify-content: center;
align-items: center;
flex: 1;
height: 100%;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
background-color: white;
cursor: pointer;
user-select: none;
}
.notSelected {
display: none;
}
//This here is the element mentioned above
.selectFilterStatusDropdown {
position: fixed;
display: block;
justify-content: flex-start;
align-items: center;
border-radius: 5px;
overflow: hidden;
overflow-y: scroll;
width: 200px;
height: auto;
background-color: white;
box-shadow: 1px 2px 4px 1px gray;
padding-left: 1px;
}
.selectFilterStatusDropdown {
display: flex;
justify-content: flex-start;
}
.selectFilterStatusDropdown .selectFilterStatusDropdownOption:hover {
display: block;
background-color: rgb(229, 230, 230);
cursor: pointer;
}
呈现的 HTML:
<div class="filterDropdowns">
<div class="filterClass">
<div style="margin-right: 15px;">
<div style="display: block;">
<div class="statusFilter">
<div class="filterStatusCaption">open</div>
<div class="filterStatusDropdown">
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M128 192l128 128 128-128z"></path></svg>
</div>
</div>
<div class="notSelected">
<div class="selectFilterStatusDropdownOption">Open</div>
<div class="selectFilterStatusDropdownOption">Pending</div>
<div class="selectFilterStatusDropdownOption">Closed</div>
</div>
</div>
</div>
</div>
<div>
<div class="searchFilterButton">Search</div>
</div>
</div>
【问题讨论】:
-
发布你渲染的 HTML。
-
@disinfor 你的意思是 index.html 文件吗?
-
您的 React 代码为浏览器编译/构建为 HTML - 查看源代码并从您的 StatusFilter 常量中复制
<div>的 HTML 标记。 -
@disinfor 我希望我能够发布您所要求的内容
-
那不是呈现的 HTML。当您使用浏览器中的下拉菜单访问您的页面时。 (chrome/firefox/safari/etc) - 单击查看源代码并复制选定部分的 HTML 标记。