HarmonyOS 鸿蒙Next:当@Link 遇上了 ForEach

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:当@Link 遇上了 ForEach

// 子组件
@Component
export struct Tile {
@Link tileViewModel: TileViewModel
build() {
Text(${this.tileViewModel.num})
.width(70)
.height(70)
.backgroundColor(this.tileViewModel.color)
}
}

// 父组件

@Component
export struct Checkerboard {
  @State tiles: Array<TileViewModel> = new Array()
// @State temp : TileViewModel = new TileViewModel()
build() {
Stack() {
ForEach(this.tiles, ( item )=> {
Tile({ tileViewModel: $item }) // 报错,[Compile Result]  Cannot find name ‘$item’. Did you mean ‘item’?
  Tile({ tileViewModel: $temp }) // 正确
}, (item) => item)
}
}
aboutToAppear() {
this.tiles.push(new TileViewModel())
}
}

难道是因为ForEach迭代出来的item,不能直接以引用的方式传递给自组件?

大佬们,有什么办法吗,感觉这种情况很常见,子组件修改数据,父组件接收到变化,然后做一些布局上的改变



关于HarmonyOS 鸿蒙Next:当@Link 遇上了 ForEach的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。

12 回复

升级HarmonyOS后,感觉手机的整体性能都有了很大的提升。

子组件这里修改为

[@ObjectLink](/user/ObjectLink) tileViewModel: TileViewModel

父组件

ForEach(this.tiles, ( idx)=> {
        Tile({ tileViewModel: this.tiles[idx] })  
      }, (item) => JSON.stringify(item))
  1. @Observed
  2. class TitleViewModel {}

你试一下修改为上面的,看看可以吗?

收到收到,晚上回家试一下,感谢大佬 (手动抱拳)

Tile({ tileViewModel: item })
切换@ObjectLink@Observed 已经能跑起来了,感谢大佬

为什么我这样写了还是会异常哟 好迷惑呀

如果数组里面是基本类型的话,子组件用[@prop](/user/prop)接收
如果是复杂对象,使用[@objectLink](/user/objectLink)/[@observed](/user/observed)
可以参考:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/arkts-observed-and-objectlink-0000001473697338-V3

感谢感谢,忘了还有objectLink了,晚上回家试一下 (手动抱拳)

感谢大佬,已经能跑起来了

为什么要加$符号,直接写item不就可以了吗?谢谢采纳

直接使用 item也会报错,提示 使用$item

看来你还不知道@Link定义的变量,传参时,要加上$符号吧

不好意思,没注意看到你用的是link传参,link传参是直接需要传父级的state的定义的变量,不能是一个常量,我帮你用另外一种实现,你可以看看

回到顶部