Vue的基础理解(三)
<h4>watch中的deep:true是如何实现的?</h4>
<p>当用户指定了watch中的deep:true时,如果当监控的值为数组类型(对象类型),会对对对象中的每一项进行求值,此刻会将watcher存入到对应的属性依赖中,这样数组中的对象发生变化,会通知数据更新。
缺点:由于需要对每一项进行操作,性能会降低,不建议多次使用deep:true,</p>
<hr />
<h4>v-for中的key的作用是什么?</h4>
<p>key为每个vnde指定唯一的id,在同级的vnde中Diff过程中,可以根据key快速的进行对比,来判断是否为相同节点,并利用key的唯一性生成map来更快的获取相应的节点,另外指定key后,可以保证渲染的准确性。</p>
<hr />
<h4>Vue每个生命周期什么时候被调用?</h4>
<ul>
<li>beforeCreate → 在实例初始化之后,数据观测(data observer)之前被调用</li>
<li>
<p>created → 实例已经创建完成之后被调用。在这里,实例已完成以下配置:</p>
<ul>
<li>观测(data observer)</li>
<li>属性和方法的运算</li>
<li>watch/event事件回调</li>
<li>但这里还没有$el</li>
</ul>
</li>
<li>beforeMount → 在挂载开始之前被调用,相关的render函数首次被调用</li>
<li>mounted → $el被新创建的vm.$el替换,并挂载到实例上之后调用该钩子</li>
<li>beforeUpdate → 数据更新时调用,发生在虚拟DOM重新渲染和打补丁之前</li>
<li>updated → 由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子(该钩子在服务器端渲染期间不被调用)</li>
<li>beforeDestroy → 实例销毁之前调用,在这里,实例仍然完全可以使用</li>
<li>
<h2>destroyed → Vue实例销毁后调用。调用该钩子后,Vue实例指示的所有东西都会解绑,所有的事件监听器会被移除,所有的子实例也会被销毁(该钩子在服务器端渲染期间不被调用)</h2>
<h4>Vue每个生命周期内部可以做什么事?</h4>
</li>
<li>created → 实例创建完成,由于是最早触发的。可以进行一些数据和资源的请求。</li>
<li>mounted → 实例已经挂载完成可以进行一些dom操作</li>
<li>beforeUpdate → 可以进行更改状态,这不会触发附加的渲染过程。</li>
<li>update → 可以执行依赖于dom操作,在大多数情况下,应避免该钩子的更改状态,因为这可能导致更改循环。</li>
<li>
<h2>destroyed → 可以执行一些优化操作,例如清空定时器,清理缓存,解除事件绑定等。</h2>
</li>
</ul>
<h4>Vue组件有哪些声明生命周期钩子?</h4>
<p>beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed</p>
<keep-alive>拥有自己独立的钩子函数 activated | deactivated
- activated → 在被<keep-alive>包裹的组件中才有效,当组件被激活时使用该钩子
- deactivated → 在被<keep-alive>包裹的组件中才有效,当组件被停止时使用该钩子
---
#### Vue的父组件和子组件生命周期钩子执行顺序是什么?
```
父组件挂载完成必须是等到子组件都挂载完成之后,才算父组件挂载完,所以父组件的mounted肯定是在子组件mounted之后
```
「父」beforeCreate → 「父」created → 「父」beforeMount → 「子」beforeCreate → 「子」created → 「子」beforeMount → 「子」mounted → 「父」mounted
子组件更新过程(取决于对父组件是否有影响)
影响到父组件: 「父」beforeUpdate → 「子」beforeUpdate → 「子」updated → 「父」updated
不影响父组件: 「子」beforeUpdate → 「子」updated
父组件更新过程(取决于对子组件是否有影响)
影响到子组件: 「父」beforeUpdate → 「子」beforeUpdate → 「子」updated → 「父」updated
不影响子组件: 「父」beforeUpdate → 「父」updated
销毁过程
「父」beforeDestroy → 「子」beforeDestroy → 「子」destroyed → 「父」destroyed