首页IT科技vue v—model原理(Vue3 v-model cannot be used on a prop,)

vue v—model原理(Vue3 v-model cannot be used on a prop,)

时间2025-09-18 01:53:51分类IT科技浏览6984
导读:在官网均可找到解决方案 单向数据流...

在官网均可找到解决方案

单向数据流

所有的 props 都遵循着单向绑定原则                ,props 因父组件的更新而变化                          ,自然地将新的状态向下流往子组件        ,而不会逆向传递                。这避免了子组件意外修改父组件的状态的情况            ,不然应用的数据流将很容易变得混乱而难以理解                          。

另外                          ,每次父组件更新后            ,所有的子组件中的 props 都会被更新到最新值        ,这意味着你不应该在子组件中去更改一个 prop        。若你这么做了                          ,Vue 会在控制台上向你抛出警告:

export default { props: [foo], created() { // ❌ 警告!prop 是只读的! this.foo = bar } }

导致你想要更改一个 prop 的需求通常来源于以下两种场景:

prop 被用于传入初始值;而子组件想在之后将其作为一个局部数据属性            。在这种情况下                 ,最好是新定义一个局部数据属性    ,从 props 上获取初始值即可:

export default { props: [initialCounter], data() { return { // 计数器只是将 this.initialCounter 作为初始值 // 像下面这样做就使 prop 和后续更新无关了 counter: this.initialCounter } } }

 2. 需要对传入的 prop 值做进一步的转换                          。在这种情况中                         ,最好是基于该 prop 值定义一个计算属性:

export default { props: [size], computed: { // 该 prop 变更时计算属性也会自动更新 normalizedSize() { return this.size.trim().toLowerCase() } } }

另一种在组件内实现 v-model 的方式是使用一个可写的                      ,同时具有 getter 和 setter 的计算属性            。get 方法需返回 modelValue prop,而 set 方法需触发相应的事件:

<!-- CustomInput.vue --> <script> export default { props: [modelValue], emits: [update:modelValue], computed: { value: { get() { return this.modelValue }, set(value) { this.$emit(update:modelValue, value) } } } } </script> <template> <input v-model="value" /> </template>

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
苹果电脑出现故障怎么办?(苹果mac电脑17种常见的问题以及解决方法) 如何用长尾优化网站SEO(长尾在网站收录中的重要性)