首页 > 其他分享 >vue笔记

vue笔记

时间:2023-06-14 22:11:45浏览次数:46  
标签:nextTick vue 样式 笔记 CSS scoped 组件 css

vue笔记(持续更新)

Vue scoped

scoped解决了什么?

模块化编程下,在对应模块的js中import css,这个css仍然是全局。因此会产生css样式之间污染。scoped可以使css样式只作用于当前组件,解决了组件之间样式污染。给每个style都设置上scoped,相当于实现了样式的模块化。

官方解释:当style有scoped属性时,它的CSS只作用于当前组件中元素(解决样式冲突)


<style scoped>
  @media (min-width: 250px) {
    .list-container:hover {
      background: orange;
    }
  }
</style>

<!-- 
scoped 会自动添加一个唯一的 attribute (如 data-v-hash) 为组件内 CSS 指定作用域,编译的时候 .list-container:hover 会被编译成 .list-container[data-v-hash]:hover。
 -->

例如:


<!-- scoped转译前 -->

<style lang="scss" scoped>
    .test {
        background: blue;
        span{
            color:red;
        }
    }
</style>


<!-- scoped转译后 -->

<style lang="css">
    .test[data-v-ff86ae42] {
        background: blue;
    }
    .test span[data-v-ff86ae42]{
        color: red;
    }
</style>

以前有个人在Vue提了个issue,style的scope使一些必要的css无效,然偶后尤大大亲自耐心的回答了,scope的功能是为了让css更规范,能更简单让css仅对本组件的内容起到作用而不影响其他组件,这样也是为了减少各组件之间的样式黏性,可以避免修改单组件样式而影响到整个项目众多组件的问题。反正能用外联css或公共css文件建立共有的css,所以我是非常建议使用scope但别穿透它

穿透scoped

为什么要穿透scoped?

通过scoped,组件的样式是被封装在组件范围内的,也就是说组件样式对外部组件是不可见的。这种封装样式的机制可以防止样式冲突和作用域污染,提高样式的可维护性。然而某些情况下,我们希望通过组件样式去修改或影响子组件内部的样式。

<template>
  <div class="parent">
    <child-component class="custom-class" />
  </div>
</template>

<style scoped>
.parent /deep/ .custom-class {
  /* 修改子组件的样式 */
}
</style>

使用scoped情况

在模板中使用两次style标签

<!-- 使用两次style分别控制 需要覆盖子组件的样式 和 只能本模块使用样式 -->

<style lang="scss">
    /*添加要覆盖的样式*/
</style>

<style lang="scss" scoped>
    /* 本模块样式 */
</style>

<!-- vue官网明确表示一个vue文件可以包含多个style标签 -->

scoped穿透

<!--使用 >>> 或者 /deep/ 操作符(Sass,less 之类的预处理器无法正确解析 >>>,可以使用/deep/)-->

<style lang="scss" scoped>
.box {
  /deep/ input {
    width: 166px;
    text-align: center;
  }
}
</style>

或者

<style lang="scss" scoped>
.box >>> input {
    width: 166px;
    text-align: center;
  }
</style>

不使用scoped情况

  1. 使用全局样式:将样式定义在全局的CSS文件中,这样定义的样式将会被整个应用所共享。

  2. 使用CSS Modules:CSS Modules允许您在每个组件中定义独立的、局部作用域的样式,但仍然可以通过类名选择器来影响其他组件的样式

  3. 使用CSS预处理器:大多数CSS预处理器(如Sass、Less)都支持全局样式和变量。

总结

scoped穿透是一种非正式的语法,不是标准的CSS规范,因此在使用时要谨慎考虑其兼容性和易读性。

总而言之,scoped穿透在一定程度上打破了组件样式的封装性,允许父组件的样式影响到子组件内部的样式,但需要注意合理使用,避免引入样式的混乱和复杂性。

Vue nextTick

为什么会存在nextTick

vue采用异步更新策略来提高性能,当修改Vue实力数据时,Vue并不会立即更新真实DOM,而是讲DOM更新操作推入一个队列中,在下一个事件循环周期中进行统一的更新。这样做可以有效地合并多次数据变更,避免频繁的DOM操作。然而,这也导致了一个问题:在某些情况下,我们需要在数据更新之后立即访问更新后的DOM。

nextTick作用

通过使用nextTick方法接收一个回调函数作为参数,并讲这个回调函数延迟到下次DOM更新循环结束后执行,确保DOM已经被更新。这样就能够安全地操作更新后的DOM元素,而不用担心获取到旧的值或状态。

nextTick实现原理

将传入的回调函数包装成异步任务,异步任务又分微任务和宏任务,为了尽快执行所以优先选择微任务;

nextTick 提供了四种异步方法 Promise.then、MutationObserver、setImmediate、setTimeout(fn,0)

这四种异步可以阅读nextTick源码解读

标签:nextTick,vue,样式,笔记,CSS,scoped,组件,css
From: https://www.cnblogs.com/RatherBe/p/17481491.html

相关文章

  • 「学习笔记」Garsia-Wachs 算法
    前言本文的资料和图片均来自\(\texttt{OI-Wiki}\)。引入题目描述在一个操场上摆放着一排\(N\)堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的\(2\)堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将\(N\)堆石子合......
  • vue-基础
    项目的注意事项:1.template必须是一个且必须有一个跟元素2.导入的时候webpack默认导出的整个组件整个组件包含了data言外之意整个组件包含了你所要导出的对象3.一个vue的实例只能挂载一个标签。1.插值表达式:{{数据}}在data里面data(){return{..}}注意点:1.......
  • 未经授权访问测试【补天学习笔记】
    又是从补天大哥拿的经验,赶紧收藏记录下来。。因为我之前是在burpsuite里怼着接口去掉cookie测未经授权访问的,基本算是灰盒测试。这次补天的报告,是从黑盒的角度来测试,确实是不同的思维点,值得学习!大哥的报告顺序是:后台管理登陆地址→后台主页地址→fuzz......
  • VUE&Element
    VUE&Element今日目标:能够使用VUE中常用指令和插值表达式能够使用VUE生命周期函数mounted能够进行简单的Element页面修改1,VUE1.1概述接下来我们学习一款前端的框架,就是VUE。Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写。我们之前也学习过后端的框......
  • uniapp vue.config.js配置chunk-vendors.js文件拆分
    constpath=require('path')functionresolve(dir){returnpath.join(__dirname,dir);}constCompressionPlugin=require('compression-webpack-plugin')consthtmlWebpackPlugin=require('html-webpack-plugin')htmlWebpackPl......
  • Hadoop学习笔记——Hadoop常用命令
    Hadoop下有一些常用的命令,通过这些命令可以很方便操作Hadoop上的文件。1、查看指定目录下的内容语法:hadoopfs-ls文件目录2、打开某个已存在的文件语法:hadoopfs-cat文件地址[|more][]表示的是可选命令3、将本地文件存到Hadoop语法:hadoopfs-put本地文件地址Hadoop目录4......
  • vue整合axios
    一、整合axios(底层支持ES6新的对象:Promise)①安装axios参照官网:http://axios-js.com/docs/index.html直接安装(不指定版本的话),会安装最新的版本,最新的axios版本只支持vue3,所以要指定axios的vue2的版本npminstall--saveaxios@0vue-axios@2②配置main.jsok③确认a......
  • vue+ elementUI
    1、在dos窗口下运行命令npmielement-ui-S安装elementui2、配置elementui3、画面代码展示登录页面<template><div><!--:是v-bind的简写--><el-formref="loginForm":model="form":rules="rules"label-width="80px&q......
  • python装饰器函数学习笔记
    函数也是一个对象,并且这个对象可以被赋值给变量,所以,我们可以通过变量调用该函数defnow():...print('2015-3-25')...f=nowf()2015-3-25函数对象有一个__name__属性,可以拿到函数名字:now.name'now'f.name'now'现在如果我们要增强now()函数的功能,比如,在......
  • python返回函数学习笔记
    内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力deflazy_sum(*args):defsum():ax=0forninargs:ax=ax+nreturnaxreturn......