81 Vue的事件绑定原理
-
原生 DOM 的绑定:Vue在创建真实DOM时会调用 createElm
,默认会调用invokeCreateHooks
。会遍历当前平台下相对的属性处理代码,其中就有updateDOMLListeners
方法,内部会传入add()
方法 -
组件绑定事件,原生事件,自定义事件;组件绑定之间是通过 Vue
中自定义的$on
方法实现的
可以理解为:组件的
nativeOnOn
等价于 普通元素on 组件的on会单独处理
82 v-model中的实现原理及如何自定义v-model
v-model
可以看成是value+input
方法的语法糖(组件)。原生的v-model
,会根据标签的不同生成不同的事件与属性。解析一个指令来
自定义:自己写 model
属性,里面放上 prop
和 event
83 为什么Vue采用异步渲染呢
Vue 是组件级更新,如果不采用异步更新,那么每次更新数据都会对当前组件进行重新渲染,所以为了性能, Vue 会在本轮数据更新后,在异步更新视图。核心思想
nextTick
dep.notify()
通知 watcher
进行更新, subs[i].update 依次调用 watcher
的 update
, queueWatcher
将watcher
去重放入队列, nextTick( flushSchedulerQueue )在下一tick
中刷新watcher
队列(异步)
84 Vuex 工作原理
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。
状态自管理应用包含以下几个部分:
-
state,驱动应用的数据源; -
view,以声明方式将 state 映射到视图; -
actions,响应在 view 上的用户输入导致的状态变化。下图单向数据流示意图:

vuex,多组件共享状态,因-单向数据流简洁性很容易被破坏:
-
多个视图依赖于同一状态。 -
来自不同视图的行为需要变更同一状态

85 如何从真实DOM到虚拟DOM
涉及到Vue中的模板编译原理,主要过程:
-
将模板转换成 ast
树,ast
用对象来描述真实的JS语法(将真实DOM转换成虚拟DOM) -
优化树 -
将 ast
树生成代码
86 Computed watch 和 method
-
computed:默认 computed
也是一个watcher
具备缓存,只有当依赖的数据变化时才会计算, 当数据没有变化时, 它会读取缓存数据。如果一个数据依赖于其他数据,使用computed
-
watch:每次都需要执行函数。 watch
更适用于数据变化时的异步操作。如果需要在某个数据变化时做一些事情,使用watch。 -
method:只要把方法用到模板上了,每次一变化就会重新渲染视图,性能开销大
87 为什么要使用异步组件?
-
节省打包出的结果,异步组件分开打包,采用 jsonp
的方式进行加载,有效解决文件过大的问题。 -
核心就是包组件定义变成一个函数,依赖 import()
语法,可以实现文件的分割加载。
88 action 与 mutation 的区别
-
mutation
是同步更新,$watch
严格模式下会报错 -
action
是同步操作,可以获取数据后调用mutation
提交最终数据
89 插槽与作用域插槽的区别
插槽
-
创建组件虚拟节点时,会将组件儿子的虚拟节点保存起来。当初始化组件时,通过插槽属性将儿子进行分类 {a:[vnode],b[vnode]}
-
渲染组件时会拿对应的 slot
属性的节点进行替换操作。(插槽的作用域为父组件)
作用域插槽
-
作用域插槽在解析的时候不会作为组件的孩子节点。会解析成函数,当子组件渲染时,会调用此函数进行渲染。 -
普通插槽渲染的作用域是父组件,作用域插槽的渲染作用域是当前子组件。
90 vue中相同逻辑如何抽离
其实就是考察
vue.mixin
用法,给组件每个生命周期,函数都混入一些公共逻辑。
原文始发于微信公众号(消失的程序员):Vue.js面试题精选—9
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/250887.html