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}`);
          }
        })
      }
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

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

in changeIndex 20
after changeIndex 0
  • 1.
  • 2.

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

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

HarmonyOS
3天前
浏览
收藏 0
回答 0
待解决
相关问题
HarmonyOS V2V1明显区别?
1202浏览 • 1回复 待解决
HarmonyOS V2V1使用和区别?
1061浏览 • 0回复 待解决
HarmonyOS V2 @Link
888浏览 • 0回复 待解决
HarmonyOS V2 @Param使用?
655浏览 • 0回复 待解决
HarmonyOS V2 @Event使用?
887浏览 • 0回复 待解决
HarmonyOS V2 @ObjectLink?
875浏览 • 0回复 待解决
OpenHarmony-v4.0-Beta1 编译报错,求助
5780浏览 • 3回复 待解决
HarmonyOS 如何实现vue中v-if写法
473浏览 • 1回复 待解决
HarmonyOS 适老版(大字实现方案
583浏览 • 1回复 待解决