面试题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这种写法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容