手写shallowRef 与 ref


        自定义shallowRef

       //在js中操作数据: xxx.value,所以要给这个基本数据类型包裹一个对象
       //对象value里面是他的值
        function shallowRef(target) {
          const result = {
            _value: target, // 用来保存数据的内部属性
            _is_ref: true, // 用来标识是ref对象
            get value () {
              return this._value
            },
            set value (val) {
              this._value = val
              console.log('set value 数据已更新, 去更新界面')
            }
          }
        
          return result
        }
        
        /* 
        自定义ref
        */
        function ref(target) {
            //判断是不是对象是的话avlue里面就用reactive来进行代理
          if (target && typeof target==='object') {
            target = reactive(target)
          }
          const result = {
            _value: target, // 用来保存数据的内部属性
            _is_ref: true, // 用来标识是ref对象
            get value () {
              return this._value
            },
            set value (val) {
              this._value = val
              console.log('set value 数据已更新, 去更新界面')
            }
          }
        
          return result
        }
        
        /* 测试自定义shallowRef */
        const ref3 = shallowRef({
          a: 'abc',
        })
        ref3.value = 'xxx'
        ref3.value.a = 'yyy'
        
        
        /* 测试自定义ref */
        const ref1 = ref(0)
        const ref2 = ref({
          a: 'abc',
          b: [{x: 1}],
          c: {x: [11]},
        })
        ref1.value++
        ref2.value.b[0].x++
        console.log(ref1, ref2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鸡腿最好吃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值