美文网首页
vue组件之间跨层级通信?为什么index不能作为key?

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

作者: 我性本傲 | 来源:发表于2019-04-30 18:12 被阅读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的语法扩展

    数据绑定使用单引号

    相关文章

      网友评论

          本文标题:vue组件之间跨层级通信?为什么index不能作为key?

          本文链接:https://www.haomeiwen.com/subject/vizvnqtx.html