vue中Object.freeze() 优化数据

文章目录

基本概念

  • 阻止修改现有的属性,也意味着响应系统无法再追踪变化。

  • Object.freeze() 方法可以冻结一个对象,不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。该方法返回被冻结的对象。

  • freeze冻结了的对象,vue不会做getter和setter的转换。

案例

<body>
    <div id="app">
        <ul>
            <li v-for="(item, index) in list" :key="item.name">
                {{item.name}}
            </li>
        </ul>
        <button @click="add">add</button>
    </div>
</body>
<script>
    const App = {
        data() {
            return {
                list: Object.freeze([{
                        name: "wxj0"
                    },
                    {
                        name: "wxj1"
                    }
                ])
            }
        },
        methods: {
            dataChange() { // 事件能触发单data中的数据不会被修改
                console.log(this.list.name);
            },
            add() {
                // 不能修改,会报错
                this.list.push({
                    name: "new456" + Date.now()
                })
            },
        }
    }
    const app = Vue.createApp(App)
    app.mount('#app')
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue ,`this.$set` 是用来在响应式对象上动态添加属性并确保其响应性的方法。如果你在使用 `this.$set` 时遇到了报错,可能是因为你没有正确地使用它或者在错误的上下文使用它。 以下是一些常见导致报错的情况和解决方案: 1. 错误使用语法:确保正确使用 `this.$set` 的语法。通常,`this.$set` 方法接受三个参数:对象、属性名和属性值。例如: ```javascript this.$set(this.obj, 'propertyName', value); ``` 请检查你的代码是否遵循这个语法。 2. 非响应式对象:`this.$set` 只能用于 Vue 的响应式对象。如果你尝试在普通的 JavaScript 对象上使用 `this.$set`,将会导致报错。确保你要添加属性的对象是 Vue 组件的 data、computed 或 props 的一个。 3. 异步更新问题:Vue 的响应式系统通常在下一个事件循环异步更新状态。如果你在同一个事件循环多次调用 `this.$set`,可能会导致报错。如果你需要多次更新对象的属性,请考虑使用 `Vue.set` 方法而不是 `this.$set`。 ```javascript Vue.set(this.obj, 'propertyName', value); ``` 4. 对象已被冻结:如果你试图向一个被冻结的对象添加属性,也会导致报错。确保你要更新的对象没有被 `Object.freeze` 冻结。 尝试检查以上情况,看是否能解决你遇到的问题。如果问题仍然存在,请提供更多的代码细节和报错信息,以便我们能够帮助你找到问题所在。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值