当前位置: 代码网 > it编程>前端脚本>Vue.js > vue父组件值变化但子组件不刷新的三种解决方案

vue父组件值变化但子组件不刷新的三种解决方案

2024年05月15日 Vue.js 我要评论
父组件传递给子组件的数据,如果是一个复杂对象(例如一个数组或对象),那么子组件只会监听对象的引用而不是对象的内容。这意味着当对象的内容发生变化时,子组件不会更新。解决:1、子组件使用 watch 监听

父组件传递给子组件的数据,如果是一个复杂对象(例如一个数组或对象),那么子组件只会监听对象的引用而不是对象的内容。这意味着当对象的内容发生变化时,子组件不会更新。

解决:

1、子组件使用 watch 监听

在子组件使用 watch 监听 props传过来的值,如果发现改变,调用forceupdate刷新视图。

this.$forceupdate()

2、父组件声明布尔变量

父组件中声明一个布尔变量,数据发生变化后,切换一下变量状态,可刷新子组件视图。

3、调用splice方法

数据发生变化后,在下面调用一下splice方法修改原数组长度(索引、截取长度都为0),数组不变,但视图可成功渲染。

推荐使用这种方案

this.list.splice(0, 0)

4.使用this.$set

一、对象 使用this.$set(),修改和新增

定义数据对象:
obj: { name: "小明", age: 18, },        
 
  基本语法:
      this.$set(需要改变的对象,"需要改变的对象属性","新值")

1、对象修改

this.$set(this.obj, "name", "小刘");

控制台输出:obj: { name: "小刘", age: 18, },

2.对象新增

this.$set(this.obj, "hobby", "study");

控制台输出:obj: { name: "小明", age: 18, hobby: "study"},

3.对象新增未知属性(这里的item是传递的参数,不带引号,"reading"是参数值)

二、数组 使用this.$set(),修改和新增

定义数组包对象:
arr: [                                           
  { name: "小王", age: 18 },
  { name: "小张", age: 20 },
],
 
  定义普通数组:       
twoarr: [11, 22, 33, ],                          
 
  基本语法:
this.$set(需要修改的数组,需要修改的数组下标,{ "要修改的数组对象,一个/多个" })

1.数组修改

修改数组对象:

this.$set(this.arr, 1, { name: "小王", age: 19 });

控制台输出:arr: [ { name: "小王", age: 18 },{ name: "小王", age: 19 }, ],

修改普通数组:

this.$set(this.twoarr, 0, 99);

控制台输出:twoarr: [99, 22, 33, ],

2.数组新增

首先需要获取新增的数组长度:

let reslg = this.arr.length;  
 
this.$set(this.arr, reslg,{ name: "小紫", age: 18 },);
 
控制台输出:
arr: [ 
        { name: "小王", age: 18 },
        { name: "小张", age: 20 },
        { name: "小紫", age: 18 },
     ],

三、同理,执行删除操作时,对象或数组不更新时可以使用this.$delete

this.$delete 也是一个实例方法,用于从响应式对象中删除属性,并确保该操作也是响应式的。

使用this.$delete 可以解决vue响应式系统的另一个限制,即无法检测到通过索引直接删除数组元素的变化。通过this.$delete 方法,可以显式地告诉vue,某个属性已经被删除,从而触发视图的更新。

基本语法:
 
this.$delete(this.obj, "name")

以上就是vue父组件值变化但子组件不刷新的三种解决方案的详细内容,更多关于vue子组件不刷新的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com