reactive 和ref区别和原理

reactive 和ref区别和原理

在 Vue 3 中,reactive 和 ref 都是用来创建响应式数据的方法。它们的主要区别在于如何使用它们以及它们如何处理值.

reactive 是用来创建响应式对象的。当你传递一个普通的 JavaScript 对象给 reactive,它会返回一个新的响应式对象,这个对象与原始对象具有相同的属性和值,但是当这些属性被修改时,Vue 会自动跟踪这些更改并更新视图。

javascript 复制代码
import { reactive } from 'vue';

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

state.count++; // 视图会自动更新

ref 是用来创建响应式单个值的。当你传递一个值给 ref,它会返回一个具有单个属性 .value 的响应式对象,你可以通过这个属性来获取或设置值。

javascript 复制代码
import { ref } from 'vue';

const count = ref(0);

count.value++; // 视图会自动更新

在模板中,Vue 会自动解包 ref 的值,所以你可以直接使用 count 而不是 count.value。

原理方面,reactive 和 ref 都使用了 JavaScript 的 Proxy 对象来实现数据的响应式。当你访问或修改响应式对象的属性时,Proxy 会拦截这些操作并通知 Vue 进行相应的处理。

javascript 复制代码
export declare function reactive<T extends object>(target: T): UnwrapNestedRefs<T>;

export declare type UnwrapNestedRefs<T> = T extends Ref ? T : UnwrapRefSimple<T>;

declare type UnwrapRefSimple<T> = T extends Function | CollectionTypes | BaseTypes | Ref | RefUnwrapBailTypes[keyof RefUnwrapBailTypes] | {
    [RawSymbol]?: true;
} ? T : T extends ReadonlyArray<any> ? {
    [K in keyof T]: UnwrapRefSimple<T[K]>;
} : T extends object & {
    [ShallowReactiveMarker]?: never;
} ? {
    [P in keyof T]: P extends symbol ? T[P] : UnwrapRef<T[P]>;
} : T;
相关推荐
弓.长.3 小时前
React Native 鸿蒙跨平台开发:实现一个多功能单位转换器
javascript·react native·react.js
南半球与北海道#3 小时前
前端打印(三联纸票据打印)
前端·vue.js·打印
摘星编程3 小时前
React Native for OpenHarmony 实战:ToggleSwitch 切换开关详解
javascript·react native·react.js
董世昌413 小时前
深入浅出 JavaScript 常用事件:从原理到实战的全维度解析
前端
满栀5854 小时前
分页插件制作
开发语言·前端·javascript·jquery
qq_406176144 小时前
深入剖析JavaScript原型与原型链:从底层机制到实战应用
开发语言·前端·javascript·原型模式
弓.长.4 小时前
React Native 鸿蒙跨平台开发:BottomSheet 底部面板详解
javascript·react native·react.js
开开心心_Every4 小时前
免费窗口置顶小工具:支持多窗口置顶操作
服务器·前端·学习·macos·edge·powerpoint·phpstorm
摘星编程5 小时前
React Native for OpenHarmony 实战:Permissions 权限管理详解
javascript·react native·react.js
闲蛋小超人笑嘻嘻5 小时前
Vue 插槽:从基础到进阶
前端·javascript·vue.js