在 OpenHarmony(ArkUI)里,“列表组件”通常指 List + ForEach 的写法。排序本质上不是 List 组件本身的功能,而是对数据源进行排序,List 只是按数据顺序渲染。
下面按常见场景给你说明。
@Component
struct MyList {
@State data: number[] = [3, 1, 2, 5, 4]
build() {
List() {
ForEach(this.data, (item: number) => {
ListItem() {
Text(item.toString())
}
})
}
}
aboutToAppear() {
// 升序
this.data.sort((a, b) => a - b)
}
}
interface User {
name: string
age: number
}
@Component
struct UserList {
@State users: User[] = [
{ name: 'Tom', age: 20 },
{ name: 'Jack', age: 18 },
{ name: 'Lucy', age: 25 }
]
build() {
List() {
ForEach(this.users, (user: User) => {
ListItem() {
Text(`${user.name} - ${user.age}`)
}
})
}
}
sortByAge() {
this.users.sort((a, b) => a.age - b.age)
}
}
Button('按年龄排序')
.onClick(() => {
this.users.sort((a, b) => a.age - b.age)
})
✅ 因为
users是@State,排序后会自动刷新 List
@State asc: boolean = true
toggleSort() {
this.asc = !this.asc
this.users.sort((a, b) =>
this.asc ? a.age - b.age : b.age - a.age
)
}
this.users.sort((a, b) =>
a.name.localeCompare(b.name)
)
❌ 不要试图让 List 组件自己排序
❌ 不要在 ForEach 里写排序逻辑
✅ 永远先排数据,再渲染
@Observed + ObjectLinksortUtil如果你用的是 ArkTS / eTS / 声明式 UI / 元服务,或者想要下拉刷新排序 / 分组排序,可以告诉我具体场景,我给你写完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。