vue3手写ref深的ref
Posted web半晨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue3手写ref深的ref相关的知识,希望对你有一定的参考价值。
1、函数实现
// 定义一个reactive函数,传入一个目标对象
function reactive(target)
// 判断当前的目标对象是不是object类型(对象/数组)
if (target && typeof target === 'object')
// 对数组或者是对象中所有的数据进行reactive的递归处理
// 先判断当前的数据是不是数组
if (Array.isArray(target))
// 数组的数据要进行遍历操作0
target.forEach((item, index) =>
// 如果数组中还有数组
// 使用递归
target[index] = reactive(item);
);
else
// 再判断当前的数据是不是对象
// 对象的数据也要进行遍历的操作
Object.keys(target).forEach(key =>
target[key] = reactive(target[key]);
);
return new Proxy(target, reactiveHandler);
// 如果传入的数据是基本类型的数据,那么就直接返回
return target;
// 定义一个ref函数
function ref(target)
target = reactive(target);
return
_is_ref: true, // 标识当前的对象是ref对象
// 保存target数据保存起来
_value: target,
get value()
console.log('劫持到了读取数据');
return this._value;
,
set value(val)
console.log('劫持到了修改数据,准备更新界面', val);
this._value = val;
2、函数调用
const ref2 = ref(
name: '小明',
car:
color: 'red'
);
console.log(ref2.value);
// 劫持到
ref2.value = '==';
// 劫持到
ref2.value.car = '==';
以上是关于vue3手写ref深的ref的主要内容,如果未能解决你的问题,请参考以下文章