vue.js使用过程中的一些笔记
watch列表中immediate
为true
时,监听回调将在beforeCreate
和created
生命周期之间执行。如需在此监听回调中访问子组件或DOM元素,请使用this.$nextTick()
。
慎用beforeUpdate
和updated
生命周期钩子函数,尤其不能在此类生命周期函数中对data
中的数据进行更改,否则极易导致死循环和浏览器崩溃(不断触发beforeUpdate
和updated
生命周期,并一直往microtask队列中放入任务)。如果必须在此类生命周期中对data
中的数据进行修改,可以考虑在setTimeout()
中进行相关操作(相关操作将被放到macrotask中,一般不会导致浏览器完全卡死)。如果数据被渲染到DOM中且变动频繁,则beforeUpdate
和updated
生命周期钩子函数也会被频繁调用,易造成性能下降问题。
组件刚加载时,render函数在beforeMount
和mounted
之间执行,之后每次在数据发生更新时都会被执行,在beforeUpdate
和updated
之间执行。
SSR模式下,服务端在执行完beforeCreate
和created
生命周期钩子函数后会直接执行render函数生成页面的内容。
当data中被改变的变量在模板中被用到,或在渲染函数中被访问到时,才会触发组件的重新渲染,以及beforeUpdate
和update
生命周期。
关于组件间传值:
- 不推荐直接修改父组件或子组件
data
的值,容易导致代码难以维护。 - 一般可以通过
props
从父组件向子组件传数据,通过$emit
事件的方式从子组件向父组件传值。这里有更多的Prop和自定义事件的用法,为自己的组件实现v-model
的功能和.sync
修饰符的功能,可以增强代码的可维护性。 - 当某些数据需要在多个非父子组件中读取/更改时,可考虑将此类数据放入
vuex
中。