React中如何编写CSS?(三)

85 阅读2分钟

认识CSS in JS

官方文档也有提到过CSS in JS这种方案:

“CSS-in-JS” 是指一种模式,其中 CSS 由 JavaScript 生成而不是在外部文件中定义;

注意此功能并不是 React 的一部分,而是由第三方库提供;

React 对样式如何定义并没有明确态度;

在传统的前端开发中,我们通常会将结构(HTML)、样式(CSS)、逻辑(JavaScript)进行分离。

但是在前面的学习中,我们就提到过,React的思想中认为逻辑本身和UI是无法分离的,所以才会有了JSX的语法。

样式呢?样式也是属于UI的一部分;

事实上CSS-in-JS的模式就是一种将样式(CSS)也写入到JavaScript中的方式,并且可以方便的使用JavaScript的状态;

所以React有被人称之为 All in JS;

当然,这种开发的方式也受到了很多的批评:

Stop using CSS in JavaScript for web development

hackernoon.com/stop-using-…

认识styled-components

批评声音虽然有,但是在我们看来很多优秀的CSS-in-JS的库依然非常强大、方便:

CSS-in-JS通过JavaScript来为CSS赋予一些能力,包括类似于CSS预处理器一样的样式嵌套、函数定义、逻辑复用、动态修改状态等等;

虽然CSS预处理器也具备某些能力,但是获取动态状态依然是一个不好处理的点;

所以,目前可以说CSS-in-JS是React编写CSS最为受欢迎的一种解决方案;

目前比较流行的CSS-in-JS的库有哪些呢?

styled-components

emotion

glamorous

目前可以说styled-components依然是社区最流行的CSS-in-JS库,所以我们以styled-components的讲解为主;

安装styled-components:

ES6标签模板字符串

ES6中增加了模板字符串的语法,这个对于很多人来说都会使用。

但是模板字符串还有另外一种用法:标签模板字符串(Tagged Template

Literals)。

我们一起来看一个普通的JavaScript的函数:

正常情况下,我们都是通过 函数名() 方式来进行调用的,其实函数还有另外一种

调用方式:

如果我们在调用的时候插入其他的变量:

模板字符串被拆分了;

第一个元素是数组,是被模块字符串拆分的字符串组合;

后面的元素是一个个模块字符串传入的内容;

在styled component中,就是通过这种方式来解析模块字符串,最终生成我们想要 的样式的

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情