【ArkTS】Watch装饰器

@Watch装饰器,相当于Vue中的监听器 以及 React中使用useEffect监听变量

使用@Watch装饰器,可以监听一个数据的变化,并进行后续的响应。
使用方法:
@Watch(‘回调函数’),写在@State装饰器后(其实写在前面也行,但是写到后面更加清晰也符合规范)。

@State @Watch('change') baseNumber: number = 1
change(){
    this.res = Math.pow(this.baseNumber,this.pow)
}

注意:回调函数中一定不能直接操作监听的数据,会造成死循环

下面是一个综合案例

@Entry
@Component

struct UseWatch {
  // 将监听器写到@State装饰器后面
  @State @Watch('change') baseNumber: number = 1
  @State pow: number = 2
  @State res: number = 1
  change(){
    this.res = Math.pow(this.baseNumber,this.pow)
  }
  build() {
      Column(){
        Text(`基数:${this.baseNumber}`)
          .fontSize(40)
          .onClick(() => {
            this.baseNumber++
          })
        Divider()
        Text(`次幂:${this.pow}`)
          .fontSize(40)
          .onClick(() => {
            this.pow ++
          })
        Divider()
        Text(`结果:${this.res}`)
          .fontSize(40)
      }
      .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
  }
}

运行发现,点击 基数 时,即@Watch监听的数据发生变化时,执行了change函数
在这里插入图片描述
但是点击 次幂 时,由于@Watch监听的数据未发生改变,所以没执行change函数
在这里插入图片描述
再次点击 基数 时,重新执行change函数
在这里插入图片描述

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
是的,watch监听可能会对性能产生一定的影响。当你在Vue.js或React等框架中使用watch监听时,它会监视特定的数据变化,并在数据发生变化时执行相应的操作。然而,由于watch监听需要持续监测数据的变化,这可能会导致一些性能上的损耗。 具体而言,watch监听可能会导致以下性能问题: 1. 频繁触发:如果你的数据变化非常频繁,watch监听可能会被频繁触发,从而导致不必要的计算和操作,进而影响性能。 2. 深度侦听:默认情况下,watch监听会对数据进行深度侦听,即递归遍历对象的每个属性。对于大型的复杂对象或数组,深度侦听可能会导致性能下降。 3. 异步处理:在某些情况下,watch监听可能会异步处理数据变化。这意味着它们不会立即触发相应操作,而是等待一定时间或下一个事件循环才执行。这种异步处理可能会对性能产生一些影响。 为了避免watch监听对性能产生不利影响,可以考虑以下几点: 1. 优化watch监听:确保你的watch监听尽可能简洁和高效。避免在监听中做复杂的计算或耗时的操作。 2. 使用computed属性:如果你只是为了根据数据变化计算出一个值,并不需要执行一些副作用操作,可以考虑使用computed属性替代watch监听。computed属性会在相关数据发生变化时自动更新,而无需手动监听。 3. 减少监听的数据量:如果你的watch监听只需要关注特定的数据变化,可以通过配置选项来减少监听的数据量,以提高性能。 总之,尽管watch监听可能会对性能产生一定的影响,但在大多数情况下,这种影响是可以接受的。合理地使用和优化watch监听,可以有效地平衡功能需求和性能要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

田本初

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

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

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

打赏作者

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

抵扣说明:

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

余额充值