reactjs - 如何使用材料 ui 手风琴的按钮折叠?
问题描述
我正在为折叠按钮和手风琴使用材质 UI。我希望人们能够单击“今天”按钮,然后打开第一个手风琴部分(上面写着星期六的部分)。今天按钮位于材质 UI 工具栏内。我也在项目中使用反应钩子。
我只是使用材料 UI 网站上显示的默认手风琴设置。每个手风琴都有自己的 id(例如:panel1、panel2 等)。
我正在使用材料 ui 控制的手风琴的示例布局
开放式手风琴示例:
封闭式手风琴示例:
你能给我的任何帮助都会很棒!谢谢。
解决方案
使用expanded
Accordion 的属性和 state 将为您提供您正在寻找的东西。
请注意,一旦设置了expanded
属性,手风琴的默认行为将被覆盖,您需要直接控制该行为。
这是我将如何解决它的代码沙箱示例。
让我知道它是否有帮助!
编辑 - 代码示例:
import {
Accordion,
AccordionDetails,
AccordionSummary,
Button
} from "@material-ui/core";
import React, { useState } from "react";
import "./styles.css";
const week = [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
];
const d = new Date();
const currentDay = week[d.getDay()];
export default function App() {
const [openDay, setOpenDay] = useState("");
function handleAccordClick(day) {
if(openDay === day) setOpenDay("")
if(openDay !== day) setOpenDay(day)
}
function generateWeekAccordion(day) {
return (
<Accordion
expanded={day === openDay}
onClick={() => handleAccordClick(day)}
>
<AccordionSummary>{day}</AccordionSummary>
<AccordionDetails>{`${day} details...`}</AccordionDetails>
</Accordion>
);
}
return (
<div className="App">
<Button
style={{ marginBottom: "20px" }}
variant="outlined"
onClick={() => setOpenDay(currentDay)}
>
Open Today
</Button>
{week.map((day) => generateWeekAccordion(day))}
</div>
);
}
推荐阅读
- c# - 关于保存相关实体的 EF 与 EF Core
- python-3.x - 有没有办法在不丢失用户先前输入点的情况下动态绘制从用户那里获取的点?(Python)
- python - 从 exel 文件打印字符串 - 接收错误:来自 err KeyError 的 KeyError(key):'Interface'
- python - 显示 Python 3.8.5 的 Visual Studio 代码。而不是实际版本(MacOs)
- javascript - 格式化不断变化的数字
- python - 在 docker run 中运行用 python 编写的语音应用程序失败
- java - Mockito 为通用 @BeforeEach 设置方法中定义的存根抛出 UnnecessaryStubbingException
- java - 可以读取 csv 文件,但无法在 Android Studio 中读取我想要的行
- jekyll - Jekyll网站如何添加链接和改变结构
- r - 从 R 中的降水数据中识别风暴