HarmonyOS 鸿蒙Next state和link区别

发布于 1周前 作者 bupafengyu 最后一次编辑是 5天前 来自 鸿蒙OS

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

回到顶部