为什么子组件中的data必须是一个函数
如果data是对象,那么在获取这个对象,将是引用的状态(联系深浅拷贝),所以组件之间的data容易混,但是瑞国data是一个函数的话,那么返回的将是一个独有的对象,不会有闭包和作用域污染等问题
v-if和v-for的优先级
先for再if
Vue中的观察者和发布订阅模式分别体现在哪里
发布订阅
$emit/$on
观察者模式
Observe 每个属性的依赖收集
组件间所有通信方式
- props
- emit/on
- provide/inject
- attrs/listeners
- 应该还有...
Vue生命周期
父组件mounted => data props methods provide 等属性初始化 => 子组件mounted
在源码中有
computed和watch的区别
computed是生成一个新的数据 并且是函数的形式
watch是监听一个在data或其他地方原有的属性,然后给它添加get和set方法
Vue.mixin和Vue.extend有什么应用场景
mixin是在每一个组件的某个方法中添加一些属性,extend是类似直接创建一个组件(这里还不太清楚)
Vue.$nextTick和Vue.set分别是什么
nextTick 是一个基于Promise封装的方法,里面可以写一个回调函数,并且在DOM更新之后才执行
set可以更加深层次监听数据 还没搞懂
什么是虚拟dom 以及dom diff
在一个Vue单文件中,先找到render函数 然后再找template 然后再找el属性。
先将render函数中的DOM转为一个对象形式的文件,然后在进行数据的更新和比对之后,再渲染成真实的DOM
为什么这么做?
真实DOM中有很多的属性,如果将其全部操作一遍的话,将会非常耗费性能
组件间传值时,v-model是什么语法的语法糖
v-model相当于 :value=value @input="input"
子组件中 props接受value,在方法中$on("input",payload)
即可