V2版 @Event @Param 装饰器, 如何完美实现V1版 @Link 的功能?

使用@Event修改父组件的值是立刻生效的,但从父组件将变化同步回子组件的过程是异步的,即在调用完@Event的方法后,子组件内的值不会立刻变化。这是因为@Event将子组件值实际的变化能力交由父组件处理,在父组件实际决定如何处理后,将最终值在渲染之前同步回子组件。

@ComponentV2
struct Child {
  @Param index: number = 0;
  @Event changeIndex: (val: number) => void;

  build() {
    Column() {
      Text(`Child index: ${this.index}`)
        .onClick(() => {
          this.changeIndex(20);
          console.log(`after changeIndex ${this.index}`);
        })
    }
  }
}
@Entry
@ComponentV2
struct Index {
  @Local index: number = 0;

  build() {
      Column() {
        Child({
          index: this.index,
          changeIndex: (val: number) => {
            this.index = val;
          console.log(`in changeIndex ${this.index}`);
          }
        })
      }
  }
}

在上面的示例中,点击文字触发@Event函数事件改变子组件的值,打印出的日志为:

in changeIndex 20
after changeIndex 0

这表明在调用changeIndex之后,父组件中index的值已经变化,但子组件中的index值还没有同步变化。

这样就不能完美实现@Link装饰器的功能了,有啥解决方案吗?

HarmonyOS
2025-03-28 08:29:00
浏览
收藏 0
回答 0
待解决
相关问题
状态管理V1,V2可以混用么
917浏览 • 2回复 待解决
HarmonyOS V2V1明显区别?
1992浏览 • 1回复 待解决
状态管理如何v1迁移到v2
459浏览 • 0回复 待解决
HarmonyOS V2V1使用和区别?
1626浏览 • 0回复 待解决
HarmonyOS V2 @Link
1352浏览 • 0回复 待解决
HarmonyOS V2 @Event使用?
1531浏览 • 0回复 待解决
HarmonyOS V2 @Param使用?
1210浏览 • 0回复 待解决
状态管理用V1,还是v2?哪个比较好
1951浏览 • 1回复 待解决
HarmonyOS V2 @ObjectLink?
1343浏览 • 0回复 待解决
OpenHarmony-v4.0-Beta1 编译报错,求助
7354浏览 • 3回复 待解决
HarmonyOS 如何实现vue中v-if写法
986浏览 • 1回复 待解决
HarmonyOS 真机如何获取v4、v6ip栈信息
1048浏览 • 1回复 待解决