Vue面试题

109 阅读4分钟

面试题:

1.如何解决vue第一次加载的时候 页面上使用的数据会闪烁?

1.界面加载的时候会把节点直接挂载到文档树中,导致{{msg}}这个字符串会显示一下。

2.vue对象生成data数据时候 回去刷新界面 ,把{{msg}}字符串替换成结果字符串。

3.然后就导致界面第一次加载的时候会闪屏

4.解决方案:使用v-html,v-text指令操作,或者css中加[v-cloak] {display:none};

解释: 1.因为DOM加载是按照文档流的加载顺序加载的。 2.添加一个属性v-cloak的原理:在vue框架运行时,会把项目中的v-cloak属性去掉

vue框架的核心思想:

数据驱动页面,组件化开发

计算属性,属性侦听器,方法,过滤器与什么区别?哪些是被this对象劫持过的?

计算属性,属性侦听器,方法,过滤器与什么区别?

计算属性会把计算的结果缓存起来,并监听计算过的数据源,如果监听的数据源发生变化才会重新计算(没有监听的属性发生变化,模板会重新渲染) 方法一般是提供给模板事件和其他方法(比如钩子函数)使用,如果在模板中使用了方法,而且不是事件,如果模板中的渲染任意数据源改变了,它都会重新调用。 过滤器往往用于数据渲染前的数据渲染前的数据处理,除了用法跟方法不一样,其他都一样,它没有被劫持。 属性侦听器:只有侦听的属性发生变化才会触发(可以深度侦听,但是更消耗内存)

vm对象中哪些属性是被this对象劫持过的? 计算属性、方法、data。

为什么要把这些函数,分开设计:计算属性,属性侦听器,方法,过滤器? 为了业务更明显,功能更好调试。

1.什么是生命周期函数?

参考连接:juejin.cn/post/714105…

vue组件对象在创建到销毁的过程中,在某一种条件成立的时刻,系统会去调用的vue中设定的函数,这些函数都叫做:生命周期函数

2.vue生命周期函数有哪些?

普遍的答案:有8个,创建前后,挂载前后,更新前后,销毁前后; 高级的答案: 组件的有8个(创建前后,挂载前后,更新前后,销毁前后) 自定义指令也有5个, 动态组件有2个 路由(组件有3个,全局有2个,独享有1个)

3.为什么要设计生命周期函数?

为了更好的设计程序,让代码更有逻辑和可维护性

4.页面首次加载过程中,会依次触发哪些钩子?

beforeCreate、created、beforeMount、mounted

5.this.$el是什么?它在哪些钩子中才能访问?、

它代表了当前组件的真实DOM,要在mounted之后才有

6.Vue实例的data属性,在哪些钩子中能访问?

created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy

7.为什么不要在更新钩子中做页面的数据请求?

会导致死循环,react有一个shoudCoponentUpdate可以自己控制,但是vue没有

8.你用beforeCreate做过什么业务?

这个钩子中可以做网络请求,但是vm没有构建完毕,此时数据方法等等的劫持还没有完成,不能操作this,因此可以做预加载

9.VM和DOM之间的关系?

1.VM是JS模拟出来的跟DOM结果很像的一种对象结果VNode,它通过底层的rebder函数渲染到页面上,让页面DOM跟虚拟VNode关联映射 2.如果VM的数据源发生变化,会让内存中生成新的VNode,新的VNode会和旧的VNode作比较,然后更新,这个过程就是DIFF算法

10.讲一下DIFF算法

  • 用JavaScript对象结果表示DOM树的结构;然后用这个树构建一个真正的DOM树,插入到文档当中。
  • 当状态变更的时候,重新构造一颗新的对象树。然后用新的树和旧的树进行比较(DIFF),记录两棵树差异,把第二棵树所记录的差异应用到第一棵树所构建的真正的DOM树上(patch),视图就更新了。(也就是将旧的VNode树与生成的新VNode树进行比较,比较差异,然后更新DOM(刷新页面),实现这个过程的代码就是DIFF算法

参考连接:juejin.cn/post/714068…