小程序在page中使用数据监听(不需要setData)

本文介绍如何在小程序的Page中实现数据监听,避免使用setData。通过深度监听数据变化,实现在输入框输入数值后自动显示其平方,探讨了watch的实现原理,并对比了Proxy的使用场景和限制。
摘要由CSDN通过智能技术生成

小程序在page中使用数据监听(不需要setData)

众所周知,在小程序中如果想要监听数据,必须得使用组件 Component,它提供了observers 方法用来监听数据变化。但是,其中比较让人不舒服的是,它监听的仅仅是 setData 之后变化的数据。一般来说,在小程序中有些数据是不需要setData 渲染的,比如:input事件,输入框中本身已经展示了数据,是不需要再使用 value 绑定的。

那么问题来了,既然不 setData,那我要是想让另一个数跟着它变怎么办,比如说:我在输入框输入一个数字,它要在上方给我显示它的平方。这个实现起来很简单——将输入的值平方一下再 setData 呗。好吧,这种方法的确可以实现,但是,这样做太弟弟了。(至于为什么太弟弟了,因为不这样说我没办法引出watch数据监听)

大家应该都知道, vue2 中使用 Object.defineProperty 数据劫持来进行双向绑定。那实现 watch 的原理也就呼之欲出了。 Object.defineProperty 中我们用到的属性只需要 setget。不多累述,其余的几个属性可以自行搜索。

const obj = {
   james:99,melo:97,wade:98,paul:96}
let val
Object.defineProperty(obj,'melo',{
   
    get(){
   
        return val
    },
    set(new_){
   
        console.log('melo的值发生了改变',new_)
        val = new_
    }
})
//---------------------------------

obj.melo = 80

//Output: melo的值发生了改变80

从上面可以看到,当监听的数据发生改变时,set() 就会通知我们,所以,只需要在 set 中添加一个回调函数就可以将改变后的值回调给我们了。下面我们改变 obj 的深度来尝试一下。

const obj = {
   
    james:{
   
        Miami:{
   first:99
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值