vue中组件的数据已经发生更新,但是页面未发生更新

vue 同时被 2 个专栏收录
16 篇文章 0 订阅
2 篇文章 0 订阅

vue中组件的数据已经发生更新,但是页面未发生更新

问题描述

父组件通过请求拿到数据后,在父组件中对数据进行处理,处理完成后通过props传递给子组件进行渲染,此时在子组件中修改数据后,通过vue Devtools查看数据以及修改完成,但是页面并没有刷新。
在这里插入图片描述

问题代码

父组件代码

// 父组件
<template>
  <div>
    <dataUpdate :multipleTable="data"></dataUpdate>
  </div>
</template>

<script>
import dataUpdate from "./dataUpdate";
export default {
  name: "",
  data() {
    return {
      data: [{
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-08',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-06',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-07',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }]
    }
  },
  components: {
    dataUpdate,
  },
  methods: {
    initData() {
      this.data.map((item,index) => {
        item.checked = true;
      })
    }
  },
  created() {
    this.initData();
  }
}
</script>

子组件代码

// 子组件
<template>
  <el-table
      ref="multipleTable"
      :data="multipleTable"
      tooltip-effect="dark"
      style="width: 100%">
    <el-table-column width="55">
      <template slot="header">
        <span>选择</span>
      </template>
      <template slot-scope="scope">
        <el-checkbox v-model="scope.row.checked"></el-checkbox>
      </template>
    </el-table-column>
    <el-table-column
        label="日期"
        width="120">
      <template slot-scope="scope">{{ scope.row.date }}</template>
    </el-table-column>
    <el-table-column
        prop="name"
        label="姓名"
        width="120">
    </el-table-column>
    <el-table-column
        prop="address"
        label="地址"
        show-overflow-tooltip>
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  props: {
    multipleTable: {
      type: Array,
      required: true,
    }
  },
}
</script>

问题解决方式

1,通过this.$set修改数据

通过该方式可以实现数据刷新页面也刷新,但是当数据较多时,页面会出现卡顿的现象。

2,使用强制刷新

使用this.$forceUpdate()方法进行强制刷新。

3,更换数据的处理方式。

vue的数据是双向绑定的,在组件中vue通过观察者模式对数据进行监听,但是在此问题中我们对数据通过属性追加的形式进行了修改,因此vue对追加的属性的监听会出现纰漏,所以会出现组件数据更新了但是页面并没有刷新的问题。

数据修改方式

更换数据修改方式后,子组件的数据更新页面也会及时刷新。

// 父组件
<template>
  <div>
    <dataUpdate :multipleTable="updataData"></dataUpdate>
  </div>
</template>

<script>
import dataUpdate from "./dataUpdate";
export default {
  name: "",
  data() {
    return {
      data: [{
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-08',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-06',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-07',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }],
      updataData: [],
    }
  },
  components: {
    dataUpdate,
  },
  methods: {
    initData() {
      this.data.map((item,index) => {
        // item.checked = true;
        this.updataData.push({
          date:item.date,
          name:item.name,
          address:item.address,
          checked:true,
        })
      })
    }
  },
  created() {
    this.initData();
  }
}
</script>
  • 1
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;">期末</span><span style="font-size:14px;background-color:#fbeeb8;">考点</span><span style="font-size:14px;">都对应</span><span style="font-size:14px;background-color:#fbeeb8;">详解视频</span><span style="font-size:14px;">,</span><span style="font-size:14px;"><span style="color:#e03e2d;">基础阶段</span></span><span style="font-size:14px;">内容全面,语言通俗易懂(翻译书的语言为</span><span style="font-size:14px;background-color:#fbeeb8;">人话)</span><span style="font-size:14px;">,</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;">老师精心研究</span><span style="font-size:14px;background-color:#fbeeb8;">百份</span><span style="font-size:14px;">考卷,总结每一个考点,同时结合你肯定可以听懂的骚话,</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;background-color:#fbeeb8;">扫清你的数据库系统盲区</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;"><span style="color:#e03e2d;">真题阶段</span></span><span style="font-size:14px;">为你提供</span><span style="font-size:14px;background-color:#fbeeb8;">解题思路</span><span style="font-size:14px;">,培养你的</span><span style="font-size:14px;background-color:#fbeeb8;">解题思维</span><span style="font-size:14px;">,同时</span><span style="font-size:14px;background-color:#fbeeb8;">点明考点</span><span style="font-size:14px;">,结合文档进行重点解读,加深你的印象.</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;color:#3598db;">只为你的高分,我们交个朋友!让每位学生都可以学的起!!</span> </h4> <p> <span style="font-size:14px;color:#3598db;"><img src="https://img-bss.csdnimg.cn/202103040423318088.png" alt="" width="788" height="450" /></span> </p>
©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值