在 Vue 3 中,引入了几个新的 API 函数用于处理和访问响应式数据。以下是对这些函数的简单解释和示例,帮助您理解它们的作用和用法。

  1. shallowReactive: 用于创建浅层响应式对象,仅对对象的第一层属性进行响应式处理,不会对嵌套对象进行深层处理。这意味着当嵌套对象发生变化时,不会触发依赖更新。
import { shallowReactive } from 'vue';

const state = shallowReactive({ count: 0 });

console.log(state.count); // 0

// 更新 state.count,不会触发依赖更新
state.count = 1;

console.log(state.count); // 1

// 更新嵌套对象,不会触发依赖更新
state.nested = { value: 2 };

console.log(state.nested.value); // 2
  1. shallowReadonly: 用于创建一个只读的浅层响应式对象,可以访问对象的属性但不能修改。同样,只对对象的第一层属性进行响应式处理。
import { shallowReadonly } from 'vue';

const state = shallowReadonly({ count: 0 });

console.log(state.count); // 0

// 尝试修改 state.count,不会生效
state.count = 1;

console.log(state.count); // 0

// 尝试修改嵌套对象,不会生效
state.nested = { value: 2 };

console.log(state.nested); // undefined
  1. toRaw: 用于获取一个响应式对象的原始非响应式版本。这在某些情况下很有用,例如在需要对比对象的变化时。
import { reactive, toRaw } from 'vue';

const state = reactive({ count: 0 });

console.log(state.count); // 0

const rawState = toRaw(state);

console.log(rawState.count); // 0

// 修改原始对象,不会触发依赖更新
rawState.count = 1;

console.log(state.count); // 0
console.log(rawState.count); // 1
  1. getCurrentScope: 用于获取当前组件实例的作用域对象。作用域对象包含一些有用的属性和方法,例如 emitslots
import { getCurrentScope } from 'vue';

export default {
  mounted() {
    const scope = getCurrentScope();
    console.log(scope.emit); // emit 方法
    console.log(scope.slots); // slots 对象
  }
}

这些函数在 Vue 3 中引入了新的响应式编程模型,让开发者更方便地处理和访问响应式数据。

Vue3 中 shallowReactive、shallowReadonly、toRaw、getCurrentScope 函数详解及示例

原文地址: https://www.cveoy.top/t/topic/dHJI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录