HarmonyOS 鸿蒙Next:执行 this.data.followed = follow 时,PostHeader并没有按预期刷新

发布于 1周前 作者 itying888 最后一次编辑是 5天前 来自 鸿蒙OS

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 回复

在HarmonyOS开发中,当你遇到修改数据后界面(如PostHeader)未按照预期刷新的问题,这通常与数据绑定和界面刷新机制有关。this.data.followed = follow; 这行代码看似是直接在组件的data对象上修改了某个属性值,但可能未触发组件的重新渲染。

HarmonyOS(鸿蒙系统)中,推荐使用官方提供的响应式数据更新方法,比如使用@Observer装饰器来自动观察数据变化并触发视图更新。确保你的组件或其父组件已经通过@Observer装饰,或者你在修改数据后手动调用了视图更新的方法(如果有的话)。

此外,如果PostHeader组件是通过某些异步方式(如异步数据请求)更新内容的,请确保数据更新和视图更新的顺序是正确的。例如,你可以在数据加载完毕后,在回调函数内设置数据并确保界面更新。

最后,检查是否有任何可能影响渲染的性能问题或渲染条件判断错误(如if语句中条件始终为假),这些都可能导致视图不更新。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。这个地址看起来是一个示例地址,请替换为HarmonyOS官方支持的实际地址。

回到顶部