前端UI组件设计系统【免费下载链接】styled-system⬢ Style props for rapid UI development项目地址https://gitcode.com/gh_mirrors/st/styled-system点击查看免费下载本指南围绕styled-system/should-forward-prop展开讲解如何借助 Emotion 的shouldForwardProp选项把 Styled System 的样式 props如space、color、typography从传给底层 HTML 元素的 props 中过滤掉避免这些非 DOM 属性泄漏到真实 DOM 上。读完本文你将掌握该工具包的默认用法、createShouldForwardProp自定义扩展方案、其底层过滤原理以及它与其他 Styled System 工具如styled-system/props的分工关系。为什么需要过滤样式 propsStyled System 的核心工作方式是把space、color、typography这类样式函数作为插值传给styled()包装的组件由它们在渲染时把 props 转换成 CSS。以 emotion/styled 为例const Box styled(div)(space, color, typography)但问题在于space、color等函数只是读取props 并生成样式它们并不会阻止这些 props 被继续透传给底层的div。于是渲染出的 DOM 元素上会出现类似div colortomato mx2这样的非标准属性它们不是合法的 HTML 属性会污染 DOM在 React 中部分未知属性甚至会产生警告会与元素的className、href、id等真实 HTML 属性语义混淆。Emotion 提供的shouldForwardProp选项正是解决这个问题的官方机制它接收(propName) boolean返回true时该 prop 会被透传给底层元素返回false时则该 prop 会被拦截只用于样式计算而不会出现在 DOM 上。styled-system/should-forward-prop就是Styled System 官方预置好的shouldForwardProp它知道 Styled System 的全部样式 props 名单开箱即用地帮你完成过滤。安装使用 npm 安装也可用 yarnnpm i styled-system/should-forward-prop该包的运行时依赖见 package.json为emotion/is-prop-valid用于判断一个 prop 是否为合法 HTML 属性emotion/memoize对过滤结果做记忆化缓存避免重复计算styled-system提供各样式函数以聚合出完整的 props 名单。如果你尚未安装 Emotion还需要一并安装npm i emotion/styled基本用法默认的 shouldForwardProp最简单的接入方式是把包默认导出的shouldForwardProp直接传给emotion/styled的配置对象import styled from emotion/styled import { space, color, typography } from styled-system import shouldForwardProp from styled-system/should-forward-prop const Box styled(div, { shouldForwardProp })( space, color, typography )这样定义的Box组件中space对应的m、mx、px、py等 props以及color对应的color、bg、opacitytypography对应的fontSize、fontWeight、lineHeight等都会被用于生成样式同时它们不会被透传到 DOM 上渲染出的元素只保留className等真实 HTML 属性。它的过滤判定逻辑见 源码 src/index.jsexport const createShouldForwardProp props { const regex new RegExp(^(${props.join(|)})$) return memoize(prop isPropValid(prop) !regex.test(prop)) }即对每个 prop 名做两个判断isPropValid(prop)来自emotion/is-prop-valid检查它是否是合法的 HTML 属性如href、id、className——只有合法 HTML 属性才允许透传!regex.test(prop)检查它是否不在Styled System 的 props 名单中——名单内的样式 props 一律拦截。两者同时满足才透传因此href这类真实属性被放行而color、mx这类样式 props 被拦截。默认覆盖的 props 范围默认导出实际上是createShouldForwardProp(props)的调用结果其中props来自对全部样式函数执行compose后取得的all.propNames见 src/index.js覆盖了 Styled System 的 13 大类样式函数space、typography、color、layout、flexbox、border、background、position、grid、shadow、buttonStyle、textStyle、colorStyle。底层原理可追溯到 packages/core/src/index.js 的compose实现它把各 parser 的config合并后重建 parser而createParser会为 parser 挂上parse.propNames Object.keys(config)见 packages/core/src/index.js最终所有样式 props 名汇总为一份名单。也就是说只要你的组件用到了这 13 大类中的任意 props默认的shouldForwardProp都能识别并拦截。自定义 props 过滤createShouldForwardProp当组件里还存在不属于 Styled System 的额外自定义 props时例如下面的d、x默认过滤名单覆盖不到它们它们会原样透传到 DOM。此时可以使用createShouldForwardProp手动扩展名单import styled from emotion/styled import { space, color } from styled-system import { createShouldForwardProp, props } from styled-system/should-forward-prop const shouldForwardProp createShouldForwardProp([ ...props, d, x ]) const Box styled(div, { shouldForwardProp })(props ({ display: props.d, fontWeight: props.x ? bold : null, }), space, color )这里的关键点...props先展开官方维护的完整 Styled System props 名单确保原有的拦截行为不被破坏d、x是追加的自定义 props 名它们会被一并纳入正则名单^(props|d|x)$中从而被拦截、不落入 DOMcreateShouldForwardProp返回的仍是一个符合(propName) boolean签名的函数可直接放进emotion/styled的配置对象里。注意props是从包中具名导出的import { createShouldForwardProp, props } from styled-system/should-forward-prop它与默认导出是同一个名单。如果你不需要额外扩展直接用默认导出即可需要扩展时再通过createShouldForwardProp([...props, ...自定义名单])重建一份。底层实现细节记忆化缓存createShouldForwardProp的返回结果用memoize来自emotion/memoize包了一层见 src/index.js。由于 Emotion 会对组件树中的每个 props 逐个调用shouldForwardProp缓存可以避免对相同的 prop 名反复执行正则匹配与isPropValid校验对高频渲染场景有明显收益。与 styled-system/props 的分工仓库中还有一个功能相近的包 styled-system/props它用同一份正则名单const regex new RegExp(^(${all.propNames.join(|)})$)提供了omit剔除样式 props 后返回剩余 props与pick只取样式 props两个纯数据工具。两者的定位不同styled-system/should-forward-prop面向 Emotion 的渲染管线作为shouldForwardProp选项在渲染前拦截styled-system/props面向手动处理 props 对象的场景比如自行封装组件时先omit掉样式 props 再展开。如果你在 styled-components 中使用styled-components 也支持shouldForwardProp配置其自身对 HTML 属性已有透传过滤策略但本包的默认过滤名单仍可结合使用以确保 Styled System 样式 props 不泄漏。仓库中的 emotion.js 与 styled-components.js 测试展示了两种环境下 Styled System 组件的渲染行为可作为集成参照。测试验证与行为保证包的测试位于 test/index.js用最直接的方式锁定了行为import shouldForwardProp, { props } from ../src test(returns true for valid HTML attributes, () { const should shouldForwardProp(href) expect(should).toBe(true) }) props.forEach(prop { test(returns false for Styled System ${prop} prop, () { const should shouldForwardProp(prop) expect(should).toBe(false) }) })两组用例分别保证合法的 HTML 属性如href会被放行返回true不会因为过滤而丢失真实 DOM 属性名单内的每一个 Styled System 样式 props 都会被拦截返回false。这组测试同时证明了props导出名单与默认导出的过滤行为在实现上是一致的任何新增样式 props 都会被props.forEach用例自动覆盖回归风险极低。使用建议与边界该包定位是配合Emotion的shouldForwardProp选项使用README 标题即表明 with Emotions shouldForwardProp option在 styled-components 中需要确认其自身的透传策略与你的过滤需求一致。createShouldForwardProp传入的自定义 props 会被拼进同一个正则因此自定义 props 名应避免与 HTML 属性同名否则可能被一并拦截。如果你的组件只用到了少部分样式函数使用完整名单13 大类带来的过滤成本可以忽略——正则匹配结果已被memoize缓存且仅在渲染路径上执行。本文所有代码均来自当前仓库 packages/should-forward-prop/README.md源码细节可继续阅读 src/index.js 与 test/index.js。结语styled-system/should-forward-prop用不到十行的核心实现src/index.js为 Styled System 与 Emotion 的集成补齐了最后一块拼图既保留 props 驱动的样式能力又让 DOM 保持干净。默认导出开箱即用createShouldForwardProp支持按需扩展配合emotion/memoize的缓存在生产级 UI 组件库中可以直接落地使用。赞分享前端UI组件设计系统【免费下载链接】styled-system⬢ Style props for rapid UI development项目地址https://gitcode.com/gh_mirrors/st/styled-system点击查看免费下载相关推荐使用 styled-system/props 从组件 props 中高效分离样式属性使用 styled system/props 从组件 props 中高效分离样式属性 导读 styled system/props 是 Styled Sys前端UI组件设计系统http-api-design-ZH_CN实战从零开始设计符合行业标准的REST APIhttp api design ZH_CN实战从零开始设计符合行业标准的REST API HTTP API设计指南http api design ZH_CN前端UI组件设计系统styled-components v7 内置 prop 过滤逻辑彻底移除 emotion/is-prop-valid 运行时依赖styled components v7 内置 prop 过滤逻辑彻底移除 emotion/is prop valid 运行时依赖 本文基于仓库 .chan前端UI组件上一篇告别跨平台编译噩梦用Cross实现零配置Rust游戏开发 下一篇MCP应用安全测试终极指南从单元测试到集成测试的完整方法论创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Ajenti Date Time 插件指南:服务器时区管理、时间设置与 NTP 同步实战 后端运维 【免费下载链接】ajenti Ajenti Core and stock plugins 项目地址: https://gitcode.com/gh_mirrors/aj/ajenti 点击查看 免费下载 Ajenti 的 datetime 插件为管理面板提供了一个"Date & time"系统模块,它能够实时展示服务器当前… · 2026/9/27 8:54:21
青岛信息推广网站避坑指南:3个实战案例拆解真实报价 青岛信息推广网站避坑指南:3个实战案例拆解真实报价 别再看那些花里胡哨的模板站了,丑且难用,根本接不住客户。 我在青岛做了十年建站,见过太多甲方拿着两三千块的“成品站”去推广,结果连搜索引擎都抓不住权重。… · 2026/9/27 9:30:03
奉化首页的关键词优化速查手册 奉化首页关键词优化怎么选才不踩坑 做奉化本地网站的老板们,是不是经常盯着后台数据发愁?明明花钱做了个站,访客进来转一圈就走了,连个询盘电话都没有。很多人第一反应是:我的网站是不是太丑了?或者说,模板网站太丑不够用,是不是换个高颜值的模板就能… · 2026/9/27 9:29:57
织梦5.5模版安装上去为什么打开网站图片不能显示教程怎么选 织梦5.5图片不显?对比评测3种修复方案,避开域名服务器坑 域名服务器配置搞不懂,织梦5.5模板装完图片全裂开,这简直是新手建站最崩溃的瞬间。别急着骂服务器,十有八九是路径没对上或者权限没给够。我做了组对比评测,把三种主流修复方案扒了个底朝… · 2026/9/27 9:29:57
After Effects (AE)2026超详细保姆级安装教程 一、为什么一定要升级AE2026?
1. 3D功能大爆发,不用再依赖C4D了
以前做个简单的3D立方体,还要先开C4D建模再导进AE里,来回切换软件简直是噩梦。这次2026版本直接把3D功能拉满了,内置了立方体、球体这些基础的参数化模… · 2026/9/27 9:29:51
Python 比较运算符与逻辑运算符的返回值 1. 比较运算符
常见的比较运算符:
> < > < !在 Python 的常见基础用法中,比较运算符返回的是 bool 类型:
3 > 2 # True
5 4 # False
10 ! 8 # True比较运算符 → 返回 bool2. 逻辑运算符
Python 中… · 2026/9/27 9:29:45
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01