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>
相关推荐
美狐美颜sdk4 小时前
从人脸关键点到动态贴图:面具特效在美颜SDK中的实现原理
前端·图像处理·人工智能·直播美颜sdk·美颜api
我命由我123454 小时前
React Router 6 - 编程式路由导航、useInRouterContext、useNavigationType
前端·javascript·react.js·前端框架·html·ecmascript·js
威联通网络存储4 小时前
告别掉帧与素材损毁:威联通 QuTS hero 如何重塑影视后期协同工作流
前端·网络·人工智能·python
anOnion4 小时前
构建无障碍组件之Tabs Pattern
前端·html·交互设计
一招定胜负5 小时前
课堂教学质量综合评分系统
java·linux·前端
橙露5 小时前
JavaScript 异步编程:Promise、async/await 从原理到实战
开发语言·javascript·ecmascript
2301_780669865 小时前
前端logo替换开发
前端·vue.js
启山智软6 小时前
【启山智软智能商城系统技术架构剖析】
java·前端·架构
我命由我123456 小时前
React Router 6 - 嵌套路由、路由传递参数
前端·javascript·react.js·前端框架·html·ecmascript·js
十六年开源服务商6 小时前
2026年WordPress网站地图完整指南
java·前端·javascript