HarmonyOS 数据传递问题
有一个自定义类型的数组,需要刷新页面,数组定义在MainView里面,传给了SubView,subView用来展示数据,但是实际没有刷新成功,只有初始的时候成功了,参考了说明文档里的Prop装饰器,代码如下:
@Observed
class Data{
id:string = ''
name:string = ''
}
@Entry
@Component
struct MainView{
@State list1:Data[] = []
@State list2:Data[] = []
@State list3:Data[] = []
recode:number = 1
handler?:number
aboutToAppear(): void {
this.handler = setInterval(()=>{
if(this.list1.length == 0){
for(let i = 0; i < 4; i++){
let data1 = new Data()
data1.id = i+''
data1.name = `name${i}`
this.list1.push(data1)
let data2 = new Data()
data2.id = i+''
data2.name = `name${i}`
this.list2.push(data2)
let data3 = new Data()
data3.id = i+''
data3.name = `name${i}`
this.list3.push(data3)
}
} else {
//用下面注释的可以更新,但是我希望只改属性值,实际对象属性很多
this.list1[0].name = `new name ${this.recode}`
// let data = new Data()
// data.id = this.list1[0].id
// data.name = `new name ${this.recode}`
// this.list1[0] = data
this.recode++
}
}, 1000)
}
aboutToDisappear(): void {
clearInterval(this.handler)
}
build() {
Column(){
SubView({mList:this.list1, name:'第一个'}).width('100%').margin({top:20})
SubView({mList:this.list2, name:'第二个'}).width('100%').margin({top:20})
SubView({mList:this.list2, name:'第三个'}).width('100%').margin({top:20})
}.width('100%')
}
}
@Component
struct SubView{
@Prop mList:Data[]
@Prop name:string
build() {
Column(){
Text(this.name).fontSize(25)
GridRow({columns:2, gutter:{x:10,y:10}}){
ForEach(this.mList,(item:Data,index:number)=>{
GridCol(){
Row(){
Text(item.id).fontColor(Color.Red)
Text(item.name).fontColor(Color.Green)
}.width('100%').justifyContent(FlexAlign.SpaceEvenly)
}
})
}.margin({top:10})
.width('100%')
}.width('100%')
}
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS 关于Provide数据传递问题咨询
268浏览 • 1回复 待解决
HarmonyOS router.getParams()数据传递
278浏览 • 1回复 待解决
HarmonyOS taskpool数据传输问题
283浏览 • 1回复 待解决
多hap调用及数据传递,有人知道吗?
852浏览 • 1回复 待解决
两个UIAbility之间可通过哪些方法实现数据传递
1962浏览 • 1回复 待解决
基于Camera Kit,获取相机流数据传递给native,进行压缩编码
930浏览 • 1回复 待解决
HarmonyOS 视频流数据传输
286浏览 • 1回复 待解决
NFC开发,HarmonyOS设备触碰nfc标签触发操作拉起应用,并把nfc标签数据传递过来
686浏览 • 1回复 待解决
HarmonyOS @Prop 和 @Link/@ObjectLink 除了在单双向修改有区别,在数据传递上有什么区别?
142浏览 • 1回复 待解决
手机如何与电脑端进行数据传输
3108浏览 • 1回复 待解决
页面关闭时如何传递数据
1865浏览 • 1回复 待解决
HarmonyOS 关于某个类默认参数的传递问题
265浏览 • 1回复 待解决
HarmonyOS oh_package.json5依赖传递问题
522浏览 • 1回复 待解决
this传递问题,该如何解决?
2035浏览 • 1回复 待解决
router传递hashmap参数问题
1449浏览 • 1回复 待解决
ArkTS USB作为数据传输的代码示例咋没看到啊!
2913浏览 • 1回复 待解决
关于JS http请求参数的传递问题
7284浏览 • 2回复 待解决
HarmonyOS 使用router.back返回时,传递参数的问题
470浏览 • 1回复 待解决
HarmonyOS BLE写数据问题
357浏览 • 1回复 待解决
HarmonyOS在使用XComponent做视频渲染,直接将yuv数据传给对应buffer后渲染视频不正常
444浏览 • 1回复 待解决
HarmonyOS 页面数据携带返回问题
251浏览 • 1回复 待解决
HarmonyOS 快页面传递
81浏览 • 2回复 待解决
HarmonyOS 数据存储中关于大数据存储问题
79浏览 • 1回复 待解决
HarmonyOS数据安全性问题
277浏览 • 1回复 待解决
因为Observed修饰的是Data对象而非对象数组,因此向子组件传递对象数组时无法观察数组内的Data变化并刷新UI,当前有两个解决方案:
第一种:在父组件中实现UI的forEach逻辑,子组件仅传递需要观察变化的变量。
第二种:使用API12提供的@ObservedV2和@Track装饰器(样机rom,ide和sdk需升级至beta1)
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-new-observedv2-and-trace-V5