重学React之样式

简介: 重学React之样式

下面这篇文章,我们来介绍一下,react中支持的样式写法


内联样式


内联样式是官方推荐的一种css样式的写法:


  • style 接受一个采用小驼峰命名属性的 JavaScript 对象,,而不是 CSS 字符串。


  • 并且可以引用state,props中的状态来设置相关的样式。 内联样式的优点:


  • 内联样式, 样式之间不会有冲突


  • 可以动态获取当前state,props中的状态 内联样式的缺点:


  • 写法上都需要使用驼峰标识


  • 某些样式没有提示


  • 大量的样式, 代码混乱


  • 某些样式无法编写(比如伪类/伪元素) 所以官方依然是希望内联合适和普通的css来结合编写。


普通的css


普通的css我们通常会编写到一个单独的文件,之后再进行引入。这样的编写方式和普通的网页开发中编写方式是一致的。


如果我们按照普通的网页标准去编写,那么也不会有太大的问题。但是组件化开发中我们总是希望组件是一个独立的模块,即便是样式也只是在自己内部生效,不会相互影响。但是普通的css都属于全局的css,样式之间会相互影响。这种编写方式最大的问题是样式之间会相互层叠掉。


css modules


css modules并不是React特有的解决方案,而是所有使用了类似于webpack配置的环境下都可以使用的。但是,如果在其他项目中使用个,那么我们需要自己来进行配置,比如配置webpack.config.js中的modules: true等。


React的脚手架已经内置了css modules的配置:


  • .css, .less, .scss 等样式文件都修改成 .module.css, .module.less, .module.scss 等。之后就可以引用并进行使用。通过模块.class即可。 css modules确实解决了局部作用域的问题,也是很多人喜欢在React中使用的一种方案。


网络异常,图片无法展示
|


// about/index.js
    import React, { PureComponent } from 'react'
    import style from './style.module.css'
    export default class About extends PureComponent {
      render() {
        return (
          <div id={style.styleColor} className={style.font}>
            About
          </div>
        )
      }
    }


// about/style.module.css
    #styleColor {
      color: blue;
    }
    .font {
      font-size: 50px;
    }


// home/index.js
    import React, { PureComponent } from 'react'
    import style from './style.module.css'
    export default class Home extends PureComponent {
      render() {
        return (
          <div id={style.styleColor} className={style.font}>
            Home
          </div>
        )
      }
    }


// home/style.module.css
    #styleColor {
      color: red;
    }
    .font {
      font-size: 30px;
    }


网络异常,图片无法展示
|


但是这种方案也有自己的缺陷:


  • 引用的类名,不能使用连接符(.home-title),在JavaScript中是不识别的。


  • 所有的className都必须使用{style.className} 的形式来编写。


  • 不方便动态来修改某些样式,依然需要使用内联样式的方式。


css in js


CSS-in-JS 是指一种模式,其中 CSS 由 JavaScript 生成而不是在外部文件中定义。注意此功能并不是 React 的一部分,而是由第三方库提供。 React 对样式如何定义并没有明确态度。


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


当然,这种开发的方式也受到了很多的批评:hackernoon.com/stop-using-…


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


  • styled-components


  • emotion


  • glamorous 目前可以说styled-components依然是社区最流行的CSS-in-JS库,所以下面介绍一下styled-components。


具体用法请查看官网


就我个人而言css-modules更适合我,可能css in js没有使用过。但是对于方便程度,依旧是css in js更方便。使用什么就看没有人的习惯了。


antd修改主题


请查看官网


配置路径别名


依旧需要合并webpack配置,所以我们还是需要看## antd修改主题,然后再craco.config.js中设置webpack配置。


或者直接执行npm run eject调出webpack.config.js文件。


const {resolve}  = require("path")
module.exports = {
  webpack: {
    alias: {
      "@": resolve(__dirname, "src"),
      "components": resolve(__dirname, "src/components"),
      "assets": resolve(__dirname, "src/assets") 
    }
  }
};



相关文章
|
4月前
|
前端开发 JavaScript
react 修改 antdesign 的 组件默认样式
react 修改 antdesign 的 组件默认样式
|
6月前
|
前端开发 算法 JavaScript
React-组件-内联样式 和 React-组件-列表渲染优化
React-组件-内联样式 和 React-组件-列表渲染优化
53 0
|
3月前
|
前端开发 容器
第十八章 React中的样式模块化处理
第十八章 React中的样式模块化处理
|
8月前
|
JavaScript 前端开发
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之Dialog表单提交,ICon样式事件,删除功能5
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之Dialog表单提交,ICon样式事件,删除功能5
27 0
|
5月前
|
前端开发
react解决页面样式冲突(module)
react解决页面样式冲突(module)
|
6月前
|
前端开发
React-组件-外链样式
React-组件-外链样式
29 0
|
8月前
|
前端开发
前端项目实战拾陆-react-admin路由样式替换antd
前端项目实战拾陆-react-admin路由样式替换antd
46 0
|
8月前
|
前端开发
前端项目实战壹佰贰拾react-admin+material ui-react-admin之SimpleList中rowStyle设置样式
前端项目实战壹佰贰拾react-admin+material ui-react-admin之SimpleList中rowStyle设置样式
32 0
|
8月前
|
JavaScript 前端开发
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之Dialog表单提交,ICon样式事件,删除功能5
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之Dialog表单提交,ICon样式事件,删除功能5
32 0
|
8月前
|
前端开发
前端项目实战叁拾陆-​react-admin+material ui-侧边栏样式设定重置
前端项目实战叁拾陆-​react-admin+material ui-侧边栏样式设定重置
48 0