前言
并不是状态变量的所有更改都会引起UI的刷新,只有可以被框架监听到的修改才会引起UI刷新。下面会对对应的装饰器进行简单的测试,确认那种数据是可以被监听的。
装饰器@State
定义(装饰)变量,绑定该变量的UI会随着变量值的变化而变化,支持当前变量修改以及第一层数据的修改的监听,属于是浅监听
●装饰普通数据类型数据,修改数据都是可以正常监听的
●装饰Object类型数据,支持当前变量修改以及第一层数据的修改的监听,如下当只修改this.obj.sub.b的值是UI不会发生改变,经过打印数据已经被修改成功。
interface ObjT {
a?:string,
sub: {
b:string
}
}
@Entry
@Component
struct Index {
@State obj: ObjT = {
a:'1',
sub: {
b: '1'
}
}
build() {
Row() {
Column() {
Button(`按钮${this.obj.a}${this.obj.sub.b}`)
.onClick(() => {
this.obj.sub.b = '-'
this.obj.a = '2'
})
}
.width('100%')
}
.height('100%')
}
}
●装饰的对象是array时,可以观察到数组本身的赋值和添加、删除、更新数组的变化。但是数组单项里面的数据发生改变的时候不会被监听到。
●装饰class对象类型的变量时,可以观察到自身的赋值的变化,和其属性赋值的变化。但不支持嵌套的属性赋值观察不到。
class ClassA {
public value: string;
constructor(value: string) {
this.value = value;
}
}
class Model {
public value: string;
public name: ClassA;
constructor(