在Vue中,Object.freeze()是一个用于冻结对象的函数,它可以防止对象的属性被修改或删除。这在Vue中非常重要,因为Vue需要保证数据不可变,以确保组件的状态始终一致。
下面是一个使用Object.freeze()的示例:
const data = { name: 'Laughing', age: 31 } Object.freeze(data) data.name // 抛出一个TypeError,因为数据已冻结 data.age = 25 // 抛出一个TypeError,因为数据已冻结 delete data.age // 抛出一个TypeError,因为数据已冻结在Vue中,你可以使用Object.freeze()来确保组件中的数据不可变。例如,你可以在组件的data选项中使用Object.freeze()来创建不可变的初始数据:
const data = { name: 'John', age: 30 } const frozenData = Object.freeze(data) new Vue({ el: '#app', data: frozenData, // ... })这将确保组件中的数据始终保持不变,即使你尝试修改它。这对于确保组件的状态始终一致非常重要。
总结:
针对一次性的列表渲染操作,往往从接口拿到数据后直接渲染到页面,后续并不需要产生响应式变化跟踪。因此可以使用 Object.freeze() 冻结数据,避免 Vue 对数据内部进行深度响应,从而提高性能:
// 示例代码: initData() { fetch(xxxxxx) .then(res => { this.mylist = Object.freeze(res) }) }经过 freeze 操作后,Vue 将不会再对 res 内部结构的数据作响应,而对 mylist 整体的更新仍能响应(因为它在通过 data 等方式传入 Vue 框架时做了响应代理)。此技巧对 Vue2 响应式的 setter/getter 拦截或 Vue3 的代理对象均有效,特别适合大数据量且后续不存在内部数据更新的列表渲染!