news 2026/9/4 20:56:49

三步搭好Material-UI折叠面板:从零到FAQ页与设置面板

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三步搭好Material-UI折叠面板:从零到FAQ页与设置面板

三步搭好Material-UI折叠面板:从零到FAQ页与设置面板

【免费下载链接】material-uiMaterial UI: Comprehensive React component library that implements Google's Material Design. Free forever.项目地址: https://gitcode.com/GitHub_Trending/ma/material-ui

Material-UI 的折叠面板(Accordion)组件,把相关内容收进一组可展开、可收起的面板里。它特别适合 FAQ 页和设置面板:用户只点自己关心的,页面自然就清爽了。

先看看两种需要折叠面板的场景 🧩

场景一:电商 FAQ 页。运费、支付、开票二十多个问答全部铺开,页面就是一堵文字墙。拆成折叠面板后,默认全部收起,用户点哪个看哪个,信息密度立刻可控。

场景二:应用设置面板。把设置项按"基础""通知""隐私"分成三个面板,各自带操作按钮,层级清晰,滚动量也省了。

这就是 React 里经典的"手风琴"交互:右侧箭头旋转、内容滑入滑出,动画全部内置,你不用写一行动画代码。

三步写出最小可用折叠面板 ⚡

第一步,导入三个核心组件和展开图标;第二步,按 Accordion、Summary、Details 的顺序嵌套;第三步,保存打开页面:

import Accordion from '@mui/material/Accordion'; import AccordionSummary from '@mui/material/AccordionSummary'; import AccordionDetails from '@mui/material/AccordionDetails'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; <Accordion> <AccordionSummary expandIcon={<ExpandMoreIcon />}> 配送政策 </AccordionSummary> <AccordionDetails> 全场满 99 元包邮,7 天内可无理由取消订单。 </AccordionDetails> </Accordion>

Accordion 是最外层容器,Summary 是可点击的标题,Details 是内容区,expandIcon 就是那枚会旋转的箭头。这个结构是固定的,复制即用,就得到一个功能完整的折叠面板。

常用属性配置速查 🛠️

日常最常用的六个属性整理成下表,其余属性按需查类型定义:

属性作用一行示例
defaultExpanded默认展开,即"折叠面板默认展开"<Accordion defaultExpanded>
disabled禁用展开折叠和焦点<Accordion disabled>
expandIcon换展开指示图标,挂在 Summary 上expandIcon={<ArrowDownwardIcon />}
disableGutters去掉上下留白,面板更紧凑<Accordion disableGutters>
square去掉首尾默认圆角<Accordion square>
slotProps.transition调整展开过渡的参数slotProps={{ transition: { unmountOnExit: true } }}

expandedonChange是一对受控属性,单独留到下一节讲。

进阶一点:受控状态与卸载内容 🚀

一次只展开一个面板。useState记录"当前谁展开",新面板打开时自动把旧的收掉:

const [expanded, setExpanded] = React.useState('p1'); const toggle = (key) => (e, isExpanded) => setExpanded(isExpanded ? key : false); return ( <div> <Accordion expanded={expanded === 'p1'} onChange={toggle('p1')}> <AccordionSummary expandIcon={<ExpandMoreIcon />}>基础设置</AccordionSummary> <AccordionDetails>基础设置内容</AccordionDetails> </Accordion> <Accordion expanded={expanded === 'p2'} onChange={toggle('p2')}> <AccordionSummary expandIcon={<ExpandMoreIcon />}>高级设置</AccordionSummary> <AccordionDetails>高级设置内容</AccordionDetails> </Accordion> </div> );

每个面板的expanded都从同一份状态推导,多个面板天然互斥。这是 React 手风琴组件用法里最实用的模式。

收起时卸载内容。默认情况下,收起的面板内容仍然挂载在 DOM 里,这是为 SSR 和 SEO 做的妥协。如果里面塞了重组件树,改成展开时才挂载:

<Accordion slotProps={{ transition: { unmountOnExit: true } }} />

收起后内容直接从 DOM 移除,展开时再挂载,节点数和内存占用都更省。

五个避坑清单

  • Accordion 的第一个孩子必须是AccordionSummary,不接受 Fragment,Details 放前面会直接报错。
  • 一旦传了expanded,组件就变成受控模式;不写onChange回写状态,面板会点不动。
  • 标题默认是h3标签。页面标题层级因此错乱时,用slotProps.heading.component换成h4等。
  • 想在内容下方放操作按钮,用可选的AccordionActions,别忘了导入它。
  • 嵌套折叠面板时,把内层 Accordion 放进外层 Details 即可,组件不限制嵌套层级。

收尾

折叠面板把状态、动画和无障碍都替你做好了,接上就能用。现在,把它搬进你自己的项目,搭一个 FAQ 页试试。

  • 折叠面板官方文档
  • 组件源码目录
  • 受控折叠面板示例

【免费下载链接】material-uiMaterial UI: Comprehensive React component library that implements Google's Material Design. Free forever.项目地址: https://gitcode.com/GitHub_Trending/ma/material-ui

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 22:33:48

蓝桥杯Fibonacci数列题解:从递归超时到迭代取模的算法优化

1. 从“蓝桥入门训练”说起&#xff1a;为什么是Fibonacci数列&#xff1f; 如果你刚开始接触编程竞赛&#xff0c;或者正在准备“蓝桥杯”这类赛事&#xff0c;那么“入门训练”这个系列题目&#xff0c;尤其是那道关于Fibonacci数列的题&#xff0c;大概率是你绕不开的第一道…

作者头像 李华
网站建设 2026/8/31 11:55:19

STM32C0x1参考手册精读指南:从寄存器到时钟的嵌入式开发实战

手里拿到一块STM32C0x1最小系统板&#xff0c;第一件事不是急着接线&#xff0c;而是先搞清楚手头这份参考手册该怎么看。STM32C0x1是意法半导体面向入门级和成本敏感应用推出的Arm Cortex-M0内核32位MCU&#xff0c;它的参考手册和芯片本身一样&#xff0c;走的是“精简、够用…

作者头像 李华
网站建设 2026/9/1 12:28:27

一文读懂Codex Harness:安装配置、接入DeepSeek与报错排查

OpenAI 高管关于 Codex 的争议发言&#xff0c;其实很适合当作一个技术话题来拆。核心问题不是“Codex 会不会过气”&#xff0c;而是“Codex 这类 Harness 到底解决什么问题&#xff0c;为什么行业正在重新审视这一层”。大模型编程 Agent 热了一年多之后&#xff0c;真正沉淀…

作者头像 李华
网站建设 2026/8/31 19:53:55

Netdata Windows监控:从MSI安装到3分钟看到第一块面板

Netdata Windows监控&#xff1a;从MSI安装到3分钟看到第一块面板 【免费下载链接】netdata The fastest path to AI-powered full stack observability, even for lean teams. 项目地址: https://gitcode.com/GitHub_Trending/ne/netdata 如果你的环境是 Linux 与 Wind…

作者头像 李华