工作 vue的单向数据流

Posted by CodingWithAlice on May 20, 2020

工作 vue的单向数据流

场景:写的弹窗组件,在点击一次右上角关闭按钮后,无法再通过之前的点击按钮触发展示

参考:弹窗组件中对props传入的显示值进行了更改,违背了vue单向数据流

总结:子组件内不应该去改变prop,全部通过$emit()传出,在父组件中进行处理

搬运vue官网–单向数据流

​ 所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父组件可以随意向子组件传递参数,但是子组件不可以修改父组件传递过来的参数,原因是因为父组件传递过来的数据是对象的时候,可能有多个子组件调用,若是子组件可以直接修改的话,就会影响到其他子组件。

​ 额外的,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。

这里有两种常见的试图变更一个 prop 的情形:

1、这个 prop 用来传递一个初始值;这个子组件接下来希望将其作为一个本地的 prop 数据来使用。在这种情况下,最好定义一个本地的 data property 并将这个 prop 用作其初始值:

props: ['initialCounter'],
data: function () {
  return {
    counter: this.initialCounter
  }
}

2、这个 prop 以一种原始的值传入且需要进行转换。在这种情况下,最好使用这个 prop 的值来定义一个计算属性:

props: ['size'],
computed: {
  normalizedSize: function () {
    return this.size.trim().toLowerCase()
  }
}