Material UI 2021 Q2 季度更新深度解读:v5 样式引擎、Grid 新能力与数据网格进展 Material UI 2021 Q2 季度更新深度解读v5 样式引擎、Grid 新能力与数据网格进展【免费下载链接】material-uiMaterial UI: Comprehensive React component library that implements Googles Material Design. Free forever.项目地址: https://gitcode.com/GitHub_Trending/ma/material-ui本文基于仓库内官方季度更新文档 docs/pages/blog/2021-q2-update.md发布于 2021-07-12由 Olivier Tassinari 与 Matt Brookes 撰写整理展开。该文档记录的是 Material UI 在 v5 正式版发布前最后一个冲刺季度的关键进展包括styled()样式引擎全量落地、sxprop 推广、Grid 组件在 JSS 时代无法实现的新能力、codemod 自动迁移工具链以及 MUI X 数据网格Data Grid迈向稳定版前的功能打磨。这些能力大多至今仍是 Material UI 的核心 API在仓库的源码与文档中可以直接验证本文一并给出对应路径供深入查阅。一、这个季度发生了什么OverviewQ2 20212021 年 4 月至 6 月是 Material UI 版本大迭代的关键窗口。文档将其进展分为四条主线Core components核心组件v5.0.0-beta.0 成功发布、新样式引擎推广到全部组件、Grid 获得新能力Advanced components高级组件即 MUI X以 Data Grid 为主的重度打磨Design Kits设计资源包Figma、Adobe XD、Sketch 三套设计稿的同步完善Company团队与公司OKR 目标管理体系的引入与团队扩张以及下一季度Q3的路线图意向。原文档正文使用了大量锚点目录对应的具体内容在仓库内均有迹可循。下文按此骨架逐节展开并在原文档基础上结合当前仓库源码补充实现层面的细节。二、核心组件v5 的关键一跃2.1 v5.0.0-beta.012 个月冲刺的里程碑文档给出的核心背景是Material UI v5 从v4 之后便停止新特性开发、全力转向 v5历时约 12 个月后终于发布了v5.0.0-beta.0。原文档记录的一组统计数字可以说明这轮重构的投入规模3,475 个 pull requests5,092 次 commit超出 PR 数的部分来自合并 material-ui-pickers 仓库带入的历史398 位新贡献者相当于平均约 4 名全职开发者的持续投入核心团队 社区连续发布 38 个 alpha 版本维持每周一版的发布节奏。也就是说beta.0 之前用了 38 个 alpha 版本来收敛 API 与内部实现这是一次典型的「先破坏、后稳定」的大版本演进。对今天阅读本仓库的开发者而言v5 的命名空间演进material-ui/core→mui/material等历史包袱都可以从 packages/mui-codemod 中看到后续沉淀的完整迁移工具链。2.2 新样式引擎styled()与sxprop文档指出v5 将样式引擎全部切换到以styled()API 为基础并引入sxprop 用于一次性one-off定制。社区对styled()的熟悉程度使得这一 API 成为被多种样式库styled-components、emotion、stitches、goober 等共同实现的抽象层——Material UI 则通过adapter适配器机制让同一套组件可以跑在不同底层引擎之上。这一设计与仓库现状一致Material UI 组件的样式基础位于 packages/mui-material/src/styles 系列模块官方同时维护了 mui-styled-engine默认基于 emotion与 mui-styled-engine-sc基于 styled-components两个同级包用来承载「可替换引擎」的抽象样式系统本身的 API 沉淀在 packages/mui-system/srcsxprop、breakpoints、spacing 等核心工具都在这里实现。在集成层面仓库的 styled-components 集成文档 完整解释了如何将 emotion 换成 styled-components。这一点对仍在使用旧样式库或需要统一团队技术栈的项目尤其重要。2.3 codemod CLIv4 → v5 的自动迁移新引擎与大量 API 调整必然带来升级摩擦为此 v5 引入了codemod CLI以及初期的 17 个转换脚本文档发布时点。如今仓库中的 codemod 工具已经成长为一个独立包 mui/codemodpackage.json中声明其 bin 为./src/codemod.js底层依赖jscodeshift、postcss等标准工具。在 packages/mui-codemod/src/codemod.js 中可以看到 CLI 的真实行为位置参数codemod与paths前者是转换脚本名后者是要处理的文件/目录查找顺序先在src/transform、src/transform.js等位置解析 transformer找不到时报错并提示查阅 README默认处理js,ts,jsx,tsx,json扩展名默认 parser 为tsx自动忽略node_modules与 CSS 文件提供--drydry run不落盘、--print结果输出到 stdout、--packageName自定义 re-export 包名时替换默认的mui/material等选项除 JS 变换外还通过 postcss 支持对 CSS 文件的补充迁移。典型用法摘自 READMEnpx mui/codemodlatest v5.0.0/preset-safe src --parserflow其中v5.0.0/preset-safe相当于一次串行应用该版本下全部安全迁移的组合入口README 中的 v5.0.0 一节对其有专门说明。仓库 packages/mui-codemod/src/v5.0.0 目录下如今已沉淀远超当年 17 个的转换脚本覆盖组件属性改名如component-rename-prop、button-color-prop、chip-variant-prop、导入路径top-level-imports、mui-replace、optimal-imports、主题 APIcreate-theme、theme-spacing、theme-breakpoints、以及从 JSS 向 emotion 迁移的jss-to-styled、jss-to-tss-react等每个脚本都配有.test目录与.actual.js/.expected.js用例来锁定转换结果例如 jss-to-styled.test 中包含大量组件化改造前后的对照样例。想要了解 codemod 是什么以及它能自动完成哪些重构的开发者可以从这一目录的用例快速获得直观认识。2.4 Slider 外观升级贴合 Material Design 指南v5 还对 Slider 组件进行了视觉刷新使其更贴合 Material Design 规范同时把旧观感保留在sizesmall下。这一点在仓库文档中有完整对应——Slider 文档 的 Sizes 一节写道For smaller slider, use the prop sizesmall。也就是说新默认尺寸采用了新规范需要「原来的样子」则显式指定小尺寸。2.5 Grid 组件新引擎解锁的四种布局能力这是本季度更新中代码含量最高、也最能体现「引擎升级带来能力跃迁」的部分。原文档明确说明以下能力是JSS 时代无法解决、由新样式引擎解锁的。1行/列方向独立间距row column spacingGrid container rowSpacing{1} columnSpacing{2} /rowSpacing与columnSpacing允许横向、纵向间隙分别配置而不再只有一个笼统的spacing。2所有 prop 的响应式取值Grid container spacing{{ xs: 2, md: 3 }} /spacing可以接收一个以断点为 key 的对象实现按屏宽切换间距。3自定义列数不再写死 12 栅格Grid container columns{16}4基于 CSS Grid 的替代实现Box displaygrid gridTemplateColumnsrepeat(12, 1fr) gap{2} Box gridColumnspan 8 Itemxs8/Item /Box Box gridColumnspan 4 Itemxs4/Item /Box Box gridColumnspan 4 Itemxs4/Item /Box Box gridColumnspan 8 Itemxs8/Item /Box /Box以上能力在仓库中可以交叉验证Grid 组件源码 中rowSpacing、columnSpacing、columns、spacing等都以ResponsiveStyleValue...类型暴露即支持断点对象columns的默认值是 12spacing的默认值是 0direction仅支持row/row-reverse垂直布局建议改用StackGrid 文档 用专门章节Row and column spacing、Responsive values、Columns 等逐一演示这些用法Grid 测试 覆盖了布局计算与响应式行为是理解组件边界的最佳入口。2.6 Link 组件的可访问性改进v5 同时改进了 Link 的无障碍表现。原文档配图展示的核心变化是链接在句子中通过下划线与其他文本区分——这解决了默认情况下「颜色相近的链接无法被色弱/视障用户识别」的经典无障碍问题。这一语义变更同样留下了迁移痕迹codemod 包中 link-underline-hover 转换 专门把依赖「hover 才有下划线」的旧用法改为新默认配套测试目录link-underline-hover.test记录了一组前后对照正好印证 v5 中 Linkunderline相关默认行为的变化。三、高级组件MUI X进展文档称该季度精力主要投在Data Grid上目标是让组件在大量 bug 修复与行为收敛后尽快达到稳定版同时提及位于核心组件与高级组件边界地带的Date Picker主要处理视觉 bug、componentsprop 可定制性与技术债。3.1 Data Grid 的关键动作破坏性变更收敛团队持续推进 breaking changes以便公共 API 定型后再发布稳定版文档明确「组件已足够好到可用于生产环境且许多开发者已在生产使用但希望在 stable 承诺前把 API 做对」单元格编辑模式cell edit mode新增内置编辑能力文档以演示视频呈现同时修复了对使用 portal 的组件如 Select、Autocomplete在编辑模式下的支持内置列类型新增single select单列类型与boolean布尔列类型性能优化文档记载客户端排序与过滤在大型数据集上快 2–3 倍滚动体验改善并对自定义单元格的渲染父节点增加 memo 逻辑以减少不必要的重渲染同时识别出更多待优化的点留待后续参考文档建设从 TypeScript 源码定义含注释描述半自动生成 API 参考文档例如GridColDef的全部属性说明本地化在 Q1 引入多语言特性后本季度社区贡献了 15 个内置 locale。需要说明的是Data Grid 属于独立的 MUI X 代码库不在当前 material-ui 仓库快照内因此上述细节以原季度文档的表述为准仓库侧无法提供对应源码佐证。3.2 single select 列类型效果原文档附有一张 single select 列类型的使用示意配文指向一个可运行的 CodeSandbox 示例该图展示了在表格单元格内以「下拉单选」形式直接编辑的运行效果——这正是 3.1 中「内置列类型 单元格编辑」两个特性叠加的产物。四、Design Kits设计与代码对齐为了让设计师与开发者「说同一种语言」设计资源包也在本季度做了对齐式迭代Figma综合设计师反馈打磨细节并引入深色模式dark mode支持努力让设计稿贴近 React 组件的真实行为减少设计师与开发之间的沟通偏差Adobe XD修复性能问题并整体打磨Sketch新增深色模式支持并整体打磨。这些工作对应的是使用官方设计稿进行「高保真还原」的工作流当设计稿里出现 Material UI 深色主题时开发侧同样可以通过主题的palette.mode配置实现一致效果相关主题能力可查阅 packages/mui-material/src/styles 与 mui-system 的调色板实现。五、公司动态5.1 OKR 目标管理Q1 曾引入「handbook」以应对团队扩大后的沟通渠道爆炸N(N-1)/2 问题。Q2 更进一步引入了OKR 方法论目标是对齐团队目标、改进成功度量方式并为脱离日常 PR/issue 管理的大项工作创造空间。文档同时点名了几个备选方案如 Shape Up 式方法、YouTube 规模的 ritual 实践最终选择 Google 的 OKR playbook。5.2 Q1→Q2 的增长数据来自原公告原文档作为官方季度更新公布了如下增长数字此处照录并注明来源为原公告本身npm 月下载量从8.6M 增长到 9.1M文档称其在 React 生态中的份额为 21.03%对比五年前为 6.68%GitHub Star 数从67.2k 增长到 69.1kGitHub 贡献者从2,141 增长到 2,223平均每天新增约一位贡献者。5.3 四位新成员团队新增四位成员分别对应四条业务线JunSiriwat Kunaporn——负责第二套设计系统的实现MichałMichał Dudak——牵头 unstyled components无样式组件方向的探索Danilo——Lead Designer提升整体设计水平Flavien——工程师拥有设计系统与复杂 2D JavaScript 渲染引擎经验加入 X 团队攻坚 Data Grid。这些在仓库中同样留有痕迹Siriwat 与 Michał 的加入公告分别归档于 siriwat-kunaporn-joining.md 与 michal-dudak-joining.md。文档还提到公司正在多个岗位招人岗位列表归档在 docs/pages/careers 下。六、Q3 2021 路线图意向Roadmap Intent原文档对 Q3 的目标表述为「尽力而为不打包票」分四条线Company在超过十人的规模下继续打磨流程与分工启动品牌重塑试图与 Material Design 的强绑定做出区隔由 Danilo 负责设计、Jun 负责代码开放并招满 4 个岗位加强 X 团队并启动新产品线探索Core components让 v5 稳定版尽快发布当时 v5-alpha 下载量约为 v4 的 1%目标季度末达到 25% 社区完成迁移消除 v4→v5 升级摩擦提前支持 React 18当时团队核心成员已加入 React Working Group把更多组件迁移到无样式内核当时已新增 Switch 的无样式版本就第二套设计系统做概念验证执行公开路线图上的全部条目Advanced components发布 Data Grid 第一个稳定版在稳定性季度后恢复关键特性研发当时已有单个 issue 超过 1,000 个 Design Kits处理设计师痛点与 bug 报告在数千名客户中做问卷以确定改进优先级如 token 变量在设计稿与代码之间的切换插件、更多上下文示例等。七、从这份季度更新中得到的启示站在今天的视角回看这份文档几乎预告了 Material UI 之后几年的技术主航道全部可以在此仓库得到印证引擎标准化是 API 革新的前提——styled()sx的统一让 Grid 拿到了响应式、行列间距等此前做不到的表达力见 Grid.tsx破坏性变更必须配套迁移工具——codemod CLI 从「17 个脚本起步」长成了独立的 mui/codemod 包且每个转换都有 actual/expected 用例兜底稳定版前的克制——Data Grid 宁愿在 bug 修复与 API 收敛上花一个季度也不提前许下稳定的承诺设计与实现要同步演进——深色模式同时落地到 Figma/Sketch 设计稿与 React 组件正是「一条产品线、一套语言」的体现。如果需要回溯 v4→v5 迁移的全部细节推荐按顺序阅读本仓库中的 mui-codemod 使用文档、Grid 组件文档 以及 v5 各迁移脚本测试目录而想了解本季度更新前因Q1与后续发展仓库中的其他官方季度博客如 2021-q1-update.md提供了完整的时间线。【免费下载链接】material-uiMaterial UI: Comprehensive React component library that implements Googles Material Design. Free forever.项目地址: https://gitcode.com/GitHub_Trending/ma/material-ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考