vue基础面试题(day02)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Vue2.0 和 Vue3.0 有什么区别?

vue经历从2.0到3.0更新之后,简⽽⾔之就是变得更轻,更快,使⽤起来更加⽅便,每⼀次的版本迭代都是对上⼀个版本的升级优化.
数据绑定的原理发生了变化:

vue2 的双向数据绑定是利⽤ES5 的⼀个 API ,Object.definePropert()对数据进⾏劫持 结合 发布订阅模式的⽅式来实现的。
vue3 中使⽤了 es6 的 ProxyAPI 对数据代理,相比与vue2,使用proxy API 优势有:
1、defineProperty只能监听某个属性,不能对全对象进行监听;
2、可以省去for in 、闭包等内容来提升效率(直接绑定整个对象即可);
3、可以监听数组,不用再去单独的对数组做特异性操作,vue3可以检测到数组内部数据的变化。
	双向数据绑定的核心是数据变化侦测及依赖收集。

建立数据data发生了变化

vue2是把数据放入data中,vue3就需要使用一个新的setup()方法

是否支持碎片:

	vue2.0	只允许有一个根标签,vue3.0支持碎片化,可以拥有多个根节点。

Composition API

Vue2 与vue3 最大的区别是vue2使用**选项式api**,对比**vue3组合式api。**旧得选项式api在代码里分割了
不同得属性:data,computed,methods等;新的合成型api能让我们使用方法来分割,相比于旧的API使
用属性来分组,这样代码会更加简便和整洁。这种就叫做组合式Api,这样可以将同一逻辑的内容写到一起。

生命周期:

	Vue3 在组合式API中使用生命周期钩子时需要先引入,而 Vue2 在选项API(Options API)
	中可以直接调用生命周期钩子。

在这里插入图片描述
父子传参不同,setup()函数特性

1--- setup()函数接收两个参数:props、context(包含attrs、slots、emit)
2--- setup函数是处于生命周期beforeCreated和created俩个钩子函数之前
3--- 执行setup时,组件实例尚未被创建(在setup()内部,this不会是该活跃实例得引用,即不指向vue
实例,Vue为了避免我们错误得使用,直接将setup函数中得this修改成了undefined)
4--- 与模板一起使用时,需要返回一个对象
5--- 因为setup函数中,props是响应式得,当传入新的prop时,它将会被更新,所以不能使用es6解
构,因为它会消除prop得响应性,如需解构prop,可以通过使用setup函数中得toRefs来完成此操作。
6--- 父传子,用props,子传父用事件 Emitting Events。在vue2中,会调用this$emit然后传入事件名和
对象;在vue3中得setup()中得第二个参数content对象中就有emit,那么我们只要在setup()接收第二个
参数中使用分解对象法取出emit就可以在setup方法中随意使用了。
7--- 在setup()内使用响应式数据时,需要通过 .value 获取

main.js文件不同

vue2中我们可以使用pototype(原型)的形式去进行操作,引入的是构造函数
vue3中需要使用结构的形式进行操作,引入的是工厂函数

Vue3带来了什么改变?

  • 性能的提升:

     打包大小减少了
     初次渲染更快了,更新更快了
     内存减少了。
    
  • 响应式系统升级 (defineProperty变更为proxy)

     	响应式核心实现从通过Object.defineProperty变为proxy,解决了definProperty无法监听对象新增属性以及无法跟踪数组
     	索引以及数组length的问题
    
  • 提供新的写代码的方式:Composition API

     vue2.x中,所有的数据都在 data 方法中定义返回,方法定义在 methods 下面,并通过 this 调用
     vue3.x中,所有的代码逻辑将在 setup 方法中实现,包括 data 、 watch 、 computed 、 methods 、 hooks ,
     并且不再有 this。
     vue3.x setup 方法在组件生命周期内只执行一次,不会重复执行。
     相比vue2.x中基于 OPTIONS 配置的方式,vue3.x基于组合式API的方式语义没有2.x清晰,2.x中 data 、
     methods 、 computed 、 watch 等都通过不同的scope区分开,看起来很清晰,3.x都放在 setup 方法
     中,对代码组织能力会有更高的要求。
     **vue3.x的 reactive 和 ref 取代了vue2.x中的 data 数据定义**
    
  • 更好的Typescript支持

  • 实例化:

     2.x使用构造函数 new Vue(...) 创建实例,3.x使用 createApp 函数创建实例;
     2.x所有属性方法和设置都绑定到全局 Vue 对象上,3.x改为绑定到 vue 实例下,收紧了scope;
     3.x移除了 Vue.config.productionTip 和 Vue.config.keyCodes 配置属性
    

reactive与ref的区别?

  • 从定义数据角度对比:

    ref用来定义:基本类型数据
    reactive用来定义对象(或数组)类型数据
    备注:ref也可以用来定义对象(或数组)类型数据, 它内部会自动通过reactive转为代理对象

  • 从原理角度对比:

    • ref通过Object.defineProperty()getset来实现响应式(数据劫持)。
    • reactive通过使用Proxy来实现响应式(数据劫持), 并通过Reflect操作源对象内部的数据。
  • 从使用角度对比:

    • ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value
    • reactive定义的数据:操作数据与读取数据:均不需要.value

计算属性computed和watch以及methods的区别?

methods,watch 和 computed 都是以函数为基础的,但各自却都不同.
作用机制上:

watch 和 computed 都是以 Vue 的**依赖追踪机制**为基础的,当某一个数据发生变化的时候,
所有依赖这个数据的相关数据,自动发生变化,也就是自动调用相关的函数去实现数据的变动
methods 里面是用来定义函数的,它需要**手动调用**才能执行。而不像 watch 和 computed 那样,
“自动执行”预先定义的函数,相比于 watch / compute;methods **不处理数据逻辑关系**,只提供可调用的函数,
类似储存函数的一个库。

从性质上

1.methods里面定义的是函数,你显然需要像"fuc()"这样去调用它(假设函数为fuc)。

2.computed是计算属性,事实上和和data对象里的数据属性是同一类的(使用上)。

3.watch:类似于监听机制+事件机制,回调函数自动调用。

总结:
watch擅长处理的场景:一个数据影响多个数据

computed擅长处理的场景:一个数据受多个数据影响。

computed 和 method 都能实现的一个功能,建议使用 computed,因为有缓存。

computed 和 watch都能实现的功能,建议使用 computed 因为更加简洁

$route 和 $router 的区别?

$router是”路由实例“ 对象包括了路由 的跳转方式,钩子函数。

	例如 
	基础使用:
	this.$router.push("/路径名称");
	使用对象的形式,参数为地址栏上的参数
	this.$router.push({ path:"/login",query:{username:"jack"} });

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

主要的属性有:
this.$route.path 字符串,等于当前路由对象的路径,会被解析为绝对路径,如/home/ews

this.$route.params 对象,包含路由中的动态片段和全匹配片段的键值对,不会拼接到路由的url后面

this.$route.query 对象,包含路由中查询参数的键值对。会拼接到路由url后面

this.$route.router 路由规则所属的路由器

this.$route.name 当前路由的名字,如果没有使用具体路径,则名字为空

v-model的使用?

简介
v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,
也会在更新data绑定属性时候,更新页面上输入控件的值。
为什么使用v-model
v-model作为双向绑定指令也是vue两大核心功能之一,使用非常方便,提高前端开发效率。在view层,
model层相互需要数据 交互,即可使用v-model。
简单使用
v-model与input输入框的搭配使用:
v-model=“data中定义的变量名”
作用在表单元素上:
动态绑定了input的value指向了message变量,并且触发input事件的时候去吧message设置为目标值。
作用在组件上:
在这里插入图片描述

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

v-on可以监听多个方法。

<input
     type="text"
     v-on="{
     input:onInput,
     focus:onFocus,
     blur:onBlur,
     }"
>

v-on常用修饰符

	.stop该修饰符将阻止事件冒泡
	.prevent阻止默认事件
	.self只会在出发自身的时候触发
	.once只会触发一次。

vue中过滤器有什么作用及详解?

过滤器分为全局过滤器和局部过滤器,全局过滤器可以在任何组件调用,局部过滤器只能在当前组件调用,过滤器使用|管道符调用。可以串联使用。

过滤器使用:

全局过滤器vue.filter(”过滤器名称“,()=>{});
局部过滤器 filter:{过滤器名字}

vue3.0中将过滤器移除了,使用“计算属性”进行代替。

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

vuex有哪几种属性?

  • state

state:state类似容器,包含应用的大部分状态

	 一个页面只能有一个state
	状态存储是响应式的
	不能直接改变 state 中的状态,唯一途径显式地提交mutations
  • mutations

mutations:更改store中的状态唯一方法就是提交mutation,它是同步的,每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。更改 Vuex 的 state 中的状态的唯一方法是提交 mutation。回调函数可以接受两个参数,第一个参数是state状态,第二个参数是 mutation 的载荷就是外面store.commit 传入额外的参数。
mutations其实就相当于我们vue里面的methods,也是定义方法的,只不过这个方法可以在多个组件调用就是了。
使用mutations中的方法格式: this.$store.commit(‘名称’)

  • getters

getters:相当于state的计算属性,从state派生出一些状态

  • actions

actions:Action 类似于 mutation,不同在于:
action 提交的是 mutation,而不是直接变更状态;
action可以进行任何异步操作,mutation不可以;

  • modules

modules:模块化管理,有多个state可以通过模块化import到index.js的module属性中,可直接进行调用。参考vue的组件化思想。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些关于Vue的经典基础面试题的回答: 1. 前端采用的语言为HTML、CSS和JavaScript,前端采用的框架是Vue.js。后端采用的语言为Golang,后端采用的框架为Gin。 2. Vue-router的动态路由是指根据传递的参数动态生成路由。获取传过来的值可以使用$route对象中的params属性或query属性来获取。 3. Vue-router有三种导航钩子:全局前置守卫、全局解析守卫和全局后置钩子。全局前置守卫通过router.beforeEach()方法来定义,在跳转之前执行。全局解析守卫通过router.beforeResolve()方法来定义, 在解析路由之前执行。全局后置钩子通过router.afterEach()方法来定义,在跳转之后执行。 4. v-model是Vue.js中的指令,用于在表单元素和Vue实例的数据之间建立双向绑定。它可以通过v-model指令将表单输入和Vue实例的数据属性进行双向绑定,实现数据的实时同步。 5. Axios是一个基于Promise的HTTP客户端库,用于发送HTTP请求。使用Axios可以通过发送GET、POST等请求与后端进行数据交互。实现登录功能的流程可以通过发送POST请求向后端发送用户的登录信息,然后根据后端返回的响应进行相应的处理,比如跳转到登录成功页面或者显示登录失败的提示信息。 这些是关于Vue的经典基础面试题的回答。希望对你有帮助!<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [go语言恶意代码检测系统-对接前端可视化与算法检测部分](https://download.csdn.net/download/liufang_imei/88222624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue面试题基础面试题](https://download.csdn.net/download/weixin_42979948/88222466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值