面试官:说说React中引入Css的方式有哪几种?区别?

[[411112]]

本文转载自微信公众号「JS每日一题」,作者灰灰。转载本文请联系JS每日一题公众号。

一、是什么

组件式开发选择合适的css解决方案尤为重要

通常会遵循以下规则:

  • 可以编写局部css,不会随意污染其他组件内的原生;
  • 可以编写动态的css,可以获取当前组件的一些状态,根据状态的变化生成不同的css样式;
  • 支持所有的css特性:伪类、动画、媒体查询等;
  • 编写起来简洁方便、最好符合一贯的css风格特点

在这一方面,vue使用css起来更为简洁:

  • 通过 style 标签编写样式
  • scoped 属性决定编写的样式是否局部有效
  • lang 属性设置预处理器
  • 内联样式风格的方式来根据最新状态设置和改变css

而在react中,引入CSS就不如Vue方便简洁,其引入css的方式有很多种,各有利弊

二、方式

常见的CSS引入方式有以下:

  • 在组件内直接使用
  • 组件中引入 .css 文件
  • 组件中引入 .module.css 文件
  • CSS in JS

在组件内直接使用

直接在组件中书写css样式,通过style属性直接引入,如下:

 
 
 
  1. import React, { Component } from "react"; 
  2.  
  3. const div1 = { 
  4.   width: "300px", 
  5.   margin: "30px auto", 
  6.   backgroundColor: "#44014C",  //驼峰法 
  7.   minHeight: "200px", 
  8.   boxSizing: "border-box" 
  9. }; 
  10.  
  11. class Test extends Component { 
  12.   constructor(props, context) { 
  13.     super(props); 
  14.   } 
  15.   
  16.   render() { 
  17.     return ( 
  18.      
     
  19.        123
 
  •         
  •      
  •  
  •     ); 
  •   } 
  •  
  • export default Test; 
  • 上面可以看到,css属性需要转换成驼峰写法

    这种方式优点:

    缺点:

    组件中引入css文件

    将css单独写在一个css文件中,然后在组件中直接引入

    App.css文件:

      
     
     
    1. .title { 
    2.   color: red; 
    3.   font-size: 20px; 
    4.  
    5. .desc { 
    6.   color: green; 
    7.   text-decoration: underline; 

    组件中引入:

      
     
     
    1. import React, { PureComponent } from 'react'; 
    2.  
    3. import Home from './Home'; 
    4.  
    5. import './App.css'; 
    6.  
    7. export default class App extends PureComponent { 
    8.   render() { 
    9.     return ( 
    10.        
    11.         我是App的标题 
    12.         我是App中的一段文字描述

       
    13.          
    14.       
     
  •     ) 
  •   } 
  • 这种方式存在不好的地方在于样式是全局生效,样式之间会互相影响

    组件中引入 .module.css 文件

    将css文件作为一个模块引入,这个模块中的所有css,只作用于当前组件。不会影响当前组件的后代组件

    这种方式是webpack特工的方案,只需要配置webpack配置文件中modules:true即可

      
     
     
    1. import React, { PureComponent } from 'react'; 
    2.  
    3. import Home from './Home'; 
    4.  
    5. import './App.module.css'; 
    6.  
    7. export default class App extends PureComponent { 
    8.   render() { 
    9.     return ( 
    10.        
    11.         我是App的标题 
    12.         我是App中的一段文字描述

       
    13.          
    14.        
    15.     ) 
    16.   } 

    这种方式能够解决局部作用域问题,但也有一定的缺陷:

    CSS in JS

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

    此功能并不是 React 的一部分,而是由第三方库提供,例如:

    下面主要看看styled-components的基本使用

    本质是通过函数的调用,最终创建出一个组件:

    基本使用如下:

    创建一个style.js文件用于存放样式组件:

      
     
     
    1. export const SelfLink = styled.div` 
    2.   height: 50px; 
    3.   border: 1px solid red; 
    4.   color: yellow; 
    5. `; 
    6.  
    7. export const SelfButton = styled.div` 
    8.   height: 150px; 
    9.   width: 150px; 
    10.   color: ${props => props.color}; 
    11.   background-image: url(${props => props.src}); 
    12.   background-size: 150px 150px; 
    13. `; 

    引入样式组件也很简单:

      
     
     
    1. import React, { Component } from "react"; 
    2.  
    3. import { SelfLink, SelfButton } from "./style"; 
    4.  
    5. class Test extends Component { 
    6.   constructor(props, context) { 
    7.     super(props); 
    8.   }   
    9.   
    10.   render() { 
    11.     return ( 
    12.      
       
    13.        app.js 
    14.         
    15.           SelfButton 
    16.          
    17.       
    18.     ); 
    19.   } 
    20.  
    21. export default Test; 

    三、区别

    通过上面四种样式的引入,可以看到:

    至于使用react用哪种方案引入css,并没有一个绝对的答案,可以根据各自情况选择合适的方案

    参考文献

    https://zh-hans.reactjs.org/docs/faq-styling.html#gatsby-focus-wrapper

    https://mp.weixin.qq.com/s/oywTpNKEikMXn8QTBgITow

    网页标题:面试官:说说React中引入Css的方式有哪几种?区别?
    URL网址:http://www.csdahua.cn/qtweb/news21/352171.html

    网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网

    成都快上网为您推荐相关内容

    网站改版知识

    分类信息网