vue组件之间跨层级通信?为什么index不能作为key?
1.子组件怎么修改父组件通过props传递过来的属性?
vue是单向数据流的,在子组件是不可以修改传递的属性的。
2.this.$emit的返回值是什么?
this。 如果需要返回值可以使用回调
3.相同名称的插槽是合并还是替换?2.5和2.6语法有不同。
2.5的时候普通插槽是合并,作用域插槽是替换
2.6插槽都是替换
4.为什么index不能作为key?
用key是解决,更新dom性能问题。
最好不要用index,因为key值就相当于当前元素的一个身份名牌,需要是独一无二的,这样在更新数据的时候,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过(通过key值确认)的每个元素,你用下标的话,如果数组发生改变,就有可能出现相同的key值,这样的话Vue又要比较这两个相同key值的dom元素(本来通过key值就能确定的)。
如果用div,span它们本身内部是没有任何状态,所以没问题。
5.数组哪些方法支持响应式更新?如不支持,怎么处理?底层原理是什么?
支持:push,pop,shift,unshift,splice,sort,reverse
不支持:fighter,cancat,slice。想支持的话this.array =新的数组(不是原来的数组)
原理:同样是使用object.defineproperty对数组方法进行改写
6.用户停止输入超过500ms后,才去更新name?
1.settimeout
2.loadsh debounce第三方
7. vue如何做响应式更新的?
在实例化的时候会对data下面的数据进行getter和setter的转化,组件在渲染的时候,如果你用到了data。才会被watcher,如果render时候并没有用到,就不会被watcher,不会被触发组件的更新。
8.组件之间跨层级通信??
provide 提供数据
inject 取数据
A为父组件,b为子组件,c为孙组件。a与c之间通信呢?
a为provide
c为inject
9.如何获取跨层级组件的实例?
通过$ref可以获取到当前组件的实例。
通过$parent可以获取到父组件的实例。
通过$child可以获取到子组件的实例。
层级多呢?怎么办?
1.递归。
缺点:代码繁琐,性能低效,每次访问实例的时候都要采用递归的形式 ,因为实例不能被缓存。
2.callback ref
主动通知 setXXXref
主动获取getXXXref
10.template和jsx的对比以及本质
(1).template 偏表现
模板语法(HTML的扩展)
数据绑定使用Mustache语法(双大括号)
(2). jsx偏逻辑
javascript的语法扩展
数据绑定使用单引号