Vue面试常见问题

 一、MVVM 的理解

        M表示Model(模型),可以简单理解为业务逻辑和数据。 V表示View(视图),可以简单理解为界面显示的内容。VM表示ViewModel(视图模型),可以将ViewMode看作是Model和View的连接桥。View可以通过事件绑定Model,Model可以通过数据绑定View,通过ViewMode可以实现数据和视图的完全分离。(前端工程师只需要关注结果即可,不需要人为的去操作,这种编程范式就是声明式编程)

MVVM框架优点:

    ① 低耦合 view可以独立于model变化和修改     

    ② 可重用性 很多view可以用同一个viewmodel

    ③ 独立开发       

    ④ 可测试 可以针对viewmodel来写测试,测试界面


二、Vue的双向数据绑定原理

        vue实现数据双向绑定主要是:      

                    采用数据劫持(Object.defineProperty()) 结合 发布者-订阅者模式 的方式。

通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。vue的数据双向绑定 将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者。通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令(vue中是用来解析 {{}})。最终利用watcher搭起observer和Compile之间的通信桥梁,达到数据变化 —>视图更新;视图交互变化(input)—>数据model变更双向绑定效果。


三、Vue组件之间的参数传递

    1、父传子: props  

    2、 子传父: $emit 

    3、父访问子: $children 或 $refs(ref)  (使用this.$children取组件对象)

    4、子访问父: $parent   (使用this.$parent取父组件对象)

    5、访问根组件: $root   (使用this.$root取父组件对象)

    6、使用路由传值:

             (1)动态路由传值,取值通过 this.$route.params

             (2)路由的query传值, 取值通过 this.$route.query

    7、Vuex(组件状态管理) 核心概念:State   Getters  Mutations  Actions  Modules

    8、全局组件传值

    9、eventBus全局的事件总线,就是创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件。

        注: 项目比较小时,用eventBus比较合适, 虽然也有不少人推荐直接用VUEX,具体来说看需求咯。技术只是手段,目的达到才是王道。

四、vue的生命周期函数

1、挂载阶段(一次生命周期的过程,只会触发一次)

(1)beforeCreate实例创建之前 拿不到 data 中的数据

(2)created实例创建完成,从这里开始才能获取到数据,在这里发送 ajax 请求

(3)beforeMount挂载之前,模板编译完成但是页面还看不到效果.获取不了真的 DOM 数据,\$refs 也不能使用

(4)mounted挂载完成,这时真实 DOM 数据才更新了,可以获取到真实的 DOM 数据。 \$refs 也可以使用了,在这里发送 ajax 请求

2、更新阶段(一次生命周期的过程,会触发多次)

(1)beforeUpdate更新之前, 真实 DOM 还没有更新

(2)updated 更新完成,真实 DOM 已经更新了

3、销毁阶段(一次生命周期的过程,只会触发一次)

(1) 调用实例的 \$destroy() 方法,让实例进入销毁阶段

(2) v-if 控制组件。如果条件是 false, 那么控制的那个组件的销毁阶段就开始了。

(3)beforeDestroy销毁之前,做一些清除工作,比如清除计时器、清除全局的事件监听等。

(4)destroyed销毁完成,这个生命周期函数里面,我们没什么好处理的。


五、vuex的理解与使用

1、专门 为 vue提供的状态管理器

2、大部分项目都可以不用,如果是一个单页面应用程序,也就是说使用了路由,并且多个路由页面组件之间需要共享数据的时候。

store (仓库,将项目中需要共享的数据统一存放的位置)

1、state 专门存放状态数据的,可以理解为普通组件的data选项一样。

2、getters 里面专门存放getter,是针对当前仓库的state数据或者是其他的getter数据做的二次计算。可以理解为普通组件的computed选项一样。

3、mutations 里面专门存放mutation。mutation其实就是一个函数,接收两个参数(state,payload),这个函数是唯一能够修改仓库state数据的地方,里面必须是同步的函数,不要使用异步函数,异步函数可以放在actions里面操作。

4、actions 里面专门存放action。action其实就是一个函数,接收两个参数(context,payload),这个函数类似于mutation函数,但是他不能直接去修改state数据,他可以间接的通过调用mutation来修改state。

5、modules 可以将仓库进行拆分



六、对keep-alive 的了解

keep-alive是一个抽象组件,它是Vue的内置组件。

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

1 、 常用的属性有:

        include:设置会被缓存的组件。

        exclude:设置不会被缓存的组件。

2 、 keep-alive相关的生命周期钩子函数:

        activated: 进入页面时触发。(常用来实现每次进入页面的时候重新获取最新的数据)

        deactivated:退出页面时触发。


七、Vue的父组件和子组件生命周期函数执行顺序

1. 加载渲染过程

            父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

2. 更新过程

            父beforeUpdate->子beforeUpdate->子updated->父updated

3. 销毁过程

            父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

详细解释参考:父子组件执行顺序.


八、computed和watch的区别及使用场景

    computed使用场景:

                当页面中有某些数据依赖其他数据进行变动的时候,可以使用计算属性

    watch使用场景:

                   数据变化时执行异步或开销较大的操作,可以随时修改状态的变化

    详细解释:     在大部分情况下我们都会使用computed,但如果要在数据变化的同时进行异步操作或者是比较大的开销,那么watch为最佳选择。watch为一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。


九、vue的路由

两种模式

        hash 模式:在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取;特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,更改hash值不会重加载页面

        history 模式:history采用HTML5的新特性;且提供了两个新方法:pushState()replaceState(), 可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更


十、vue中key 值的作用

        当Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。key的作用主要是为了高效的更新虚拟DOM。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容