HarmonyOS 鸿蒙Next:执行 this.data.followed = follow 时,PostHeader并没有按预期刷新
HarmonyOS 鸿蒙Next:执行 this.data.followed = follow 时,PostHeader并没有按预期刷新
【关键字】
item / this.data.followed = follow / 页面刷新
【问题描述】
在列表的item上有一个关注按钮,点击列表item,跳转进入详情页,然后点击详情里面关注按钮(按钮状态变为私聊),当执行 this.data.followed = follow 时,PostHeader并没有按预期刷新,但是List的首屏数据可以。addObserver回调是正确的。这种情况是机制导致的,还是代码逻辑存在问题。
Demo 代码如下:
// 1.ets
@State data: PostBean = new PostBean()
itemClickAreaAction?: ((item: PostBean, clickArea: PostClickArea) => void) | null;
aboutToAppear(): void {
let squareItemFollowKey = squareItemFollowCallback_${<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.data.id}
ObserverHelper.addObserver(squareItemFollowKey, (follow: boolean)=>{
console.log(‘fuzhijun’, 'addObserver aboutToAppear PostItem '+follow)
this.data.followed = follow
})
}
build() {
Column() {
//列表关注按钮在PostHeader中,bean定义的变量也是被@State修饰的
PostHeader({ bean: this.data, fromSquare: this.fromSquare, itemClickAreaAction: this.itemClickAreaAction })
}
}
【解决方案】
目前是列表到底加载之后,会出现这样的情况。
以下是list添加数据的代码:
@Component
export struct PostList {
@Link dataSet: CommonDataSource<PostBean>
@Consume isReachStart: boolean
scroller: Scroller = new Scroller()
fromSquare: boolean = true
build() {
List({ space: 20, scroller: this.scroller }) {
LazyForEach(this.dataSet, (item: PostBean, index: number) => {
ListItem() {
PostItem({ data: item, fromSquare: this.fromSquare })
}
}, (item: PostBean, index: number) => JSON.stringify(item) + index)
}
.scrollBar(BarState.Off)
.onReachStart(() => {
this.isReachStart = true
})
.divider({ strokeWidth: 0 })
.edgeEffect(EdgeEffect.None) // 必须设置列表为滑动到边缘无效果
}
}
1 回复