在 OpenHarmony(ArkUI,eTS/ArkTS) 中,“菜单刷新”通常指 菜单数据变化后,界面能实时更新。不同场景刷新方式不同,下面按常见情况说明。
@State 驱动菜单刷新(最常用)只要菜单数据用 @State 修饰,数据变化就会自动刷新。
@Entry
@Component
struct MenuPage {
@State menuItems: string[] = ['首页', '设置']
build() {
Column() {
ForEach(this.menuItems, (item) => {
Text(item)
.fontSize(20)
.margin(10)
})
Button('刷新菜单')
.onClick(() => {
// 修改数据,自动刷新
this.menuItems = ['首页', '设置', '关于']
})
}
}
}
✅ 关键点
@Statethis.menuItems = [...])@Link / @Prop 跨组件刷新菜单@Entry
@Component
struct Parent {
@State items: string[] = ['A', 'B']
build() {
Child({ items: this.items })
}
}
@Component
struct Child {
@Prop items: string[]
build() {
Column() {
ForEach(this.items, item => Text(item))
}
}
}
父组件修改 items,子菜单自动刷新。
@State showMenu: boolean = false
@State menuList: string[] = ['复制', '粘贴']
Button('菜单')
.onClick(() => {
this.showMenu = true
})
.bindMenu(this.showMenu, () => {
ForEach(this.menuList, item => {
MenuItem(item)
})
})
刷新方式:
this.menuList = ['复制', '粘贴', '删除']
this.showMenu = false
this.showMenu = true
Text('长按我')
.bindContextMenu(() => {
ForEach(this.menuList, item => {
MenuItem(item)
})
})
⚠️ ContextMenu 每次弹出都会重新执行 builder,数据自动最新
@State tabs: string[] = ['新闻', '视频']
Tabs() {
ForEach(this.tabs, tab => {
TabContent() {
Text(tab)
}.tabBar(tab)
})
}
this.tabs = ['新闻', '视频', '直播']
| 原因 | 解决 |
|---|---|
没用 @State |
加装饰器 |
| 只改数组元素 | 重新赋值数组 |
用 let / var |
用 @State |
| 菜单已弹出 | 先关闭再打开 |
OpenHarmony 菜单刷新 = 数据用
@State+ 数据变化即可自动刷新
如果你用的是 具体组件(Tabs / List / Menu / Navigation),可以告诉我,我给你针对性示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。