HarmonyOS 鸿蒙Next:如何监测@track装饰的变量发生变化?类似@Watch

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:如何监测@track装饰的变量发生变化?类似@Watch 如何监测@track装饰的变量发生变化?类似@Watch

2 回复

检测业务变化,不涉及到UI层面,可以直接在viewModel层完成 使用Listener可以完成在viewModel层进行业务逻辑的处理

class ViewModel {
  someValue: number = 10
  cbs: ((p:number)=>void)[] = []
  addListener(cb: (p:number)=>void) {
    this.cbs.push(cb)
  }
  removeListener(cb: (p:number)=>void) {
    let index = this.cbs.indexOf(cb)
    this.cbs.splice(index, 1)
  }
  changeValue( val: number) {
    this.someValue = val;
    this.cbs.forEach((cb: ((p:number)=>void)) => {
      cb(this.someValue)
    })
  }
}
@Entry
@Component
struct Index {
  @State viewModel: ViewModel = new ViewModel()
  aboutToAppear(): void {
    this.viewModel.addListener((someValue): void=>this.onSomeValueChange(someValue))
  }
  aboutToDisappear(): void {
    this.viewModel.removeListener((someValue): void=>this.onSomeValueChange(someValue))
  }
  build() {
    Row() {
      Column() {
        Button('赋值').onClick(() => {
          this.viewModel.changeValue(40)
        })
      }
      .width('100%')
    }
    .height('100%')
  }
  // 触发回调
  onSomeValueChange(someValue:number) {
    console.log('-----看看变化'+someValue)
  }
}

更多关于HarmonyOS 鸿蒙Next:如何监测@track装饰的变量发生变化?类似@Watch的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,如果你想要监测使用@track装饰的变量发生变化,类似于Vue中的@Watch功能,你可以利用鸿蒙提供的响应式系统和观察者机制。

鸿蒙的响应式系统允许你定义响应式数据,并在数据变化时执行相应的逻辑。虽然鸿蒙没有直接提供与Vue中@Watch完全对应的装饰器,但你可以通过实现一个观察者模式来达到类似的效果。

具体实现步骤如下:

  1. 定义响应式变量:使用鸿蒙的响应式API定义你的变量,这些变量会在变化时触发更新。

  2. 实现观察者逻辑:你可以定义一个观察者函数,该函数会在响应式变量变化时被调用。这通常需要在变量变化时手动触发,或者通过框架提供的生命周期钩子实现。

  3. 绑定观察者:将你的观察者函数与响应式变量绑定,确保在变量变化时能够执行相应的逻辑。

由于鸿蒙的响应式系统可能随版本更新而有所变化,建议查阅最新的鸿蒙开发文档以获取最准确的实现方法。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部