@Watch装饰器,相当于Vue中的监听器 以及 React中使用useEffect监听变量
使用@Watch装饰器,可以监听一个数据的变化,并进行后续的响应。
使用方法:
@Watch(‘回调函数’),写在@State装饰器后(其实写在前面也行,但是写到后面更加清晰也符合规范)。
@State @Watch('change') baseNumber: number = 1
change(){this.res = Math.pow(this.baseNumber,this.pow)
}
注意
:回调函数中一定不能直接操作监听的数据,会造成死循环
下面是一个综合案例
@Entry
@Componentstruct UseWatch {// 将监听器写到@State装饰器后面@State @Watch('change') baseNumber: number = 1@State pow: number = 2@State res: number = 1change(){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函数