HarmonyOS 鸿蒙Next state和link区别
HarmonyOS 鸿蒙Next state和link区别
在开发场景中测试发现,父组件使用state修饰和子组件用state修饰,可以实现双向绑定的效果。大家知道这跟state与link双向组合有啥区别吗?
HarmonyOS 鸿蒙Next state和link区别 代码如下:
[@Component](/user/Component)
struct NumComponent {
[@State](/user/State) test: Test = new Test()
// [@Link](/user/Link) sonNum: number
build() {
Column() {
Button(`子组件+1`).onClick(() => {
this.test.parentNum++
})
Button('子组件设置固定值')
.margin(10)
.onClick(() => {
this.test.parentNum = 100
})
Text(this.test.parentNum + '')
.fontSize(18)
.fontColor(Color.Orange)
}
}
}
class Test {
parentNum: number = 1
}
[@Entry](/user/Entry)
[@Component](/user/Component)
struct TestStatePage {
[@State](/user/State) test: Test = new Test()
build() {
Column() {
Button('父组件+1')
.margin(10)
.onClick(() => {
this.test.parentNum++
})
Button('父组件设置固定值')
.margin(10)
.onClick(() => {
this.test.parentNum = 200
})
Text(this.test.parentNum + '')
.fontSize(18)
.fontColor(Color.Red)
NumComponent({ test: this.test })
}
}
}
我发现如果不是简单类型,是对象引用的话测试下来state会存在双向绑定的效果
1 回复
在HarmonyOS鸿蒙Next中,@State和@ObjectLink是两种不同的注解,用于不同的场景和目的。
@State主要用于声明组件的状态变量,这些变量驱动UI的更新。当状态变量改变时,UI会重新渲染以反映最新状态。@State装饰的变量必须初始化,不能为空值,并且支持多种数据类型,但嵌套类型及数组中的对象属性无法直接触发视图更新。
@ObjectLink则用于关联对象数据,允许组件与外部数据对象建立链接。当对象数据变化时,组件可以自动刷新以反映最新数据,这常用于数据绑定和响应式编程。与@State不同,@ObjectLink可以处理嵌套的数据结构,并在数据变化时触发UI更新。
简而言之,@State更适合用于简单的状态管理,而@ObjectLink则更适用于复杂的数据绑定和响应式场景。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。