vue父组件值变化,子组件不刷新的问题(三种方案)

7,917次阅读
没有评论

共计 1741 个字符,预计需要花费 5 分钟才能阅读完成。

目录

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

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

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

4. 使用 this.$set

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

1、对象修改

2. 对象新增

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

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

1. 数组修改

2. 数组新增

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


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

解决:

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

this.$forceUpdate()

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

3、数据发生变化后,在下面调用一下 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 父组件值变化,子组件不刷新的问题(三种方案)

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-07发表,共计1741字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)