GitHub 地址:https://github.com/facebook/stylex
官方先容道,StyleX 是一个富有表现力、具有确定性、可靠且可扩展的样式系统。它通过利用编译时 (compile-time) 工具领悟了静态 CSS 的性能和可扩展性。
此外,StyleX 不仅仅是一个基于编译器的 CSS-in-JS 库,它经由精心设计,可以知足大型运用程序、可复用组件库和静态类型代码库的哀求。Meta 旗下多款产品如 Facebook、WhatsApp、Instagram、Workplace、Threads 等都在利用 StyleX 作为其 CSS 样式办理方案。
StyleX 紧张特性
快速:StyleX 在编译时和运行时都具备高效的性能。Babel 转换不会对构建过程产生显著影响。在运行时,StyleX 避免了利用 JavaScript 插入样式的开销,并仅在必要时高效地组合类名字符串。天生的 CSS 经由优化,确保纵然是大型网站的样式也能被浏览器快速解析。
可扩展:StyleX 旨在适应像 Meta 这样的超大型代码库。通过原子构建和文件级缓存,Babel 插件能够处理数万个组件在编译时的样式处理。由于 StyleX 设计为封装样式,它许可在隔离环境中开拓新组件,并期望一旦在其他组件中利用时能够可预测地呈现。
可预测性:StyleX 会自动管理 CSS 选择器的特异性,以确保天生的规则之间不会发生冲突。它为开拓职员供应了一个可靠地运用样式的系统,并确保 “末了运用的样式始终生效”。
类型安全:利用 TypeScript 或 Flow 类型来约束组件接管的样式,每个样式属性和变量都具有完备的类型定义。这有助于提高代码的可读性和可掩护性,同时减少潜在的缺点和冲突。
样式去重:StyleX 鼓励在同一文件中编写样式和组件。这种方法有助于使样式在长期内更具可读性和可掩护性。StyleX 能够利用静态剖析和构建时工具来跨组件去重样式,并删除未利用的样式。
可测试性:StyleX 可以配置为输出调试类名,而不是功能性的原子类名。这可以用于天生快照,以便在对设计进行轻微变动时不会常常变革。通过这种办法,开拓职员可以更轻松地测试和验证样式的精确性,从而提高开拓效率和产品质量。
示例代码
importstylexfrom'@stylexjs/stylex';conststyles=stylex.create({root:{padding:10,},element:{backgroundColor:'red',},});conststyleProps=stylex.apply(styles.root,styles.element);
下面是一个按钮组件的示例代码
importasstylexfrom"@stylexjs/stylex";conststyles=stylex.create({base:{appearance:"none",borderWidth:0,borderStyle:"none",backgroundColor:"blue",color:"white",borderRadius:4,paddingBlock:4,paddingInline:8,},});exportdefaultfunctionButton({onClick,children,}:Readonly<{onClick:()=>void;children:React.ReactNode;}>){return(<button{...stylex.props(styles.base)}onClick={onClick}>{children}</button>);}