(四)Vue和React的编码方式对比----样式处理及样式污染

2023-10-27

经过3篇文章后我们可以编写一些简单的HTML结构并渲染只页面,可是前端重要的是什么?是样式,前端是给用户看的,所以样式处理也是很重要的一件事。如果一个前端静态效果都写不好,那多丢人,所以本篇介绍一下React和Vue的样式处理方式,以及一个大坑,样式污染。

一、React样式处理

1.React添加样式的方式 

(1)行内样式

与HTML行内样式写法基本差不多,但是需要注意的是,style接受的是一个对象,也就是说之前我们习惯性的JSX中单大括号{},要更改为双大括号{{}},并且css样式属性也应该包裹引号或者双引号,并且对于中横线写法的样式要改为驼峰方式,这与JS写法是一致的。例如text-align要写成textAlign。

// React/Home
import React from 'react'
import './Home.css'

export default function Home() {
    const programList = [
        {
            id: 1, name: '新闻联播'
        },
        {
            id: 2,
            name: '天气预报'
        },
        {
            id: 3,
            name: '黄金档电视剧'
        }
    ]

    const listStyle = {
        "textAlign": "center",
        "listStyle": "none"
    }

    return (
        <div className='program-list'>
            <h1>节目列表--React</h1>
            <ul style={{ background: '#666666', color: '#ffffff', padding: '10px' }}>
                {
                    programList.map((item) => {
                        return <li style={listStyle} key={item.id}>{item.name}</li>
                    })
                }
            </ul>
        </div>
    )
}

除直接在JSX直接写样式以外,还可以声明一个变量,将样式通过对象方式传给style,例如上段代码的listStyle样式就是利用这种方式引入的。 

注意了注意了!行内样式我们很不推荐,无论是普通的HTML中还是在框架中,这种方式都会使代码可读性变差,不到万不得已最好别用,还是希望大家养成好习惯,你总不会希望看到一个页面里全都是行内吧。会骂街的啊喂

(2)className类名

说了不推荐的style行内样式,下面我们就要介绍一下推荐的方式,那就是类名,之前也提示过,由于在JS中class是一个预留关键词,React中一定要将class写为className

注意看代码的同学肯定注意了,我在开头就引入了Home.css,在React中就是通过import引入的css,我们只需在css文件中编写需要的样式直接引入即可。

/* Home.css */
.program-list{
    background: #bbbbbb;
    padding: 20px;
    width: 400px;
}

2.React样式污染及解决办法

无论是React还是Vue,只要是单页面应用就绕不开一个问题,样式污染,那污染的令人抓狂,处理不好就很容易跟拧水管一样,这修好了那就漏水了,或者谁也不能保证一个项目一个重复的类名都没有对吧,

如果只是针对以上那么简单的结构不用考虑样式污染,但是不会有公司的项目这么简单吧。所以在处理样式污染之前,让我们先来污染一下样式。

// React/App
import React from 'react'
import Home from './views/Home/Home'
import './App.css'

export default function App() {
  return (
    <div>
      React-App
      <ul>
        <li className='list'>123</li>
        <li className='list'>123</li>
        <li className='list'>123</li>
      </ul>
      <Home/>
    </div>
  )
}
/* React/App.css */
.list{
    background: green;
}
// React/Home
import React from 'react'
import './Home.css'

export default function Home() {
    const programList = [
        {
            id: 1, name: '新闻联播'
        },
        {
            id: 2,
            name: '天气预报'
        },
        {
            id: 3,
            name: '黄金档电视剧'
        }
    ]

    return (
        <div className='program-list'>
            <h1>节目列表--React</h1>
            <ul>
                {
                    programList.map((item) => {
                        return <li className='list' key={item.id}>{item.name}</li>
                    })
                }
            </ul>
        </div>
    )
}
/* React/Home.css */
.program-list{
    background: #bbbbbb;
    padding: 20px;
    width: 400px;
}

.list{
    font-size: 18px;
    background: #ff0000;
}

 

 可以看到在App中添加了一个结构,ul和li,类名为list,同时在Home中也将li的类名写为list,会发现Home.css设置的红色背景失效了

(1)module

*.module.css是React为我们提供的一种解决办法,我们只需将css文件后缀改为.module.css然后修改引入方式即可

// React/Home
import React from 'react'
import styles from './Home.module.css'

export default function Home() {
    const programList = [
        {
            id: 1, 
            name: '新闻联播'
        },
        {
            id: 2,
            name: '天气预报'
        },
        {
            id: 3,
            name: '黄金档电视剧'
        }
    ]

    return (
        <div className={styles['program-list']}>
            <h1>节目列表--React</h1>
            <ul>
                {
                    programList.map((item) => {
                        return <li className={styles.list} key={item.id}>{item.name}</li>
                    })
                }
            </ul>
        </div>
    )
}

将Home.module.css引入为一个变量,我们知道在打包的时候webpack会对文件进行压缩并重新命名,这种引入方式可避免css文件打包为全局样式对其他样式进行污染。更改引入方式后也要对应对使用方式进行修改,将style视为一个对象,在使用时需要访问styles内的某一个类名

提示如果类名中存在中横线是不支持直接style.program-list的,需要写为styles['program-list']或styles.programList两种方式。

(2)使用sass或less

如果你的项目中使用了sass或者less,那更简单,则不需要修改为module.css即可直接引入.scss和.less文件,其余使用方式与module一样,在这就不做展示了

二、Vue样式处理

1.Vue添加样式的方式

由于Vue的结构中就带有<style></style>,所以添加样式的方式与正常的HTML完全一致,在这不做展示了,HTML怎么用在这就怎么用。

2.Vue样式污染及解决办法

看似Vue的各个文件都是分开的,而且每个文件也都有自己的<style></style>,肯定有人认为它不会出现样式污染问题,其实不是,它也会出现与React一样的问题,但是他的处理方式则更简单。

(1)scoped

<style scoped>
	.program-list{
		background: #bbb;
	}
</style>

只需在style标签上添加scoped即可,是不是比React简单多了

三、总结

无论是React还是Vue都会出现样式污染的问题,需要自行做样式隔离,但是这两大框架的做法却完全不同。其实导致污染的原因就是因为打包时将文件都打在了一起,样式互相影响,互相捣乱。所以在开发过程中一定要做好相应处理。

在Vue刚刚流行的时候我做项目的时候就遇到了污染问题,那会很菜也查不到什么资料,搞得我自己很想吐。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(四)Vue和React的编码方式对比----样式处理及样式污染 的相关文章

随机推荐

  • Java配置JDK环境变量、自动安装JRE(详细)

    写在前面 什么是JDK JRE 1 JDK 即Java开发工具包 2 JRE 即Java运行环境 一 下载并配置 JDK 1 在官网上找到自己需要下载的java开发工具包JDK 地址如下 Java Downloads Oracle 点击链接
  • 外包实在是太坑了,划水三年,感觉人都废了

    先说一下自己的情况 专科生 19年通过校招进入杭州某个外包软件公司 干了接近3年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了3年的功能测试 已经让我变得不思进取 谈了几年的
  • 互联网背景时代下的大机遇,为什么用nosql

    1 单机MySQL的美好年代 在90年代 一个网站的访问量一般都不大 用单个数据库完全可以轻松应付 在那个时候 更多的都是静态网页 动态交互类型的网站不多 上述架构下 我们来看看数据存储的瓶颈是什么 1 数据量的总大小 一个机器放不下时2
  • Vue页面向嵌套的iframe中的html页面传值

    问题 主页面为 vue 页面中嵌套了iframe 目的是使用视频通话插件 需要向html页面传值 只需两个步骤即可
  • 网页数据解析与提取----XPath

    目录 网页数据解析与提取 XPath XPath 使用 1 什么是XPath 2 准备工作 3 所有节点 4 子节点 5 父节点 6 属性匹配 7 文本获取 8 属性获取 9 属性多值匹配 10 多属性匹配 11 按序选择 12 节点轴选择
  • nuxt服务端渲染技术

    第5章 网站前台 活动与招聘 学习目标 掌握NUXT框架的基本使用方法 完成十次方网站前台的搭建 完成十次方网站前台活动模块的功能 完成十次方网站前台招聘模块的功能 1 服务端渲染技术NUXT 1 1 什么是服务端渲染 服务端渲染又称SSR
  • 我的油画作品

    原创油画作品 樱花 规格 30x40cm 原创油画作品 山峰 规格 30x40cm 原创油画作品 In the garden 规格 80x60cm 其它作品
  • python 图像识别男女_用机器学习来做人脸性别识别

    在传统编程中 图像识别一直是一个难点 虽然人能轻松做到 但是用逻辑来描述这个过程 并转换成程序是很难的 机器学习的出现让图像识别技术有了突破性的进展 卷积神经网络的出现 又使图像识别更上了一次层次 卷积神经网络由一个或多个卷积层和顶端的全连
  • 为了预测股票,我用TensorFlow深度学习了股市数据

    完整源码可在微信公众号 01二进制 后台回复 股市分析 获取 阅读此文前建议先阅读 找对象的过程中 我竟然理解了什么是机器学习 前言 相信大家这几天或多或少的都开始关注到股市了 虽然我还不是很懂里面的一些套路 但是从最近各个公众号的推送里面
  • 无盘服务器chkdsk *: /f)修复命令,巧用CHKDSK命令修复U盘文件或目录损坏问题

    巧用CHKDSK命令修复U盘文件或目录损坏问题 U盘是我们常用的随身移动存储工具 我们平时在使用U盘时难免会出现那么几次 直接拔出U盘 结果导致 U盘的文件或目录损坏且无法读取 U盘里的任何内容都无法打开了 有些朋友认为是磁盘出现坏道直接舍
  • 详解C语言中的stdin,stdout,stderr

    我们在写C程序时经常遇到printf fprintf perror 这些东西到底有什么作用 说到这不得不提及stdin stdout stderr 想想 我们在用C去写文件时的操作 File fp fopen 这个fp就是我们向系统申请的
  • android浏览网页,Android学习之通过Intent实现浏览网页

    大家好 在这里和大家分享我刚刚学到的知识 通过Intent打开网页 首先 打开布局文件中main xml 创建为LinearLayout布局 并且创建一个EditText和Button控件 具体代码如下 android orientatio
  • Jmockit 静态方法mock

    类中存在刷新 初始化等静态方法时 编写单元测试案例 示例 被测试类 public class MethodClass public static void refresh init
  • 智能合约编写之Solidity的设计模式

    前 言 随着区块链技术发展 越来越多的企业与个人开始将区块链与自身业务相结合 区块链所具有的独特优势 例如 数据公开透明 不可篡改 可以为业务带来便利 但与此同时 也存在一些隐患 数据的公开透明 意味着任何人都可以读取 不可篡改 意味着信息
  • 【新手向】如何在npm上发布属于自己的包

    课程内容来自黑马程序员的网课 供博主自己检索知识和复习用 当然如果能帮助到你就更好了 作为一个程序员 你一定下载过各式各样的包来自己的项目实现更多功能 但是如何自己发布包呢 建立属于自己的包 第一步 你需要建立一个包 建立包很简单 只要满足
  • 数据科学与大数据分析之项目2-聚类

    聚类 项目介绍 项目开始 项目介绍 文件TreeDB csv包含258个树种的描述 数据由XX市议会开放空间和环境服务部管理处提供 已提供数据集作为公共空间最佳树木选择合作项目的一部分 假设你是该项目团队的一员 进一步假设你决定参与聚类分析
  • java image 透明_Java 生成半透明照片

    在许多实际运用中 我们常常需要将一张照片 图片 装换成半透明后再显示或保存 下面我们就来看看如何使用Java来生成 转换一张照片到半透明 1 基本思路 1 打开一张图片 BufferedImage imageOpen ImageIO rea
  • php密码输入密码,php打开页面输入密码的代码

    直接复制以下代码到模板 文件或者PHP文件 当打开页面时就得输入密码 写模板内容页时候也可以试用 把密码部分当做变量对应后台写入即可 更多功能自己想象
  • ubuntu下 jupyter登录上了 新建python3连接失败

    近期在使用anaconda jupyter的时候发现自己在新建jupyter文件的时候一直报连接错误 所以为了解决此问题做了如下两种方法 第一步 pip uninstall tornado pip install tornado 5 1 1
  • (四)Vue和React的编码方式对比----样式处理及样式污染

    经过3篇文章后我们可以编写一些简单的HTML结构并渲染只页面 可是前端重要的是什么 是样式 前端是给用户看的 所以样式处理也是很重要的一件事 如果一个前端静态效果都写不好 那多丢人 所以本篇介绍一下React和Vue的样式处理方式 以及一个