vue官网在讲解props的单向数据流时提到:
额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。
但是我测试,直接修改props的值,并未给出任何警告。
大家有遇到吗?
vue官网在讲解props的单向数据流时提到:
额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。
但是我测试,直接修改props的值,并未给出任何警告。
大家有遇到吗?
接着往下看
在两种情况下,我们很容易忍不住想去修改 prop 中数据:
Prop 作为初始值传入后,子组件想把它当作局部数据来用;
Prop 作为原始数据传入,由子组件处理成其它数据输出。
对这两种情况,正确的应对方式是:
定义一个局部变量,并用 prop 的值初始化它:
props: ['initialCounter'],
data: function () {
return { counter: this.initialCounter }
}
定义一个计算属性,处理 prop 的值并返回:
props: ['size'],
computed: {
normalizedSize: function () {
return this.size.trim().toLowerCase()
}
}
5 回答8.3k 阅读
2 回答10.5k 阅读✓ 已解决
2 回答12.8k 阅读✓ 已解决
2 回答10.6k 阅读✓ 已解决
1 回答5.2k 阅读✓ 已解决
4 回答6.2k 阅读
5 回答1.4k 阅读✓ 已解决
?栗子来了,请查收
两个按钮,一个是改变值类型的prop,一个是改变引用类型的prop,你会发现,第一个按钮按了会报错,值不会被改变,但是按了第二个,值改变了,并且没有报错,那是因为你父组件传递过去的只是一个引用,说白了就是传了一个内存地址(指针)过去,子组件改变上面的值,并没有改变指针,所以系统认为他没有引起父组件的值改变,于是就没有报错提示了。