vue组件之间跨层级通信?为什么index不能作为key?

2019-04-30  本文已影响0人  我性本傲

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的语法扩展

数据绑定使用单引号

上一篇下一篇

猜你喜欢

热点阅读