当前位置: 首页>后端>正文

面试题Vue部分

对Vue的理解

-前端三大主流框架之一,是MVVM框架,通过VM实现数据双向绑定,他帮助我们操作dom
渐进式:用什么拿什么
特点:组件化,数据驱动

说说Vue2和Vue3的区别

  • Vue2是options选项式Api,Vue3是Composition组合式Api,它的入口是setup()函数,vue实例创建前被调用,所以没有this,没有this导致用2里用this的写法,有点区别,比如组件传值,用setup里的两个参数,props和context传,然后响应式监听有ref和reactive这两种写法,他俩区别是,
  • ref只能包装基本数据类型,只能对单独数据进行包装,还得用.value
  • reactive可以包装多个数据,比如对象,数组
  • 场景:ref做不了的就用reactive
  • 双向绑定原理不太一样,Vue2里是通过ES5里的一个API,Object.defineProperty()方法实现的
    Vue3是通过ES6的ProxyAPI对数据代理,优势是可以监听对象,也可以监听数组

Vue3常用的Api

createApp(),app.mount()
setup(),ref(),reactive()
生命周期:onMounted(),onUpdated(),onUnmounted()

Vue3中的ref和reactive有什么不同?

ref包装单个的值,reactive包装对象

谈谈双向绑定的原理和使用场景

通过vue实例的响应式系统来实现的。
他将组件中使用到的数据对象转化成响应式的对象,当这些数据发生改变时,会触发对应的视图重新渲染,实现了数据双向绑定
场景:表单的处理,实现表单元素与后台数据库之间的交互,比如Input,textarea
组件通信:让父子组件可以共享状态,同时自动更新视图

谈谈虚拟DOM

  • 在Vue中,组件数据发生改变时,首先会加载虚拟DOM,虚拟和真实DOM进行对比,不一样的节点才会重新渲染,提高了渲染效率

v-if和v-show

  • 相同:都是控制是否渲染元素的标签
    不同:
  • v-if通过真假,来判断dom的添加或者删除
  • v-show只是修改了css样式,通过dsiplay属性来渲染(频繁切换场景)

Vue常用的几种指令

v-if v-show v-for v-on v-bind v-model v-once

Vue中$mount和el区别

都是把vm挂载到指定dom元素中
如果指定了el,则会就会渲染到el对应的dom中
没有指定el,vm就未挂载,此时通过$mount来手动挂载

什么是计算属性,怎么用的,和watch有啥区别

  • computed计算属性,监听vue中数据的变化,数据改变的时候会触发
  • watch监听属性,只有当要监听的数据发生变化时才会触发

说一下Vue组件之间参数传递

  • 父传子:props方法
  • 子传父:this.$emit(自定义事件名,参数)

路由两种模式:

  • hash:优点是兼容性高。缺点是URL带有#号不好看
  • history:优点是URL不带#号,好看。缺点是既需要浏览器支持也需要后端服务器支持

路由传值

两种方式:
1.params:类似于post方式,参数不会显示,利用路由规则中name跳转
2.query:类似于get方式,参数会显示,利用规则中的path跳转

脚手架常用命令

  • vue create项目名字
  • npm run serve
  • npm install axios

v-for和v-if哪个优先级高

  • 先处理v-for,再处理v-if

路由之间如何进行跳转

  • 用<router-link:to="xxx">标签进行跳转
  • js跳转 router.push('index')

什么是路由?

  • 因为是Vue这种SPA,单页面应用,浏览器其实不会主动去跳转和刷新的,页面内容的更新是通过vue-router实现的

vue常用的路由对象

  • $route.name 当前路由的名称
  • $route.path当前路由对象的路径
  • $route.query查询的键值对
  • $route.params预设的变量,切换时候通过parmas带过去某个id的值

脚手架项目里怎么用自定义组件

1.在components里新建组件文件
2.需要用到的组件import导入
3.注入到子组件components属性上面
4.在视图层使用

用没用过vuex,什么场景用,vuex中store是啥

  • vuex是vue的状态管理器,就是一个仓库,仓库里放了很多对象,数据存放在state里,vue组件从store中读取数据,如果store中的数据发生改变,依赖数据相应的组件也会发生改变
  • 他就是把一些数据在各个组件中进行共享
  • 比如说登录状态

vue生命周期

  • 页面第一次加载会触发(创建的四个钩子):beforeCreate,created,beforeMount,mouted这几个钩子
    vue3对最后的两个生命周期做了一些变化,官方的解释是和mounted做一些对应,换了个名,本质没啥区别,因为vue3新增了一个特性,他的api叫composition
    他把beforecreate和created替换成了所谓的setup
    breforeCreate:组件vm刚在内存中被创建出来,还没初始化data和methods(loading事件)
    created:实例创建完毕,data和methods创建完毕 ,还没开始编译模板
    (在日常的开发中,当created被回调的时候,vue实例里面的data,methods都已经初始化完成了,所以我们可以进行数据的初始化,调用方法,发送请求,大多数的事情都可以做了,但是我们不能操作dom,因为这时候是虚拟dom,真实的dom还没有生成,vue就是把虚拟的节点渲染为真实的节点,那么这部分的工作就可以在mounted里面做)
    breforeMount:这时候完成了模板的编译,还没挂载
    mounted:完成挂载,这时候将编译好的模板挂载到了页面指定的容器中显示(挂载元素,获取DOM节点)
    一定要等到html渲染完成才可以进行,这时候就需要用到mounted
    beforeUpdate:组件数据更新之前,还没开始重新渲染dom节点
    (数据修改后,视图改变前)
    updated:组件数据更新完毕,页面渲染好了(对数据统一处理)
    (数据修改后,视图变化后)
    view的数据变化到视图改变是存在一定时间的
    vue提供了一个api叫做nexttic方法,在数据改变前触发这个方法,然后在该方法的回调方法里面拿到视图更改后的一个dom逻辑
    beforeDestory/beforeUnmount::组件实例销毁之前(关闭定时器)
    destroyed/unmounted:组件实例销毁完毕,所有东西都会解除绑定,事件监听器会被移除,子实例也会被销毁
  • 加入keep-alive(缓存组件的)还会多两个生命周期
    activated(进入)、dactivated(离开/销毁)
  • 父子组件引入子组件会执行哪些生命周期?
    父:前三个,子:前四个,父:第四个
  • 优先加载子组件数据,那么父组件中的请求要放在mounted里

前后端数据怎么交互的?

  • Axios封装了Ajax的库,也可以对请求进行异步处理
  • Axios是基于promise的,promise是ES6中给我们提供好的异步对象,这异步对象底层就是原生的AJAX
  • 原生AJAX流程:
    1.创建XMLHttpResquest对象
    2.通过这个对象的open()和send()方法,向服务器发送请求
    3.然后服务器端会响应结果,会获得JSON格式的字符串,用responseText接收
    4。readyState和状态码,4和200说明,返回成功
  • 同步:我们客户端向服务器端 发送请求,得等服务器响应结果
  • 异步:我们客户端向服务器端 发送请求,不用等待服务器端立即给我响应,这个时候我 还会做其他事情,比如说注册邮箱
  • 使用Axios之前需要导入库
  • axios封装了自己的回调方法:.then()是请求成功后的回调方法,.catch()是请求异常后的回调方法,回调方法必须用箭头函数,获取全局对象,才能对vue中的变量进行数据绑定
  • Axios封装了get和post方法,可以分别发起一个get请求和post请求

el属性和$mount优先级

el优先级高

var和let作用域

  • var只有全局作用域和函数作用域,所谓全局作用域就是在代码的任何位置都能访问var声明的变量,而函数作用域在变量声明的当前函数内部访问变量。函数外部是无法访问函数内部声明的变量的
  • let是块作用域,所谓块作用就是控制流程语句的有效范围。如果我们控制流程语句中使用let定义一个变量,那么我们在控制流程语句外是无法访问这个变量的。

router和route区别

router是最大的路由对象,是路由管理对象(路由跳转)
route是某一条路由,是路由单体对象(this.$route.xxx)获取当前路径所在这个路由对象(跟当前路径有关的)

路由传参两种方式和区别

query传参;类似于get(参数会在路由中显示)利用路由规则中的path进行跳转,刷新页面之后参数还在
params类似于post,利用路由规则中的name进行跳转

Ajax的理解

  • Ajax为异步请求,实现局部刷新,动态修改参数
  • Ajax核心封装类是XMLHttpRequest,用它的open方法创建请求,用send方法发送请求,当readyState=4,证明数据处理完毕,相应码200成功
  • 数据的获取用的是responseTest

对插槽的理解

使用场景:比如布局组件、表格列、下拉选、弹框显示内容等

路由懒加载?

路由被访问时候才加载对应的组件
在components中,用箭头函数import这种写法


https://www.xamrdz.com/backend/3e21939202.html

相关文章: