Material UI 2021 Q3 更新全解读:MUI Core v5 发布、@mui/base 无样式组件与 Data Grid v4 稳定版

Material UI 2021 Q3 更新全解读:MUI Core v5 发布、@mui/base 无样式组件与 Data Grid v4 稳定版 Material UI 2021 Q3 更新全解读MUI Core v5 发布、mui/base 无样式组件与 Data Grid v4 稳定版【免费下载链接】material-uiMaterial UI: Comprehensive React component library that implements Googles Material Design. Free forever.项目地址: https://gitcode.com/GitHub_Trending/ma/material-ui本文是对 Material UI现名 MUI官方 2021 年第三季度更新发布于 2021-10-26作者 Olivier Tassinari原文见 docs/pages/blog/2021-q3-update.md的技术拆解。它以季度为单位回顾了产品与公司层面的进展核心工程内容包括 MUI Core v5.0.0 正式版发布、全新无样式组件包mui/base首批组件的落地、Docs 站内搜索体验重构、Masonry 瀑布流组件问世以及 MUI X 侧 Data Grid 稳定版v4.0.0与行编辑等关键能力。阅读本文后你将掌握这些发布背后的设计取舍、典型 API 用法与源码实现位置并了解团队为 Q4 制定的技术路线图适合希望理解 Material UI v5 演进脉络或迁移到 v5 的开发者。概览这三个月发生了什么该更新覆盖 2021 年 7 月初到 9 月底的产品进展并从「产品」与「公司」两个维度展开产品侧MUI Corev5 稳定版、新文档搜索、Masonry、mui/base、MUI XData Grid v4 稳定版、Design KitsFigma 套件同步 v5。公司侧里斯本团队 Retreat、季度增长数据、新成员加入、品牌更名为MUI。展望Q4 2021 的路线图意向v5 打磨、更多组件迁移到mui/base、CSS 变量探索、Data Grid 打印导出与树形数据等。下文按这些主线展开并结合当前仓库中的源码与文档对关键工程决策做纵深说明。MUI Corev5.0.0 正式发布2021 年 9 月MUI Core 发布了新的主版本 v5.0.0。从工程视角看v5 最具代表性的变化是从 JSS 全面迁移到 Emotion / styled 引擎、引入sx属性、theme 层能力大幅增强并由此开启了后续版本对现代 CSS 能力如 CSS 变量的逐步拥抱。这也为本文后面提到的「组件 API 重写」与「无样式组件分层」奠定了引擎基础。文档搜索体验重构配合 v5 发布团队对官方文档docs的站内搜索做了四方面重构排序调整组件页面component pages的排名现在优先于 API 页面结果数量不再只展示最多 5 条结果而是可以滚动查看更多结果类型标识每条结果用图标说明匹配来源是页面、标题header还是段落搜索历史最近的搜索记录会保存到浏览器localStorage中方便再次使用。下面对比重构前后的搜索界面。重构前重构后这套交互设计的目标很明确让开发者「先看到组件、再看到 API 细节」缩短从问题到答案的路径同时通过 localStorage 记住用户的搜索习惯。新组件 Masonry解决 Grid 布局浪费空间的问题官方同步引入了新的Masonry瀑布流组件定位是解决Grid组件在内容高度参差不齐时产生的空间浪费问题常用于仪表盘dashboards场景。在当前的仓库中Masonry 的实现在 packages/mui-lab/src/Masonry/Masonry.js对应的官方文档与演示代码位于 docs/data/material/components/masonry/masonry.md 及同目录的示例文件。一个最基础的用法如下见 BasicMasonry 示例import Box from mui/material/Box; import { styled } from mui/material/styles; import Paper from mui/material/Paper; import Masonry from mui/lab/Masonry; const heights [150, 30, 90, 70, 110, 150, 130, 80, 50, 90, 100, 150, 30, 50, 80]; export default function BasicMasonry() { return ( Box sx{{ width: 500, minHeight: 393 }} Masonry columns{4} spacing{2} {heights.map((height, index) ( Paper key{index} sx{{ height }}{index 1}/Paper ))} /Masonry /Box ); }核心 API 是columns列数与spacing间距遵循主题的 spacing 体系文档目录下还提供了FixedColumns、FixedSpacing、ResponsiveColumns、ResponsiveSpacing、SSRMasonry服务端渲染等演示说明 Masonry 从一开始就考虑了响应式列数与 SSR 场景。从 Masonry.js 的实现可以看到它基于 Flexbox 通过周期性地插入flexBasis: 100%的「换行占位」元素来实现多列瀑布流而不是依赖绝对定位因此能更好地保持文档流与 SSR 友好性。全新mui/base无样式组件包为多设计系统奠基本季度团队还发布了全新的无样式unstyled / headless组件包mui/base目的是为「用一套逻辑支撑多套设计系统」打基础。无样式组件只负责行为、交互与可访问性不带任何 Material 视觉样式用户可自由叠加任意样式系统。当时团队在 v5 稳定版与无样式组件开发之间艰难地分配精力但依然交付了首批组件。以下是该更新中展示的导入示例Autocomplete行为逻辑抽为useAutocompleteHookimport { useAutocomplete } from mui/base/AutocompleteUnstyled;ButtonuseButtonHookimport { useButton } from mui/base/ButtonUnstyled;Modal无样式 Modal 组件import { ModalUnstyled } from mui/base/ModalUnstyled;Slider无样式 Sliderimport { SliderUnstyled } from mui/base/SliderUnstyled;SwitchuseSwitchHookimport { useSwitch } from mui/base/SwitchUnstyled;Portal将子树渲染到 DOM 其他位置的工具组件import { Portal } from mui/base/Portal;FocusTrap把焦点限制在容器内的可访问性组件import { FocusTrap } from mui/base/FocusTrap;这一「逻辑与样式分离」的分层思想后来演化为独立的 Base UI 产品线。对照当前仓库源码可以更清楚地理解其演进这些行为逻辑如今大多与各自的 Material 组件同仓维护例如Autocomplete 的行为层实现为useAutocompleteHook位于 packages/mui-material/src/useAutocomplete/useAutocomplete.js。其中导出的createFilterOptions就是一个可以直接复用的过滤工厂见同文件 第 25-59 行其配置项包括const filterOptions createFilterOptions({ ignoreAccents: true, // 默认忽略重音/变音符号 ignoreCase: true, // 默认忽略大小写 limit: undefined, // 可选的返回条数上限 matchFrom: any, // any任意位置匹配或 start前缀匹配 stringify: undefined, // 自定义选项转字符串的函数 trim: false, // 是否先 trim 输入值 });Button 的行为层对应 packages/mui-material/src/ButtonBase/useButtonBase.tsModal 与焦点管理分别对应 packages/mui-material/src/Modal/Modal.js 与 packages/mui-material/src/Unstable_TrapFocus/FocusTrap.tsx。也就是说2021 Q3 播下的「headless」种子在后来的版本中一步步生长为整个 MUI 组件分层架构的基石。新的产品介绍页面与产品工作配套官方还上线了全新的 Core 产品页面对应仓库中的 docs/pages/core.tsx用于更清晰地说明 Material UI 的价值主张与适用场景。MUI XData Grid v4.0.0 稳定版发布上一季度 MUI X 团队几乎全力投入 Data Grid目标是把组件打磨到稳定版本本季度同样上线了全新的 X 产品页面对应 docs/pages/x.tsx。需要说明的是MUI X 及其 Data Grid 源码在独立的 mui-x 仓库中演进并不在当前 monorepo 的 packages 目录内因此以下 Data Grid 细节以该更新披露的口径为准。Date Picker暂无重大更新Date Picker 处于「核心组件」与「高级组件」的边界地带本季度团队因全力投入 v5 稳定版和 Data Grid 而无暇推进仅有一些小修小补。官方明确表示将在团队扩充后于 Q1 2022 重启届时投入约一位全职开发者的精力。Data Grid稳定版与工程化改进Data Grid 是本季度 MUI X 的高光部分v4.0.0 正式发布这是 Data Grid 的首个稳定版本同时发布了首个v5-beta以支持 MUI Core v5此后团队将几乎全力转向 v5 发布线。Quick Filter 示例新增 quick-filter 演示 来说明如何实现全文快速过滤官方计划未来提供内置方案演示截图如下修复非惯用 React 模式官方指出此前若干受控属性controllable props的处理并不完全符合惯例本季度按 MUI Core 的标准进行了修正。新增行编辑row editing功能用户可以直接在行内编辑数据对应演示见上文的row-edit.mp4视频素材位于 docs/public/static/blog/2021-q3-update/row-edit.mp4。disableVirtualizationprop用于在非真实浏览器环境例如 jsdom Jest下更容易地测试 Data Grid避免虚拟化带来的兼容负担。onViewportRowsChangeprop作为实现大数据集懒加载lazy loading的第一步让应用能感知当前视口内渲染的行范围。重启关键缺失功能开发打印导出print export与树形数据tree data已在规划中。Design KitsFigma 率先同步 v5本季度也上线了新的 Design Kits 产品页面对应 docs/pages/design-kits.tsx。其中 Figma 套件已升级到 MUI Core v5并纳入了 MUI X 组件同时根据用户在支持频道反馈的小问题做了持续打磨Adobe XD 与 Sketch 套件本季度暂无更新。公司进展增长、新成员与品牌更名为 MUI季度更新的后半部分通常用来同步社区规模与公司状态这里既包含社区增长事实也直接决定了 Q4 路线图的方向。首次公司 Retreat团队在葡萄牙里斯本举办了第一次线下 Retreat参与成员限于未受 COVID-19 旅行限制影响、且自愿出行者到会人数不足公司一半。活动一半时间用于 Hackathon另一半用于冲浪、骑行、酒庄参观与观光。Q2 到 Q3 的增长数据按该更新披露的官方口径2021 Q2→Q3 期间社区与公司保持增长npm 月下载量从 9.1M 增长到 9.9M占 React 生态以react-dom下载量为分母约 22.4% 的市场份额GitHub Star 从 69.1k 增长到 72.1kGitHub 贡献者从 2,223 增长到 2,316平均每天新增约一位贡献者财务支持同比增长 2.99 倍对比 2020 Q3 更新。新成员与团队规模公司本季度迎来一位新成员Benny 此前是团队的第一位实习生现在成为 MUI Core 团队第一位初级开发者其入职公告见 docs/pages/blog/benny-joo-joining.md。至此团队共有 11 名成员。品牌更名为 MUI伴随 v5 发布官方同步发布了新品牌详见 品牌更名说明将名称缩短为MUI。实际上.MuiButton-root这类类名早已使用Mui前缀新名字是对「超越 Material Design」这一方向的进一步确认。官方表示更名想法酝酿已久并曾委托外部机构做过早期设计研究直到确保拿到 mui.com 域名、GitHubmuiorg 与 npmmuiscope 之后才确信新名字可行。Q4 2021 路线图意向季度更新的最后一部分是对未来三个月的规划官方特别说明这是「尽力而为不作保证」。MUI Core加倍投入 v5 打磨先把 v5 做扎实再解决 Select 重构等新的大问题。官方观察到一个重要信号——v4 到 v5 改动很大但此前只有少数社区成员使用 v5最近几周社区反馈大量涌入当时迁移比例约 15%因此需要利用这些反馈修复回归、补齐新 API 文档并调整权衡取舍迁移更多组件到mui/base由 Michał 牵头无样式 Button 已先行落地进展可在 umbrealla issue 中跟踪探索引入 CSS 变量v5 起 Material UI 不再积极支持 IE 11解除这一浏览器限制后可以拥抱更多 Web 平台新能力重启第二套设计系统的研究部分用户不喜欢 Material Design官方希望通过 RFC当时 Material UI 仓库的 discussion #29024推出让大家喜欢的新设计系统执行公开路线图并鼓励社区通过为 GitHub issue 点赞来影响优先级排序。MUI XData Grid计划包括发布打印导出print export、发布树形数据tree data、重构虚拟化以获得更好渲染性能并修复 bug这能解锁列固定 column pinning 与懒加载等新特性、执行公开路线图、并继续以 issue 点赞数驱动优先级。MUI XDate PickerQ4 暂无计划大概率不会推进团队正在扩编预计 Q1 2022 重启投入约一位全职开发者的精力。Design Kits将为 Sketch 和 Adobe XD 发布 v5 套件Figma 已先行完成。虽然 MUI Core v4 与 v5 的视觉差异不大仍需同步设计组件。Company公司层面目标包括在新版 v5 发布后举办 2021 年度开发者调查上一届在 15 个月前、招聘两个新角色专注 low-code 的产品经理与第一位 Developer Advocate、以及为 Q4 的 6-7 位新成员打造出色的入职体验。总结这一季在技术史上的坐标回看 2021 Q3这一季基本奠定了 MUI 此后数年的技术走向v5 作为分水岭从样式引擎到 API 全面换代Masonry 与全新的无样式mui/base组件包相继落地「headless 样式分层」思路成型成为后来 Base UI / 多设计系统支持的技术基础Data Grid 在 MUI X 中达到稳定并明确了打印导出、树形数据、虚拟化重构等后续方向品牌从 Material UI 收敛为 MUI正式宣布超越 Material Design 的长期愿景。对于今天仍在阅读这份季度更新、并在当前 monorepo 中对照源码的开发者而言Masonrypackages/mui-lab/src/Masonry/Masonry.js、useAutocompletepackages/mui-material/src/useAutocomplete/useAutocomplete.js、FocusTrappackages/mui-material/src/Unstable_TrapFocus/FocusTrap.tsx等实现至今仍在仓库中持续演进是理解 MUI 组件架构如何从 v4 走向现代 React 组件库的重要切片。【免费下载链接】material-uiMaterial UI: Comprehensive React component library that implements Googles Material Design. Free forever.项目地址: https://gitcode.com/GitHub_Trending/ma/material-ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考