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

 更新时间:2024年03月29日 09:45:02   作者:飞  
父组件传递给子组件的数据,如果是一个复杂对象(例如一个数组或对象),那么子组件只会监听对象的引用而不是对象的内容,这意味着当对象的内容发生变化时,子组件不会更新,本文给大家介绍了vue子组件不刷新的三种解决方案,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

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

解决:

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子组件不刷新的资料请关注程序员之家其它相关文章!

相关文章

  • Vue发送Formdata数据及NodeJS接收方式

    Vue发送Formdata数据及NodeJS接收方式

    这篇文章主要介绍了Vue发送Formdata数据及NodeJS接收方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vue3中vue.config.js配置及注释详解

    vue3中vue.config.js配置及注释详解

    在Vue 3.0中,与2.0版本相比有一定的差别,最明显的就是缺少了build、config文件夹,下面这篇文章主要给大家介绍了关于vue3中vue.config.js配置及注释的相关资料,需要的朋友可以参考下
    2022-08-08
  • 报错[vuex] unknown action type: userLogin问题及解决

    报错[vuex] unknown action type: userLogin问

    这篇文章主要介绍了报错[vuex] unknown action type: userLogin问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Vuejs第十三篇之组件——杂项

    Vuejs第十三篇之组件——杂项

    组件(Component)是 Vue.js 最强大的功能之一。本文重点给大家介绍vuejs组件相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • vue3?中使用?jsx?开发的详细过程

    vue3?中使用?jsx?开发的详细过程

    这篇文章主要介绍了vue3?中使用?jsx?开发,本文着重说一下在使用 .vue 文件和 .jsx 文件在使用语法上的差异,需要的朋友可以参考下
    2022-09-09
  • Vue编译器实现代码生成方法介绍

    Vue编译器实现代码生成方法介绍

    这篇文章主要介绍了Vue编译器实现代码生成方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Vue中实现父子组件双向数据流的三种方案分享

    Vue中实现父子组件双向数据流的三种方案分享

    通常情况下,父子组件的通信都是单向的,或父组件使用props向子组件传递数据,或子组件使用emit函数向父组件传递数据,本文将尝试讲解Vue中常用的几种双向数据流的使用,需要的朋友可以参考下
    2023-08-08
  • VUE+jszip如何实现下载多个文件导出为一个zip格式

    VUE+jszip如何实现下载多个文件导出为一个zip格式

    这篇文章主要介绍了VUE+jszip如何实现下载多个文件导出为一个zip格式方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Ant Design的可编辑Tree的实现操作

    Ant Design的可编辑Tree的实现操作

    这篇文章主要介绍了Ant Design的可编辑Tree的实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Vue3基于?rem?比例缩放方案示例详解

    Vue3基于?rem?比例缩放方案示例详解

    这篇文章主要介绍了Vue3基于rem比例缩放方案,本缩放方案置于hooks中即可,文中通过示例代码介绍了vue-cli3 中使用rem布局的方法,需要的朋友可以参考下
    2023-05-05

最新评论

?


http://www.vxiaotou.com