vue3入门最全知识点总结(结合codewhy视频总结)

一、基础语法

1.vue中this指向问题

事实上Vue的源码当中就是对methods中的所有函数进行了遍历,取出每一个函数,并且通过bind绑定了this

2.mustache语法

data返回的对象是有添加到Vue的响应式系统中。
data中的数据发生改变时,对应的内容也会发生更新
Mustache中不仅仅可以是data中的属性,也可以是一个JavaScript的表达式(除了判断语句和赋值语句)

3.不常用指令

v-once:用于指定元素或者组件只渲染一次

  • 当数据发生变化时,元素或者组件以及其所有的子元素将视为静态内容并且跳过
  • 该指令可以用于性能优化
  • 父节点绑定v-once,所有的子节点,也是只会渲染一次

v-text:更新元素的 textContent相当于mustache语法

v-html:展示的内容本身是 htm可以解析HTML

v-pre:用于跳过元素和它的子元素的编译过程,显示原始的Mustache标签

  • p跳过不需要编译的节点,加快编译的速度

4.常用指令

v-bind (绑定属性类名样式等)
-(简写冒号),绑定一个或者多个属性,或者向另外一个组件传值

  • 绑定属性(img中的src)

  • 绑定类名(1.普通绑定2.对象形式,对象绑定可以多个绑定3.绑定对象4.绑定方法,从方法中获取)

  • 绑定样式:style=“{‘color’:‘red’,‘font-size’:‘40px’}”
    v-on(绑定时间交互)

  • 简写@符号,@+时间名称

  • 绑定函数 @click=“函数名” 传参 @click=“函数名($event,‘why’)”
    函数(event){
    console.log(event)
    }

  • 修饰符
    在这里插入图片描述
    v-if v-else v-else if(条件渲染)

  • 根据布尔值进行渲染

  • 这三个同时存在只会执行一个

  • 条件为false时,其判断的内容完全不会被渲染或者会被销毁掉在这里插入图片描述
    template元素(结合条件判断语句)

  • 为v-if是一个指令,所以必须将其添加到一个元素上,此时我们渲染div,但是我们并不希望div这种元素被渲染

  • template元素可以当做不可见的包裹元素(类似html中的template标签)

v-show

  • 通过控制CSS中的display进行元素的显示和隐藏

面试题:
一、v-show和v-if的区别
1.用法上,v-if可以和template标签一个使用,v-show不能和v-else一起使用
2.本质上,v-if当条件为false时对应的原生元素根本不会被渲染到DOM 中去
3.开发中,所需要的原生元素需要在显示和隐藏不断的来回切换就要使用v-show,减少重排和重绘,不会频繁切换就使用v-if
二、重排和重绘
1.浏览器关键渲染路径 : DOM\CSSDOM > 生成渲染树 > 通过布局layout步骤确定页面上所有的内容大小和位置 > 确定布局之后绘制(pint)到屏幕上
2. 重排和重绘都是浏览器关键渲染路径的两个节点,浏览器关键渲染路径就是DOM和CSS生成渲染树,然后根据渲染树通过一个布局(layout)步骤来确定页面上的所有内容大小和位置,确定布局之后,将像素绘制到paint屏幕上。
3. 重排是当元素的位置结构发生变动的时候,浏览器重新执行布局这个步骤,来重新确定页面上的内容和大小,确定完之后就会重新绘制到屏幕上,所以重排一定会导致重绘
4.如果元素的位置没有发生变动,仅仅是样式发生变动,此时浏览器的渲染步骤会跳过布局步骤,直接进入绘制步骤,这个过程就是重绘,所以重绘不一定会导致重排。
三、v-for中的key是什么作用?
1.key属性主要用在Vue的虚拟DOM算法,在新旧nodes(节点)对比时辨识VNodes(virtul node 虚拟节点)
2.Vue事实上会对于有key和没有key会调用两个不同的方法;有key,那么就使用 patchKeyedChildren方法,没有key,那么久使用 patchUnkeyedChildren方法,有了key作为表示diff算法的作用更加明显
四、当数据发生变化时,vue是怎么更新节点的?

  1. 我们先根据真实DOM生成一颗virtual DOM,当virtual DOM某个节点的数据改变后会生成一个新的Vnode,然后Vnode和oldVnode作对比(此时就是diff算法),发现有不一样的地方就直接修改在真实的DOM上,然后使oldVnode的值为Vnode。
  2. diff的过程就是调用名为patch的函数,比较新旧节点,一边比较一边给真实的DOM打补丁(添加新节点)
    五、virtual DOM和真实DOM的区别?
    virtual DOM是将真实的DOM的数据抽取出来,以对象的形式模拟树形结构
    VNode和oldVNode都是对象
    在这里插入图片描述

v-for(列表渲染)
在真实开发中,我们往往会从服务器拿到一组数据,并且需要对其进行渲染,v-for类似于JavaScript的for循环,可以用于遍历一组数据。

  • v-for的基本格式是 “item in 数组”: p数组通常是来自data或者prop,也可以是其他方式;
  • item是我们给每项元素起的一个别名,这个别名可以自定来定义
    在这里插入图片描述
    在这里插入图片描述

v-for同时也支持数字的遍历:p每一个item都是一个数字;
在这里插入图片描述
在这里插入图片描述

数组更新检测

vue将数组变更的方法进行了包裹,会触发视图的更新,包裹过的方法有
push()pop()unshift()shift()splice()sort()reverse()
上面的方法会直接修改原来的数组,但是某些方法不会替换原来的数组,而是会生成新的数组,比如 filter()、concat() 和 slice()。

5.虚拟DOM+diff算法

  • 虚拟节点:事实上,无论是组件还是元素,它们最终在Vue中表示出来的都是一个个VNode,VNode的本质是一个JavaScript的对象
  • 虚拟DOM:如果我们不只是一个简单的div,而是有一大堆的元素,那么它们应该会形成一个VNode Tree
  • diff算法:
  • 比较方式:在采取diff算法比较新旧节点的时候,比较只会在同层级进行, 不会跨层级比较
  • 当数据发生改变时,set方法会让调用Dep.notify通知所有订阅者Watcher,订阅者就会调用patch给真实的DOM打补丁,

二、内置Api

1.computed

  • 任何包含响应式数据的复杂逻辑,记住它是一个属性里面绑定的不是方法,方法是methods里面书写,因此在调用computed里面的属性时,不用添加()

主要用于数据的复杂处理逻辑
1.模板语法

  • 模板中存在大量的逻辑,不方便维护
  • 当有多次一样的逻辑,存在大量的代码
  • 多次使用的时候,很多运算也多次运行,没有缓存,损耗性能
    2.methods
  • 我们只需要一个结果的计算,但是都会变成方法的调用
  • 不存在缓存,很多运算也要多次运行

优势:缓存
p这是因为计算属性会基于它们的依赖关系进行缓存;
p在数据不发生变化时,计算属性是不需要重新计算的;
p但是如果依赖的数据发生变化,在使用时,计算属性依然会重新进行计算;

计算属性的setter和getter
只需要一个getter方法即可,所以我们会将计算属性直接写成一个函数。 n 但是,如果我们确实想设置计算属性的值呢?
p这个时候我们也可以给计算属性设置一个setter的方法;

源码如何对setter和getter处理
Vue内部是如何对我们传入的是一个getter,还是说是一个包含setter和getter的对象进行处
理的呢?
p事实上非常的简单,Vue源码内部只是做了一个逻辑判断,判断是否是函数,是函数就直接取get,不是就是会在option中取get和set

侦听器watch

v-model

全局组件和局部组件

打包项目(vuecli,webpack)

SFC:单文件
webpack在node环境中

vite

Webpack是目前整个前端使用最多的构建工具,但是除了webpack之后也有其他的一些构建工具:
p比如rollup、parcel、gulp、vite等等

猜你喜欢

转载自blog.csdn.net/qq_59079803/article/details/125679849