Vue易混淆知识点
程序员文章站
2022-06-11 14:36:28
...
- Vue生命周期
常用钩子函数:beforeCreate
、created(this.$data)
、beforeMount(this.$el)
、mouted(this.$el replaced)
- Vue中Component的
data
属性必须为Function
解释:
如果不采用Function
,所有的Component实例都会共享一个data
对象。那么,在一个组件中对data
的修改,将会影响到所有的组件实例。 - Vue中
v-for
注意事项
默认采用in-place-patch
策略进行渲染,当包含form表单元素和子组件时要当心出错(利用key属性强制重绘)。 - Vue中
computed
与methods
对比
对于计算属性computed
,我们都可以通过调用method
达到相同效果。但是区别在于采用computed
计算属性,我们可以对属性进行缓存,只有在依赖属性change时,才会对计算属性进行重新计算。
eg:
//该计算属性不再发生变化,因为Date.now()不是响应式依赖
computed:{
now:function(){
return Date.now()
}
}
使用场景:
对于性能开销比较大的属性,适合采用computed属性。
实现原理:
// 通过for..in.. 遍历computed属性的所有子属性,然后利用Object.defineProperty设置getter属性
Vue.prototype._initComputed = function () {
var computed = this.$options.computed;
if (computed) {
for (var key in computed) {
var userDef = computed[key];
var def = {
enumerable: true,
configurable: true
};
if (typeof userDef === 'function') {
def.get = makeComputedGetter(userDef, this);
def.set = noop;
} else {
def.get = userDef.get ? userDef.cache !== false ? makeComputedGetter(userDef.get, this) : bind(userDef.get, this) : noop;
def.set = userDef.set ? bind(userDef.set, this) : noop;
}
Object.defineProperty(this, key, def);
}
}
};
- Vue中
directive
与component
的区别以及使用场景
在Vue2.0中,对代码复用和抽象是组件,但是如果需要对纯DOM元素进行底层操作,就需要使用指令。
常用钩子函数:bind
:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作inserted
:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)update
:被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)componentUpdated
:被绑定元素所在模板完成一次更新周期时调用unbind
:只调用一次, 指令与元素解绑时调用 - Vue中
mixin
与extend
区别 参考
全局注册混合对象,会影响到所有
之后创建的vue实例,而Vue.extend
对单个实例进行扩展。 - 注意,不要在实例属性或者回调函数中(如 vm.$watch('a', newVal => this.myMethod()))使用箭头函数。因为箭头函数绑定父上下文,所以 this不会像预想的一样是 Vue 实例,而是 this.myMethod未被定义。
- Vue2.0取消
$dispatch
和$broadcast
api。因为基于组件树的时间流比较混乱,而且不利于扩展。在Vue2.0中推荐使用new Vue()
创建eventHub
进行事件通信,而且可实现兄弟组件通信。 -
Mustache
不能在html属性中使用,推荐使用v-bind
指令
下一篇: 婴幼儿饮食须知 八大注意事项