vue2中 因响应式原理采用Object.defineProperty数据劫持 导致几种方式改变数据页面 不重新渲染的解决办法

1. vue2 中通过索引修改数组数据不会重新渲染页面

使用数组方法可重新渲染页面

<template>
    <div>
        <ul>
            <li v-for="item in names" :key="item">{{ item }}</li>
        </ul>
        <div><button @click="replaceRoles">replace</button></div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            names: ['卡罗', '老蔫儿', '贼大胆'],
        };
    },
    methods: {
        replaceRoles() {
            // this.names[0] = '卡梅利多'; // vue 中无法通过索引重新渲染页面
            this.names.splice(0, 1, '卡梅利多'); // 只能通过数组方法改变数据,才可重新渲染页面
        },
    },
};
</script>

2. vue2 中增加和删除对象的属性不会重新渲染页面

使用 this.$set()、this.$delete() 可重新渲染页面

<template>
    <div>
        <ul>
            <li>{{ userinfo.username }}</li>
            <li>{{ userinfo.password }}</li>
        </ul>
        <div><button @click="deleteInfo">deleteInfo</button></div>
        <div><button @click="addInfo">addInfo</button></div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            userinfo: {
                username: '卡梅利多',
                password: '123456',
            },
        };
    },
    methods: {
        deleteInfo() {
            // delete this.userinfo.username; // 对象属性的删除无法重新渲染页面,需要使用 this.$delete()
            // console.log(this.userinfo);
            this.$delete(this.userinfo, 'username');
        },
        addInfo() {
            // this.userinfo.username = '卡梅利多'; // 对象属性的增加无法重新渲染页面,需要使用 this.$set()
            // console.log(this.userinfo);
            this.$set(this.userinfo, 'username', '卡梅利多');
        },
    },
};
</script>

相关推荐

  1. 理解vue2响应数据

    2024-03-17 18:32:07       15 阅读
  2. Vue响应渲染 watcher

    2024-03-17 18:32:07       32 阅读
  3. Vue响应渲染 watcher

    2024-03-17 18:32:07       30 阅读
  4. Vue改变数据页面刷新问题

    2024-03-17 18:32:07       46 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 18:32:07       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 18:32:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 18:32:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 18:32:07       18 阅读

热门阅读

  1. 简单理解promise。。。

    2024-03-17 18:32:07       22 阅读
  2. python爬取B站CC字幕(隐藏式字幕)

    2024-03-17 18:32:07       18 阅读
  3. 微服务的无状态、版本控制向后兼容、流量整型

    2024-03-17 18:32:07       16 阅读
  4. IBatis与MyBatis区别

    2024-03-17 18:32:07       18 阅读
  5. MongoDB聚合运算符:$expMovingAvg

    2024-03-17 18:32:07       14 阅读