首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

再见,CSS-in-JS

如果在许多元素上使用css prop,Emotion 的内部组件会让 React 开发者工具很乱,如图所示: 劣势 频繁插入 CSS Rules 会使浏览器做很多额外工作。...运行时 CSS-in-JS 库的工作方式是组件渲染时插入新样式规则,这在根本上和性能是对立的。 用 CSS-in-JS,更容易出错,特别是在使用 SSR 和组件库时。...渲染内与渲染外的序列化 样式序列化是指 Emotion 将你的 CSS 字符串或对象样式转换为可以插入文档的 Pure CSS 字符串的过程。...近来,我们看到越来越多在编译时将样式转换为 Pure CSS 的 CSS-in-JS 库,包括: Compiled Vanilla Extract Linaria 这些库声称提供类似运行时 CSS-in-JS...如这里所示,这个库仍在你的 React 树中插入一些样板组件。这和运行时 CSS-in-JS 一样,会搞乱 React 开发者工具。 总结 感谢阅读本文对运行时 CSS-in-JS 的深度剖析。

46650

为什么和 CSS-in-JS 说拜拜

如果使用普通的CSS,则可以将所有.css文件放在 src/styles 目录中,而所有的React组件都在 src/components 中。随着应用程序的大小的增长,很难判断每个组件使用哪些样式。...渲染内的序列化与渲染外的序列化 样式序列化是指Emotion将CSS字符串或对象样式转换为可以插入文档的普通CSS字符串的过程。...你可以得到CSS模块的局部范围的样式和Sass强大的构建时间功能,而且基本上没有运行时间成本。这就是为什么Sass模块将成为我们未来的通用样式解决方案。...最近,我们看到越来越多的CSS-in-JS库在编译时将样式转换为普通CSS。...众所周知,当应用许多元素时,内联样式会导致次优的性能 该库仍然将模板组件插入你的React树中,如图所示。这将使React DevTools变得混乱,就像运行时的CSS-in-JS一样。

2.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    前端编译

    而随着前端越来越复杂,开发前端时一些新手段新特性越来越多,Vue、React、NodeJS、ES6新语法等变成了基本手段。 甚至 CSS 也可以使用 Sass/Less语法来进行编写。...而前端的 ES6 转化到 ES5,Less/Sass 转换为 css,require依赖打包,代码压缩混淆都可以看做是语言的转换,更是提升了应用程序的性能。 因此,这些操作是 “编译”。...前端编译 前端编译主要功能 将框架(如 vue/react) 根据其特性语法进行模板解析、语法转换为常规 js。...将 es6、es7 等高版本 js 转换为所需要版本(如es5)的js语法 将 less、sass、css3 转换为 css 将图片压缩转换(如雪碧图、base64等) 将字体文件合并 将 js/css...在实际开发中,由于h函数的参数比较复杂,实际开发中通过使用webpack的vue-loader插件能将vue单文件组件(以.vue结尾的文件)转换为h函数所需要的参数

    99510

    Taro

    微信小程序原生方式开发起来太费劲,遂想用React开发微信小程序 延伸 在React业务代码转微信小程序代码这个最初的需求实现之后,发现依靠同样的转换思路可以适配多端,即从1对1延伸到1对n: ?...: Taro 以 微信小程序组件库 为标准,结合 jsx 语法规范,定制了一套自己的组件库规范 相关package如下: @tarojs/components:支持Web环境Nerv组件库,通过编译替换为目标平台的原生标签...,运行时的环境区分仅备不时之需 四.结构 从设计上看,Taro方案分为3层: 业务层(类React代码) --------------------- 转换层(JSX转微信小程序) -----------...---------- 适配层 组件库(适配n端原生组件) 运行时框架(适配n端API能力) --------------------- 此外,还有 生态:UI库、路由、数据流管理、CSS预处理等...我们只能通过穷举的方式,将常用的、React 官方推荐的写法作为转换规则加以支持,而一些比较生僻的,或者是不那么推荐的写的写法则不做支持,转而以 eslint 插件的方式,提示用户进行修改 具体地,JSX

    1.7K50

    CSS Modules VS. styled-components,哪个才是解决 CSS 不足之处的更好方案?

    Sass 和 Less 都属于 CSS 预处理,即在 CSS 的基础上进行了扩展,增加了一些编程的特性,并且将 CSS 作为目标生成文件。...具体而言,CSS Modules 通过工程化的方法,可以将类名编译为哈希字符串,从而使得每个类名都是独一无二的,不会与其他的选择器重名,由此可以产生局部作用域。...因为 styled-components 做的只是在 runtime 把 CSS 附加到对应的 HTML 元素或者组件上,它完美地支持所有 CSS。 媒体查询、伪选择器,甚至嵌套都可以工作。...当你定义你的样式时,实际上是在创建一个普通的 React 组件,该组件附加了你的样式。Styled-Components 使用了 stylis 自动为 Css 规则自动加上前缀。...将 CSS 样式字符串注入页面: 将CSS 注入上面提到的页面 head的 元素,紧跟在组件的注释标记之后: /* sc-component-id

    8K73

    前端-在2018年你应该知道的9个关于CSS组件化的JS库

    一个特别有趣的概念是在CSS中使用JS将CSS抽象到组件级别本身,使用JavaScript以声明性和可维护的方式描述样式。...Radium提供标准接口和抽象,用于处理内联样式无法轻松容纳的CSS功能。 Radium允许您将样式与React组件捆绑在一起,将javascript,html和样式结合在一起。...Aphrodite将所有内容转换为类并使用class属性。 在4Kstars,这个项目有或没有React工作,都一并提供诸如注入风格的Dom,自动前缀样式等功能。 4. Emotion ? ?...基于glam 库及其理念,我们的想法是通过使用babel和PostCSS解析样式来编写CSS时保持运行时性能。核心运行时为2.3kb,React支持为4kb。 5....这是一个很好的转换SCSS(Sass)的教程。还可以查看React-JSS,它是React的JSS集成。

    2.6K40

    奇怪的知识又增加了,梳理一遍都有哪些loader

    前情回顾 上篇文章简单介绍了一下loader API,那么除了我们常用的css-loader,sass-loader,style-loader,url-loader,vue-loader之外,还有哪些loader...HTML 导出为字符串,需要传入静态资源的引用路径 pug-loader 加载 Pug 和 Jade 模板并返回一个函数 markdown-loader 将 Markdown 编译为 HTML react-markdown-loader...使用 markdown-parse 解析器将 Markdown 编译为 React 组件 posthtml-loader 使用 PostHTML 加载并转换 HTML 文件 handlebars-loader...在将图标字体或 CSS 动画应用于 SVG 时,此功能非常实用。...DOM 中 css-loader 加载 CSS 文件并解析 import 的 CSS 文件,最终返回 CSS 代码 less-loader 加载并编译 LESS 文件 sass-loader 加载并编译

    1.4K20

    VSCode 前端插件推荐

    String Converter 功能:在字符串中输入$触发,将字符串转换为模板字符串 vscode-pigments 插件名:vscode-pigments 功能:实时预览设置的颜色...插件名:Vue 3 Snippets 基本必备:很多Vue的代码段,很方便开发 React 开发推荐 React Style Helper 插件名:React Style Helper 功能:在...React中更快速地编写内联样式,并对 CSS、LESS、SASS 等样式文件提供强大的辅助开发功能 自动补全 跳转至样式和变量定义位置 创建 JSX/TSX 的行内样式 预览样式及变量内容 行内样式自动补全...,同时支持 SASS 变量的跳转及预览。...Initial Value 插件名:vscode-icons 功能:显示每个CSS属性的初始值,当光标停留在css属性时 画板作图 插件名:Draw.io Integration 功能:

    1.7K40

    React SSR 简介与 Next.js 使用入门

    访问数据库,拿到数据然后将数据填充到 HTML 模板上,比如 Node.js 中的 pug 模板引擎、ejs 模板引擎等都是服务端渲染的模板。...使用 React 做服务器渲染,主要是通过下面这几个方法来实现: renderToString: 将组件转化为 HTML 字符串,生成的 HTML 的 DOM 会带有额外的属性,比如最外层的 DOM 会有...renderToStaticMarkup: 同样将组件转换成 HTML 字符串,但是生成的 HTML 的 DOM 不会有额外的属性,从而节省 HTML 字符串的大小。...使用这几个方法都是可以将 React 组件转化成 HTML 字符串,而前端不变的去写 React 组件即可。这种前后端共用一套代码的方式被称为同构。...getInitialProps 方法只能用于页面组件上,不能用于子组件上。

    9.8K51

    2022,VSCode 前端插件推荐

    String Converter 功能:在字符串中输入$触发,将字符串转换为模板字符串 vscode-pigments 插件名:vscode-pigments 功能:实时预览设置的颜色 Parameter...3 Snippets 基本必备:很多Vue的代码段,很方便开发 React 开发推荐 React Style Helper 插件名:React Style Helper 功能:在React中更快速地编写内联样式...,并对 CSS、LESS、SASS 等样式文件提供强大的辅助开发功能 自动补全 跳转至样式和变量定义位置 创建 JSX/TSX 的行内样式 预览样式及变量内容 行内样式自动补全,同时支持 SASS 变量的跳转及预览...ES7 Reactsnippets 插件名:ES7 React/Redux/React-Native/JS snippets 功能:很多React的代码段,很方便开发 vscode-styled-components...Initial Value 插件名:vscode-icons 功能:显示每个CSS属性的初始值,当光标停留在css属性时 画板作图 插件名:Draw.io Integration 功能:在VSCode

    1.2K10

    如何构建你的第一个 Vue.js 组件

    你可以很容易地用 Vue.component 定义一个全局组件。 问题在于,这样做需要权衡使用字符串模板,没有 CSS 支持,也没有构建步骤(所以没有预处理器)。...Vue.js会将您的组件附加到index.html中的#app元素。如果检查HTML,则应该看不到#app元素的符号:Vue.js将其替换为组件。 旁注:你有没有注意到你甚至不需要重新加载页面?...通过将组件转换为 kebab-case(例如:MyComponent 变成 ),可以将组件用作自定义 HTML 标记。我们不需要在组件内嵌入任何东西,所以我们使用了一个自闭合标签。...React 具有样式化的组件,Vue.js 具有 scoped styling CSS。它可以让你编写特定组件的 CSS,而不必拿出一些技巧来保持它的包含结构。...我们使用类型检查来确保将正确类型的数据传递给组件。这将对我们忘记使用动态语法来传递非字符串值的错误特别有用。我们也确保通过要求它填写 grade 属性。

    2.5K50

    [技术地图]

    这个由 flatten 函数实现. flatten 函数会将嵌套的 css(数组形式)递归 concat 在一起,将 StyledComponent 组件转换为类名引用、还有处理 keyframe 等等...实际上 styled-components 会进行两次 flatten,第一次 flatten 将能够静态化的都转换成字符串,将嵌套的 css 结构打平, 只剩下一些函数,这些函数只能在运行时(比如在组件渲染时...)执行;第二次是在运行时,拿到函数的运行上下文(props、theme 等等)后, 执行所有函数,将函数的执行结果进行递归合并,最终生成的是一个纯字符串数组....将 css rule 扁平化,得到一个纯字符串数组。...---- 技术地图 CSS 相关 @emotion/unitless 判断属性值是否需要单位 css-to-react-native 将 css 转换为 ReactNative style 属性 ✨stylis

    2.1K20

    DarkMode(2):深色模式解决方案——css颜色变量实现Dark Mode

    中每个文件或模块都是有效的 JS 模块,因此我们还需要 css-loader 将CSS样式文件转换为变成 JS 模块。...这时我们已经有了生成的 dist/style.js,在这个模块中只是将样式导出为字符串并存放于数组中,我们需要 style-loader 将该数组转换成 style 标签。...) 方法可以用来查询 指定的媒体查询字符串解析后的结果。...CSS 变量的作用域与 CSS 的"层叠"规则一致,优先级最高的声明生效。所以当 body 上存在 "dark" 类名时,:root .dark 会生效,否则 :root 生效。.../page.json"), // CSS 变量,可以支持多个      }    }  }; 现在的 Web、App 项目大都引用第三方开源组件库,组件库一般会使用 Sass、Less 等 CSS 预处理器定义颜色变量作为组件的基础色值

    3.5K10

    在React中引用CSS方式及写法大全

    引用方式 第一种:内联方式 可以使用变量或者传统的内联方式 优点: 只生效于当前组件 缺点: 可能产生大量重复代码 import react, { Component } from "react";...[name] .css文件 优点: 复用性强 缺点: 存在样式覆盖问题,不是只生效于当前组件 import React, { Component } from "react"; import TestChidren... ); } } export default Test; 第三种:在组件中引用[name] .scss文件 安装node-sass就可以...,因为有个node-sass,scss文件才能在node环境上编译成css文件。...modules会默认给类名加上一个唯一标识符(哈希字符串),从而实现类名不重复 2、class名称需要使用驼峰命名,不支持 '-' 等连接符 命名规则: xxx.module.css 引入方式:import

    22910

    React.js基础知识总结一

    React是FaceBook(脸书)公司研发的一款JS框架(MVC) React是一款框架:具备自己开发的独立思想(MVC:Model View Controller) -> 划分组件开发 ->...-> 最后为了优化性能(减少HTTP请求次数),我们需要把JS或者CSS进行合并压缩 -> webpack来完成以上页面组件合并、JS/CSS编译加合并等工作 React.js怎么运行(一般不会自己配置...、路由、组件等都是放到这里面(包括需要编写的CSS或者图片等) index.js 是当前项目的入口文件 .gitignore Git提交时候的忽略提交文件配置项 package.json 当前项目的配置清单...一套 ->webpack一套 ->其它的 有sass css 处理器,最新版本有 的处理内容(项目中使用less,我们需要自己额外的安装) “scripts”: { “start”: “react-scripts...,把安装的webpack及配置文件都集成在了react-scripts模块中,放到了node_modules中 但是真实项目中,我们需要在脚手架默认安装的基础上,额外安装一些我们需要的模块,例如:react-router-dom

    1.9K30
    领券