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

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

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

javascript 复制代码
<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() 可重新渲染页面

javascript 复制代码
<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>
相关推荐
Larcher2 小时前
React Router 不只是页面跳转:从 SPA 路由到权限守卫的完整实践
javascript·后端
Larcher2 小时前
大模型为什么每次回答都不一样?一文搞懂 Temperature、Top K 与 Top P
javascript·后端
用户938515635075 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
CodeSheep5 小时前
稚晖君公司人事大变动,来了!
前端·后端·程序员
鱼樱前端5 小时前
用 AI 做内容变收入
前端·人工智能·ai编程
eric-sjq5 小时前
10 分钟实战:用 0.6B 本地模型生成中文网页(WanlyFrontend + 编译器全流程)
javascript·机器学习·自然语言处理·html
浮生望6 小时前
React + TypeScript 组件设计进阶:从类型约束到无状态组件的三次进化
前端
To_OC6 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
90后的晨仔6 小时前
Mac 开发 uni-app 终极方案:让安卓模拟器彻底脱离 Android Studio 独立运行
前端·vue.js
90后的晨仔6 小时前
别再搞混了!uni-app 中 node_modules 和 uni_modules 到底是什么关系?
前端