一、怎样理解 Vue 的单向数据流?
数据总是从⽗组件传到⼦组件,⼦组件没有权利修改⽗组件传过来的数据,只能请求⽗组件对原始数据进⾏修改。这样会防⽌从⼦组件意外改变⽗级组件的状态,从⽽导致你的应⽤的数据流向难以理解。
注意:在⼦组件直接⽤ v-model 绑定⽗组件传过来的 prop 这样是不规范的写法 开发环境会报警告
如果实在要改变⽗组件的 prop 值 可以再 data ⾥⾯定义⼀个变量 并⽤ prop 的值初始化它 之后⽤$emit 通知⽗组件去修改
二、虚拟 DOM 是什么? 有什么优缺点?
虚拟 dom 是利用 js 描述元素与元素的关系,用 js 对象来表示真实的 DOM 树结构,创建一个虚拟 DOM 对象
由于在浏览器中操作 DOM 是很昂贵的。频繁的操作 DOM,会产⽣⼀定的性能问题.
在组件渲染的时候会调用 render 函数,这个函数会生成一个虚拟 dom,再根据这个虚拟 dom 生成真实的 dom,然后这个真实的 dom 会挂载到我们的页面中。
如果只是渲染一个页面后期不改动的话 那么虚拟 dom 其实成本更高 因为 都要渲染成真实的 dom
如果组件内有响应的数据,数据发生改变的时候 render 函数会生成一个新的虚拟 dom 新的虚拟 dom 树和旧的虚拟 dom 树进行对比,找到要要修改的虚拟 dom 的部分,去修改相对应部分的真实 dom
三、Vue的di!算法原理是什么?
Vue的di!算法是平级⽐较,不考虑跨级⽐较的情况。内部采⽤深度递归的⽅式+双指针⽅式⽐较
1 先⽐较两个节点是不是相同节点
2 相同节点⽐较属性,复⽤⽼节点
3.先⽐较⼉⼦节点,考虑⽼节点和新节点⼉⼦的情况
4 优化⽐较:头头、尾尾、头尾、尾头
5 ⽐对查找,进⾏复⽤
四、Vue.use是⼲什么的?
vue.use 是⽤来使⽤插件的。我们可以在插件中扩展全局组件、指令、原型⽅法等。 会调⽤ install`⽅法将Vue的构建函数默认传⼊,在插件中可以使⽤vue,⽆需依赖vue库
五、组件写name有啥好处?
增加name属性,会在components属性中增加组件本身,实现组件的递归调⽤。
可以表示组件的具体名称,⽅便调试和查找对应的组件。