重学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") 
    }
  }
};



相关文章
|
前端开发 算法 JavaScript
React-组件-内联样式 和 React-组件-列表渲染优化
React-组件-内联样式 和 React-组件-列表渲染优化
93 0
|
6月前
|
前端开发 JavaScript
react 修改 antdesign 的 组件默认样式
react 修改 antdesign 的 组件默认样式
264 0
|
1月前
|
设计模式 缓存 前端开发
React中样式解决方案有哪些?
本文首发于微信公众号“前端徐徐”,探讨了React开发中的样式管理方法,包括内联样式、常规CSS、CSS-Module、CSS-in-JS及使用CSS框架等五种常见方案,分析了各自的优缺点,帮助开发者根据项目需求选择合适的样式解决方案。
41 0
|
3月前
|
前端开发 Java UED
JSF 面向组件开发究竟藏着何种奥秘?带你探寻可复用 UI 组件设计的神秘之路
【8月更文挑战第31天】在现代软件开发中,高效与可维护性至关重要。JavaServer Faces(JSF)框架通过其面向组件的开发模式,提供了构建复杂用户界面的强大工具,特别适用于设计可复用的 UI 组件。通过合理设计组件的功能与外观,可以显著提高开发效率并降低维护成本。本文以一个具体的 `MessageComponent` 示例展示了如何创建可复用的 JSF 组件,并介绍了如何在 JSF 页面中使用这些组件。结合其他技术如 PrimeFaces 和 Bootstrap,可以进一步丰富组件库,提升用户体验。
56 0
|
3月前
|
前端开发 JavaScript 开发者
【前端革新力】React与CSS-in-JS完美邂逅:从styled-components到emotion,全面解析样式管理新趋势的实战应用与优势剖析!
【8月更文挑战第31天】CSS-in-JS 作为一种新兴的样式管理方式,近年来在前端社区受到广泛关注。它将样式嵌入 JavaScript,实现了样式与逻辑的高度耦合,提升了开发效率并解决了全局样式污染等问题。本文通过具体代码示例,探讨 CSS-in-JS 在 React 开发中的应用,并分享实践心得。首先介绍了 CSS-in-JS 的基本概念,然后详细展示了如何使用 styled-components 和 emotion 这两个流行库创建样式化组件。
164 0
|
5月前
|
JSON 弹性计算 前端开发
函数计算产品使用问题之遇到在自定义运行时部署React项目时遇到样式无法正常加载。一般是什么导致的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
前端开发 JavaScript 安全
【亮剑】探讨了在React TypeScript应用中如何通过道具(props)传递CSS样式,以实现模块化、主题化和动态样式
【4月更文挑战第30天】本文探讨了在React TypeScript应用中如何通过道具(props)传递CSS样式,以实现模块化、主题化和动态样式。文章分为三部分:首先解释了样式传递的必要性,包括模块化、主题化和动态样式以及TypeScript集成。接着介绍了内联样式的基本用法和最佳实践,展示了一个使用内联样式自定义按钮颜色的例子。最后,讨论了使用CSS模块和TypeScript接口处理复杂样式的方案,强调了它们在组织和重用样式方面的优势。结合TypeScript,确保了样式的正确性和可维护性,为开发者提供了灵活的样式管理策略。
75 0
|
6月前
|
前端开发 容器
第十八章 React中的样式模块化处理
第十八章 React中的样式模块化处理
|
前端开发
react解决页面样式冲突(module)
react解决页面样式冲突(module)
|
前端开发
React-组件-外链样式
React-组件-外链样式
51 0
下一篇
无影云桌面