vue学习大全

Vue面试题

https://blog.csdn.net/qq_44182284/article/details/111191455

https://blog.csdn.net/weixin_43288714/article/details/115668583?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-19-115668583-blog-94400698.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-19-115668583-blog-94400698.pc_relevant_aa&utm_relevant_index=23

https://www.jianshu.com/p/85a4fcd3de98

https://juejin.cn/post/6961222829979697165

单页面应用****spa****(过)

  1. 在web页面加载完html,js,css后,由路由机制实现html页面内容变换

  2. 优点是用户体验好,页面不需要重新加载或者跳转,前后端分离

  3. 缺点:首次加载慢,页面前进后退路由管理,SEO 难度较大

什么是 MVVM?(练2)

  1. MVVM 是是 Model-View-ViewModel 的缩写

  2. Model 代表数据模型, 定义数据操作的业务逻辑

  3. View 代表 UI 组件, 它负责将数据模型转化成 UI 展现出来

  4. ViewModel 通过双向绑定把 View 和Model 进行同步交互,不需要手动操作 DOM 的一种设计思想

请说说双向绑定实现的原理?(练2)

  1. vue实现双向数据绑定主要是通过数据劫持并结合(发布者-》订阅者)的方式

  2. 主要实现的方法是通过object.defineproperty()来劫持各个属性的setter,getter方法,在数据变动的时候发布消息给订阅者,触发相应的监听回调

为什么data是个函数并且返回一个对象呢?(过)

  1. 因为一个组件可能会多处调用,而每一次调用就会执行data函数并返回新的数据对象,

  2. 这样做可以避免多处调用组件间的数据污染

v-model的原理是什么(练2)

v-model本质就是一个语法糖,可以看成是value + input方法的语法糖。 可以通过model属性的prop和event属性来进行自定义。原生的v-model,会根据标签的不同生成不同的事件和属性

(text 和 textarea 元素使用 value property 和 input 事件;

checkbox 和 radio 使用 checked property 和 change 事件;

v-show 和 v-if 指令的共同点和不同点。(过)

  1. v-show是通过display来控制显示隐藏

  2. v-if是操作dom元素来控制显示隐藏

  3. 如果需要非常频繁地切换,则使用 v-show 较好

computed 和 watch 的区别和运用的场景?(练2)

  1. computed 具有返回值,具有缓存,依赖其他属性进行计算返回,

使用场景:当我们要进行数值计算,而且依赖于其他数据,那么把这个数据设计为computed

  1. watch的值必须先在data中定义,当值发生改变触发watch,然后进行逻辑处理,可以做异步操作,watch接收两个参数newvalu和oldvalue

使用场景:如果你需要在某个数据变化时做一些事情,使用watch来观察这个数据变化

Vue生命周期(过)

  1. 创建前,可以在这加个 loading 事件,在加载实例时触发。

  2. 创建后,在这结束 loading 事件,异步请求也放在这里调用。

  3. 挂载前

  4. 挂载后,挂载元素,获取到 DOM 节点。

  5. 更新前

  6. 更新后,如果对数据统一处理,在这里写上相应函数

  7. 销毁前,可以做一个确认停止事件的确认框。

  8. 销毁后

  9. activated keep-alive 专属,组件被激活时调用

  10. deactivated keep-alive 专属,组件被销毁时调用

  11. beforeCreate ,可以在这加个 loading 事件,在加载实例时触发。

  12. created ,在这结束 loading 事件,异步请求也放在这里调用。

  13. beforeMount

  14. Mounted,挂载元素,获取到 DOM 节点。

  15. beforeUpdate

  16. updated ,如果对数据统一处理,在这里写上相应函数

  17. beforeDestroy ,可以做一个确认停止事件的确认框。

  18. destroyed

  19. activated keep-alive 专属,组件被激活时调用

  20. deactivated keep-alive 专属,组件被销毁时调用

第一次页面加载会触发哪几个钩子?(过) 第一次页面加载时会触发 创建前后,挂载前后 这几个钩子

DOM 渲染在****哪个周期中就已经完成?(过) DOM 渲染在 mounted 中就已经完成了。

深度监听怎么做(过)

watch 里面的deep属性设置为true

Vue 的父组件和子组件生命周期钩子函数执行顺序?(过)

Vue 父子组件生命周期钩子的执行顺序遵循:从外到内,再从内到外。

  1. 加载渲染过程

父更新前 -> 父更新后 -> 父挂载前 -> 子更新前 -> 子更新后 -> 子挂载前 -> 子挂载后 -> 父挂载后

  1. 子组件更新过程

父更新前 -> 子更新前 -> 子更新后 -> 父更新后

  1. 父组件更新过程

父更新前-> 父更新后

  1. 销毁过程

父销毁前-> 子销毁前 -> 子销毁后-> 父销毁后

Vue****组件间通信(练****2****)

  1. v-model

  2. attrs /listeners

  3. vuex

  4. $root(可以拿到根组件的属性和方法)

  5. Props(常用)(子组件通过props接收父组件传递过来的数据)

  6. provide/inject(父组件通过provide方法定义方法或者属性,子组件通过inject接收方法和属性)

  7. Emit(子组件通过emit发送事件给父组件,父组件通过回调函数接收数据)

  8. ref(父组件可以通过ref拿到子组件的属性和方法)

  9. slot(子组件的数据通过插槽的方式传给父组件使用)

  10. eventBus(通过Bus.emit发送事件,通过Bus.on监听事件)

  11. children /parent(通过this.children获取子组件的方法和属性,通过this.parent获取父组件的方法和属性)

https://juejin.cn/post/6999687348120190983#heading-13

Vue****单向数据流

1. 单向数据流就是model的更新会触发view的更新,view的更新不会触发model的更新,它们的作用是单向的

Keep-alive****组件(过)

  1. keep-alive 可以实现组件缓存,当组件切换时不会对当前组件进行卸

  2. Keep-alive有3个属性,include,exclude ,max,代表匹配的组件会不会被缓存,还有缓存多少组件实例

  3. keep-alive触发的生命周期有activated ,deactivated

Vue****检测对象或者数组的变化(练****1****)

  1. vue可以监测数组变化的方法有七种 pop 、 push 、 shift 、 unshift 、 splice 、 sort 、 reverse

  2. Vue 无法检测到对象属性的添加或删除,或者通过下标改变数组的值

  3. 我们可以使用Vue.set(object, key, value)来设置值的改变而被vue监听到

Vue****中****key****的作用(练****1****)

Keys 是是vue用于追踪列表中的元素被删除,添加,修改的辅助标识,可以避免元素不必要的重复渲染

NextTick****的原理使用场景(练****2****)

  1. NextTick作用在下一次dom更新结束后执行他指定的回调

  2. 使用就是当数据改变后,要基于更新后的新dom进行一些操作的时候,可以把逻辑写在nexttick指定的回调函数中

  3. 比如在点击编辑的时候更改了数据的状态后需要对一个input框获取焦点,可以吧这一段逻辑写入nextTick中

Vuex

  1. vuex是vue团队提供的一个状态管理工具,

  2. vuex的使用场景多个组件共享数据或者是跨组件传递数据时

vuex****的****5****种属性(练****1****)

  1. state:vuex的基本数据,用来存储变量

  2. geeters:当state中的数据需要加工后再使用时,可以通过getters加工,和计算属性一样具有返回值

  3. mutation:通过commit提交数据来变更state的值,每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 ,回调函数接收一个state合集和commit过来的value

  4. action:和mutation的功能大致相同,不一样的地方是1. Action 提交的是 mutation,而不是直接变更状态。 2. Action 可以包含任意异步操作。3.action是通过dispatch提交type和value来变更state

  5. modules:模块化vuex,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。

Vuex****的流程是

Vue-router****的两种模式

  1. 路由模式有2种,hash和history模式

  2. hash值不会带给服务器,#号后的内容就是hash值,hash值兼容性更好,我们开发中使用的就是hash值

  3. history模式的url更简洁,兼容性没有hash模式好

Vue-router****有哪几种导航钩子和路由守卫

  1. 全局守卫(router.beforeEach,router.afterEach)

  2. 路由独享守卫(beforeEnter)

  3. 路由组件内的守卫(beforeRouteEnter,beforeRouteLeave )

  4. (to, from, next)

你都做过哪些****Vue****的性能优化

编码阶段

  1. 尽量减少data中的数据,data中的数据都会增加getter和setter,会收集对应的watcher

  2. v-if和v-for不能连用

  3. 如果需要使用v-for给每项元素绑定事件时使用事件代理

  4. SPA 页面采用keep-alive缓存组件

  5. 在更多的情况下,使用v-if替代v-show

  6. key保证唯一

  7. 使用路由懒加载、异步组件

  8. 防抖、节流

  9. 第三方模块按需导入

  10. 长列表滚动到可视区域动态加载

  11. 图片懒加载

SEO****优化

  1. 预渲染

  2. 服务端渲染SSR

打包优化

  1. 压缩代码

  2. Tree Shaking/Scope Hoisting

  3. 使用cdn加载第三方模块

  4. 多线程打包happypack

  5. splitChunks抽离公共文件

  6. sourceMap优化

用户体验

  1. 骨架屏

  2. PWA

Mixin****和****Mixins****的区别

Vue****动态组件

Vue****中局部作用域样式、

Vue3.0****双向绑定原理

v-if和v-for一起使用的弊端及解决办法

由于v-for的优先级比v-if高,所以导致每循环一次就会去v-if一次,而v-if是通过创建和销毁dom元素来控制元素的显示与隐藏,所以就会不停的去创建和销毁元素,造成页面卡顿,性能下降。

解决办法:

  1. 在v-for的外层或内层包裹一个元素来使用v-if

  2. 用computed处理

Vue的优点?Vue的缺点?

  1. 组件化,轻量级,虚拟dom,响应式,单页面路由,数据与视图分开

  2. 页面不利于seo,不支持IE8以下,首屏加载时间长

Vue跟React的异同点

相同点:

  1. 都使用了虚拟dom

  2. 组件化开发

  3. 都是单向数据流(父子组件之间,不建议子修改父传下来的数据)

  4. 都支持服务端渲染

不同点:

  1. React的JSX,Vue的template

  2. 数据变化,React手动(setState),Vue自动(初始化已响应式处理,Object.defineProperty)

  3. React单向绑定,Vue双向绑定

  4. React的Redux,Vue的Vuex

列表渲染中 key的作用

方便diff 算法快速找到变更的元素,然后进行相应的 DOM 更新

组件间的通信(基本是必问题)

父子组件:子组件通过 Props 接收父组件传入的值,如果父组件想拿到子组件的数据,可通过 $emit 一个事件,将数据当参数传递出去,然后父组件通过事件监听接收

兄弟组件:

  1. 通过找到共同的父级组件,然后通过 $emit 将数据传递到父级组件,都从父级组件取数据

  2. Vuex全局数据共享

  3. 通过 Vue 全局事件总线,不过因为 vue 3 已经废弃了 this.on, this.off 这些全局 API,所以在 vue3中已经无法使用全局事件总线了,可以通过方法 4 解决

  4. 使用第三方 PubSub 工具

Provide/Inject:只适用于父子级或者祖孙级或者更深层次嵌套中,父级组件向子级组件传值

$nextTick 的作用

Vue 2 中数组是无法实现响应式的,需要通过 $set 手动实现

自定义全局 API

通过给 Vue 原型绑定方法实现,不过同样的此方法不适用于 Vue3,在 Vue 3中通过给app实例config 配置全局属性

Vue2.x =è Vue.prototype.customMethod = function() {}

Vue3.x è app.config.globalProperties

Vue2Vue3不同点

自定义指令

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

推荐阅读更多精彩内容