Vue数组踩坑日记props对象里面的部分数组改变无法重新渲染,视图没有根据数据变化。

首先声明一个组件然后往组件里面丢对象
在这里插入图片描述
html是在渲染以后修改数组
在这里插入图片描述
js代码更改对象中的数组
在这里插入图片描述
**

  1. vue有说明在数组直接通下标改变是不会被观察到的所以我试了(vue.set但是我并不是通过下标改变而是直接改变整个组数所以一样没用)**

2. 然后我又试试了强制更新this.$forceUpdate()这个倒是生效

  1. 后面我又尝试使用push来试试结果一样失败了。
    但是具体为什么还是没找到原因,后面去观察了一下两个数组再赋值前是不是有什么不同,真的发现了不同,一个数组里面带了Observer这种可以正常被观察到,并且重新渲染在这里插入图片描述

而另外一种不带Observer属性的是无法被观察到的
在这里插入图片描述

这个是因为父组件根本没有这个属性 zbyaoqiu

!是我这个按钮在被我点击的时候才设置的属性,本属性属于组件自己,因为组件的特性改变组件自己的属性并不会影响到父组件。所以只要在父组件创建的生命周期cerated设置属性就可以了

看到这么多人访问这个应该和我一样是最常见的bug那我再补充一些。如果数据变了视图没刷新可能是因为以下问题

  1. 数据操作没有用vue的方法所以视图无法刷新 使用Vue.set Vue.delete 即可解决
  2. 视图有缓存导致页面没有刷新 这个问题说来话长 解决方法就是给元素加个唯一key <div :key='id'>hello world<div>
  3. 强制刷新视图函数 this.$forceUpdate() (这个方法不推荐,主要是 1-2引起的,如果是1引起的使用这个方法无效 2引起的有效)
  4. 还有就是自己操作不当,如同本文父子组件通信中在子组件里面新增了数组父亲当然不知道
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,如果父组件要向子组件传递一个数组,并且子组件需要将其赋给对象中的一个数组,并触发表格(table)的视图更新,你可以使用props数组传递给子组件,并在子组件中使用计算属性将其赋值给对象中的数组。同时,在子组件的模板中,使用v-for指令来渲染表格。 下面是一个示例,展示了父组件向子组件传递一个名为"list"的数组,并在子组件中将其赋给对象中的一个名为"tempList"的数组,并触发表格的视图更新: 父组件: ```vue <template> <div> <ChildComponent :list="parentList" /> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { data() { return { parentList: ['Apple', 'Banana', 'Orange'], }; }, components: { ChildComponent, }, }; </script> ``` 子组件: ```vue <template> <div> <table> <thead> <tr> <th>Item</th> </tr> </thead> <tbody> <tr v-for="item in tempList" :key="item"> <td>{{ item }}</td> </tr> </tbody> </table> </div> </template> <script> export default { props: ['list'], computed: { tempList() { return this.list; }, }, }; </script> ``` 在上述示例中,父组件通过`:list="parentList"`将"parentList"数组传递给子组件props。子组件接收到这个数组后,使用计算属性(tempList)将其赋给对象中的数组。在子组件的模板中,我们使用`v-for`指令遍历"tempList"数组,并为每个数组项指定一个`key`,以确保在数组发生变化时可以正确地更新表格的视图。 请注意,父组件中的数组改变时,子组件props也会相应地更新,因此子组件的计算属性(tempList)会重新计算,并触发表格的视图更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值