前端基础之VUE(四)

2023-12-10  本文已影响0人  若雨千寻

1.35 reactive与ref的区别?

Vue3 中的 ref 和 reactive 是 Vue3 中用于数据管理的两种不同的响应式 API。

ref 用于创建一个包装简单值的响应式引用,例如一个数字、字符串或对象。当 ref 创建一个响应式引用时,它返回一个对象,该对象具有一个 value 属性,该属性指向实际值。当 ref 返回的对象中的 value 属性更改时,组件将自动重新渲染。

reactive 用于创建一个响应式对象,该对象可以包含多个属性和嵌套属性。当使用 reactive 创建响应式对象时,返回的对象是一个代理对象,该对象具有与原始对象相同的属性,并且任何对代理对象属性的更改都将触发组件的重新渲染。

1.36 $route 和 $router 的区别?

$route 是“路由信息对象”,包括 path,params,hash,query,fullPath,matched,name 等路由信息参数

$router 是“路由实例”想要导航到不同URL 对象包括了路由的跳转方法,钩子函数等。

1.37 v-on可以监听多个方法吗?

可以一个元素绑定多个事件的两种写法,一个事件绑定多个函数的两种写法,修饰符的使用。

<a>doSomething </a>

在method方法里面分别写两个事件;

<button @click="a(),b()">点我ab</button>

1.38 v-model的使用?

v-model实现双向绑定的语法糖,常用于表单与组件之间的数据双向绑定.

V-model的原理:

可看出v-model绑定在表单上时,v-model其实就是v-bind绑定value和v-on监听input事件的结合体

组件上的双向绑定(原理)

v-model绑定在组件上的时候做了以下步骤

1.39 vue遇到的坑,如何解决的?

应用场景

当父组件 axjos 获取数据,子组件使用 props 接收数据时,执行 mounted 的时候 axjos 还没有返回数据,而且 mounted 只执行一次,这时 props 中接收的数据为空

解决方案:在对应组件中判断数据的长度

1.40 说说vue中的diff算法?

diff算法 当data发生改变 会根据新的数据生成一个新的虚拟dom ,新的虚拟dom和旧的虚拟dom进行对比,这个对比的过程就是diff算法。

Vue2 是全量 Diff(当数据发生变化,它就会新生成一个DOM树,并和之前的DOM树进行比较,找到不同的节点然后更新。);Vue3 是静态标记 + 非全量 Diff(Vue 3在创建虚拟DOM树的时候,会根据DOM中的内容会不会发生变化,添加一个静态标记。之后在与上次虚拟节点进行对比的时候,就只会对比这些带有静态标记的节点。)

使用最长递增子序列优化对比流程,可以最大程度的减少 DOM 的移动,达到最少的 DOM 操作

1.41 vue中怎么设置全局变量和全局组件?

在main.js中

app.config.globalProperties.$key = '' //定义全局变量

import {getCurrentInstance} from 'vue';

setup(){

const { proxy } = getCurrentInstance();

console.log(proxy.\$key);

}

1.45 vue中给对象添加新属性时,界面不刷新怎么办?

vue2的响应式原理使用的是对象代理去实现的,对象代理中有一个get和set方法,当我们访问对象的时候就会触发get方法,当我们对对象中的值进行修改时会触发set方法。但是当我们给对象添加一个新的属性时对象代理是检测不到的,所以就会出现直接给对象添加属性响应式不生效的问题。

所以在vue中可以使用this.$set(对象名,‘属性名’,属性值)的方法去给对象添加属性,或者使用Vue.set(对象名,‘属性名’,属性值)的方法进行添加,添加之后的属性就带有响应式了

1.46 vuex中的辅助函数怎么使用?

vuex的辅助函数有4个

1.47 刷新浏览器后,Vuex的数据是否存在?如何解决?

原因:因为 store 里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例,store里面的数据就会被重新赋值初始化。

localStorage 或者就是sessionStorage

下载持久化存储插件。比如使用:vuex-along 的实质也是将 vuex 中的数据存放到 localStorage 或者 sessionStroage 中,只不过这个存取过程组件会帮我们完成,我们只需要用vuex的读取数据方式操作就可以了

1.48 vue路由跳转传参的方式有哪些?

params传参(显示参数)

params传参(不显示参数)

query 传参

VUE几种路由跳转几种方式的区别

1.50 单页面应用和多页面应用区别及优缺点?

单页面:顾名思义,只有一个页面。一般是一个主页和多个路由页面组成。

优点:

缺点:

多页面(Multi Page Application——MPA):有多个HTML页面,跳转的时候是从一个html页面跳到另一个页面。

优点:

缺点:

1.51 EventBus注册在全局上时,路由切换时会重复触发事件,如何解决呢?

1.52 自定义指令详解

为什么需要自定义指令:因为vue是MVVM模式,只需要关注于数据和业务逻辑,不需要关注DOM的操作,但是有时候面对一些特殊的业务需求时,需要进行DOM的操作,这个时候就需要进行自定义指令。

自定义局部指令:在options api选项中的directives中设置。局部自定义指令是一个对象,对象的属性是自定义指令的名称,对象中属性的值是自定义指令的钩子函数对象

自定义全局指令:在app的directive方法。参数一(name):自定义指令的名称。参数二(hooks):自定义指令的钩子函数对象

1.53 slot是什么?有什么作用?原理是什么?

slot又名插槽,是Vue的内容分发机制,组件内部的模板引擎使用slot元素作为承载分发内容的出口。插槽slot是子组件的一个模板标签元素,而这一个标签元素是否显示,以及怎么显示是由父组件决定的。

slot又分三类,默认插槽,具名插槽和作用域插槽。

实现原理:

当子组件vm实例化时,获取到父组件传入的slot标签的内容,存放在vm.$slot中,默认插槽为vm.$slot.default具名插槽为vm.$slot.xxx,xxx 为插槽名

当组件执行渲染函数时候,遇到slot标签,使用slot中的内容进行替换,此时可以为插槽传递数据,若存在数据,则可称该插槽为作用域插槽

1.54 $nextTick的使用

用法:将回调延迟到下次DOM更新循环之后执行。在修改数据之后立即使用它,然后等待DOM更新。它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例上。

$nextTick() 的应用场景

在vue的生命周期 created() 钩子函数中进行 dom 操作,一定要放在 $nextTick() 函数中执行。在 created() 钩子函数执行的时候 DOM 其实并未进行任何渲染,而此时进行 DOM 操作无异于徒劳,所以此处一定要将 DOM 操作的代码放进 nextTick() 的回调函数中。

mounted() 钩子函数,因为该钩子函数执行时,所有的 DOM 挂载和 渲染都已完成,此时在该钩子函数中进行任何 DOM 操作都不会有问题

在数据变化后要执行某个操作,而这个操作需要随数据改变而改变DOM结构时,这个操作都是需要放置 $nextTick() 的回调函数中。

上一篇 下一篇

猜你喜欢

热点阅读