在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

harmony OS NEXT-評論功能小demo

程奕紅 ? 來源:jf_34770892 ? 作者:jf_34770892 ? 2025-04-27 17:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

# 評論頁面小demo

## 效果展示

![img](https://i-blog.csdnimg.cn/img_convert/f574e0b18325ee466938a3cb70530209.gif)

## 1.拆解組件,分層搭建

我們將整個評論頁面拆解為三個組件,分別是頭部導航,評論項,回復三個部分,然后統一在index界面導入

![image-20250304150652225](https://i-blog.csdnimg.cn/img_convert/2e234f0fe986014368d8d7f138577e6a.png)

## 2.頭部導航界面搭建

![image-20250304151026576](https://i-blog.csdnimg.cn/img_convert/c876aa04a505a3c3203c03984a2e1504.png)

```ts
@Preview
@Component
struct HmNavBar {
// 屬性:是可以被傳遞值進行替換的
build() {
Stack({ alignContent: Alignment.Start }) {
Row() {
Image($r('sys.media.ohos_ic_compnent_titlebar_back'))
.width('100%')
.aspectRatio(1)
}.width(24)
.padding(4)
.borderRadius(12)
.backgroundColor('#f5f7f8')


Text('評論回復')//先設置占頁面的100% 然后在居中對齊
.width('100%')
.textAlign(TextAlign.Center)
}
.width('100%')
.padding(20)
}
}

export { HmNavBar }
```

* 上述UI界面搭建很簡單,但要注意一點就是在有了返回按鈕的情況下如何讓評論回復在整行居中,我們可以采用Stack布局,或者是在右邊也放置一個寬度為24的容器

## 3.評論項搭建

![image-20250304151409576](https://i-blog.csdnimg.cn/img_convert/997aa72cb25725d19e970993c4ff2fcd.png)

```ts
@Preview
@Component
struct HmReplay {
build() {
Row({ space: 8 }) {
Image($r('app.media.Cover1'))
.width(60)
.borderRadius(30)
Column({ space: 5 }) {
Text('遇到困難睡大覺')
.fontSize(18)
.fontWeight(700)
Text('你已經是一個成熟的評論了要學會自己打破零回復!')
.fontSize(18)

Row() {
Row() {
Text('10-21.IP 屬地安徽')
.fontColor('#ffcfcfcf')
}

Row({ space: 5 }) {
Image($r('app.media.love'))
.width(24)
.aspectRatio(1)
Text('100')
.fontColor('#ffcfcfcf')
}
}.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
}.layoutWeight(1)
.alignItems(HorizontalAlign.Start)

}.width('100%')
.padding(20)
.height(120)
.alignItems(VerticalAlign.Top)

}
}

export { HmReplay }
```

## 4.評論列表搭建

### 4.1.1分割線+回復 部分

```ts
Row() {
Text('回復 (7)')
}.padding(12)
.border({
width: {
top: 6
},
color: 'rgb(246,246,246)'
})
.width('100%')
```

### 4.1.2 評論列表

#### 1.導入對應的數據結構

```ts
@State commentList: ReplyItemModel[] = [
new ReplyItemModel({
id: 1,
avatar: 'https://picx.zhimg.com/027729d02bdf060e24973c3726fea9da_l.jpg?source=06d4cd63',
author: '偏執狂-妄想家',
content: '更何況還分到一個摩洛哥[驚喜]',
time: '11-30',
area: '海南',
likeNum: 34,
likeFlag: false
}),
new ReplyItemModel({
id: 2,
avatar: 'https://pic1.zhimg.com/v2-5a3f5190369ae59c12bee33abfe0c5cc_xl.jpg?source=32738c0c',
author: 'William',
content: '當年希臘可是把1:0發揮到極致了',
time: '11-29',
area: '北京',
likeNum: 58,
likeFlag: false
}),
new ReplyItemModel({
id: 3,
avatar: 'https://picx.zhimg.com/v2-e6f4605c16e4378572a96dad7eaaf2b0_l.jpg?source=06d4cd63',
author: 'Andy Garcia',
content: '歐洲杯其實16隊球隊打正賽已經差不多,24隊打正賽意味著正賽階段在小組賽一樣有弱隊。',
time: '11-28',
area: '上海',
likeNum: 10,
likeFlag: false
}),
new ReplyItemModel({
id: 4,
avatar: 'https://picx.zhimg.com/v2-53e7cf84228e26f419d924c2bf8d5d70_l.jpg?source=06d4cd63',
author: '正宗好魚頭',
content: '確實眼紅啊,亞洲就沒這種球隊,讓中國隊刷',
time: '11-27',
area: '香港',
likeNum: 139,
likeFlag: false
}),
new ReplyItemModel({
id: 5,
avatar: 'https://pic1.zhimg.com/v2-eeddfaae049df2a407ff37540894c8ce_l.jpg?source=06d4cd63',
author: '柱子哥',
content: '我是支持擴大的,亞洲杯歐洲杯擴到32隊,世界杯擴到64隊才是好的,世界上有超過200支隊伍,歐洲區55支隊伍,亞洲區47支隊伍,即使如此也就六成出現率',
time: '11-27',
area: '舊金山',
likeNum: 29,
likeFlag: false
}),
new ReplyItemModel({
id: 6,
avatar: 'https://picx.zhimg.com/v2-fab3da929232ae911e92bf8137d11f3a_l.jpg?source=06d4cd63',
author: '飛軒逸',
content: '禁止歐洲杯擴軍之前,應該先禁止世界杯擴軍,或者至少把亞洲名額一半給歐洲。',
time: '11-26',
area: '里約',
likeNum: 100,
likeFlag: false
})
]
//先定義一個接口 然后可以使用接口轉換工具轉換成對應的類
export interface ReplyItem {
avatar: ResourceStr // 頭像
author: string // 作者
id: number // 評論的id
content: string // 評論內容
time: string // 發表時間
area: string // 地區
likeNum: number // 點贊數量
likeFlag: boolean | null // 當前用戶是否點過贊
}

export class ReplyItemModel implements ReplyItem {
avatar: ResourceStr = ''
author: string = ''
id: number = 0
content: string = ''
time: string = ''
area: string = ''
likeNum: number = 0
likeFlag: boolean | null = null

constructor(model: ReplyItem) {
this.avatar = model.avatar
this.author = model.author
this.id = model.id
this.content = model.content
this.time = model.time
this.area = model.area
this.likeNum = model.likeNum
this.likeFlag = model.likeFlag
}
}

```

#### 4.搭建評論列表界面

```ts
List() {
ForEach(this.commentList, (item: ReplyItemModel) => {
ListItem() {
HmCommentItem({
commentInfo: item,
//但凡傳函數吧必須用箭頭函數包裹!
changeLike:(id:number)=>{
this.changeLike(id)
}
})
}

})
}.layoutWeight(1)
```

* 這里需要注意幾點

1. List里面必須放置`ListItem()`
2. 評論列表的高度可以給一個自適應,這樣可以讓列列表超出屏幕的高度時實現自適應

## 5.點贊邏輯的實現

實現任務:當我們點擊愛心或者點贊的時候,點贊數量+1,愛心變位紅色,當我們再次點擊,點贊由原來的點贊變為取消點贊,愛心的顏色變為灰色,點贊的數量-1

代碼層面分析:由于我們顯示的數據是由主界面傳到子界面的,所以我們需要在父界面定義一個方法,傳遞到子面去,在子界面去調用這個方法,所以在子界面需要有一個接受的方法

### 5.1.1 子界面接收的方法

```ts
changeLike:(id:number)=>void = ()=> {

}
```

### 5.1.2 點贊業務邏輯的實現

```ts
//點贊邏輯處理
changeLike(id:number){
//遍歷數組 對commentlist數組中的每一個元素item進行迭代
const index = this.commentList.findIndex(item =>item.id === id)
//分支處理主評論和回復評論點贊狀態
if(index < 0){//處理主評論
if(this.comment.likeFlag){//已經點贊
this.comment.likeNum -- //點贊數量--
}else {//未點贊
//點贊數量++
this.comment.likeNum++
}

this.comment.likeFlag = !this.comment.likeFlag
}else{//處理回復評論 找到回復列表中的某一個子評論
//返回第一次匹配元素的數組索引(0~N)
if(this.commentList[index].likeFlag){
this.commentList[index].likeNum--
}else {
this.commentList[index].likeNum++
}
this.commentList[index].likeFlag = !this.commentList[index].likeFlag
//@State修飾的數據只能監聽到第一層或者本身 需要new一下在使用
this.commentList[index] = new ReplyItemModel(this.commentList[index])
// this.commentList.splice(index,1,this.commentList[index])
}

```

### 5.1.3父界面進行傳值

![image-20250304214822497](https://i-blog.csdnimg.cn/img_convert/c489e8cf379cd97b3b9545e9cf285bcb.png)

## 6.發布界面的搭建

### 6.1.1 發布的邏輯

```ts
publishComment(content:string){
this.commentList.unshift(new ReplyItemModel({
// id: Math.random()的作用是生成一個基于隨機數的臨時唯一標識,但需注意:
// 數值范圍: 0 ≤ N < 1 (浮點數)
// 格式示例: 0.1234567890123456
// 非整型: 生成16位小數的浮點數
//id不能重復
id: Math.random(),
avatar: 'https://picx.zhimg.com/027729d02bdf060e24973c3726fea9da_l.jpg?source=06d4cd63',
author: '遇到困難睡大覺',
content: '山外青山樓外樓,不回消息我記仇',
time: '11-30',
area: '安徽',
likeNum: 0,
likeFlag: false
}))
}
```

### 6.1.2 發布界面

```ts
@Preview
@Component
struct replay {
content: string = ''
@Link
conmentsnum: number
publish: (content: string) => void = () => {

}

build() {
Row() {
TextInput({ placeholder: '請留下你的評論~', text: $$this.content })
.layoutWeight(1)
.onSubmit(() => {
this.publish(this.content)
this.content = ''
})
Button('發布')
.onClick(() => {

this.publish(this.content)
this.content = ''
this.conmentsnum++

})
}
.width('100%')
.padding(12)
}
}

export { replay }
```


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Harmony
    +關注

    關注

    0

    文章

    108

    瀏覽量

    3009
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    harmony-utils之LRUCacheUtil,LRUCache緩存工具類

    harmony-utils之LRUCacheUtil,LRUCache緩存工具類 harmony-utils 簡介與說明 harmony-utils 一款功能豐富且極易上手的Harmo
    的頭像 發表于 07-03 18:11 ?124次閱讀

    harmony-utils之NumberUtil,Number工具類

    harmony-utils之NumberUtil,Number工具類 harmony-utils 簡介與說明 harmony-utils 一款功能豐富且極易上手的HarmonyOS工具
    的頭像 發表于 07-03 18:08 ?129次閱讀

    harmony-utils之PreferencesUtil,首選項工具類

    harmony-utils之PreferencesUtil,首選項工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的Harmony
    的頭像 發表于 07-03 11:42 ?103次閱讀

    harmony-utils之PreviewUtil,文件預覽工具類

    harmony-utils之PreviewUtil,文件預覽工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工
    的頭像 發表于 07-03 11:40 ?109次閱讀

    harmony-utils之RegexUtil,正則工具類

    harmony-utils之RegexUtil,正則工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借
    的頭像 發表于 07-03 11:38 ?107次閱讀

    harmony-utils之SnapshotUtil,截圖相關工具類

    harmony-utils之SnapshotUtil,截圖相關工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS
    的頭像 發表于 07-03 11:36 ?105次閱讀

    harmony-utils之StrUtil,字符串工具類

    harmony-utils之StrUtil,字符串工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借助
    的頭像 發表于 07-03 11:32 ?87次閱讀

    harmony-utils之TypeUtil,類型檢查工具類

    harmony-utils之TypeUtil,類型檢查工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,
    的頭像 發表于 06-30 17:35 ?102次閱讀

    harmony-utils之WindowUtil,窗口相關工具類

    harmony-utils之WindowUtil,窗口相關工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具
    的頭像 發表于 06-30 17:33 ?105次閱讀

    harmony-utils之RSA,RSA加解密

    harmony-utils之RSA,RSA加解密 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實用
    的頭像 發表于 06-30 16:52 ?119次閱讀

    harmony-utils之TempUtil,溫度轉換工具類

    harmony-utils之TempUtil,溫度轉換工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,
    的頭像 發表于 06-26 00:50 ?55次閱讀

    harmony OS NEXT-雙向數據綁定MVVM以及$$語法糖介紹

    # 鴻蒙Harmony-雙向數據綁定MVVM以及$$語法糖介紹 ## 1.1 雙向數據綁定概念 在鴻蒙(HarmonyOS)應用開發中,雙向數據改變(或雙向數據綁定)是一種讓數據·模型和UI組件之間
    的頭像 發表于 04-29 16:52 ?300次閱讀

    harmony OS NEXT-通過用戶首選項實現數據持久化

    # 鴻蒙通過用戶首選項實現數據持久化 ## 1.1 場景介紹 用戶首選項為應用提供Key-Value鍵值型的數據處理能力,支持應用持久化輕量級數據,并對其修改和查詢。當用戶希望有一個全局唯一存儲的地方,可以采用用戶首選項來進行存儲。Preferences會將該數據緩存在內存中,當用戶讀取的時候,能夠快速從內存中獲取數據,當需要持久化時可以使用flush接口將內存中的數據寫入持久化文件中。Preferences會隨著存放的數據量越多而導致應用占用的內存越大,因此
    的頭像 發表于 04-29 16:38 ?536次閱讀

    harmony OS NEXT-Navagation基本用法

    # Navagation基本用法 > Navigation組件是路由導航的根視圖容器,一般作為Page頁面的根容器使用,其內部默認包含了標題欄,內容欄和公工具欄,其中內容區默認首頁顯示導航內容(Navigation的子組件)或非首頁顯示(NavDestination的子組件),首頁和非首頁通過路由進行切換 * 使用Navigation跳轉的組件不需要再使用Entry來修飾,普通組件即可 * Navigation是一個導航組件,API9和API11的使用官方推薦方式各不相同 ## 1. Navagation API9的用法-(Navigation-NavRouter-(其他組件+NavD
    的頭像 發表于 04-27 17:39 ?303次閱讀

    harmony OS NEXT-基本介紹及DevcoStudiop基本使用

    #鴻蒙基本介紹及DevcoStudiop基本使用 1.認識DevcoStudiop工作區 1.1認識工作區 開發節奏: 通過左側目錄找到對應的應用文件,在編輯區進行代碼編寫,在右側看預覽效果 快捷鍵:連按兩下shift快速尋找全局內容,如文件 1.2如何排錯 寫代碼時,我們經常會遇到這種情況,右側出現不能開啟預覽器的提示,我們需要打開預覽器日志查看報錯 第一種方法 第二種方法 第三種方法:通過統一構建,暴露哪些文件及代碼無法編譯通過 1.3如何刷新看效果 預覽器是有熱
    的頭像 發表于 03-26 16:48 ?411次閱讀
    <b class='flag-5'>harmony</b> <b class='flag-5'>OS</b> <b class='flag-5'>NEXT-</b>基本介紹及DevcoStudiop基本使用
    主站蜘蛛池模板: 最近国语视频免费观看在线播放 | 97爱爱| 亚洲午夜顶级嘿嘿嘿影院 | 欧美色视频超清在线观看 | 黄色成人在线网站 | h视频欧美| 亚洲视频在线一区二区三区 | 成年人一级毛片 | 一级特黄毛片 | 天堂网www在线观看 天堂网www在线资源中文 | 男人的天堂免费网站 | 久久婷婷国产综合精品 | 五月婷色 | 男人天堂欧美 | 亚洲国产一区二区在线 | 国产福利小视频在线观看 | 日本高清免费一本视频在线观看 | 91高清在线成人免费观看 | 色婷婷在线视频观看 | 51精品国产 | 欧美图片小说视频 | 在线观看免费xx高清视频 | 国产女人在线观看 | 亚洲香蕉国产高清在线播放 | 9久久99久久久精品齐齐综合色圆 | www.淫.com| 日本欧美一区二区三区不卡视频 | 种子在线搜索bt | 亚洲综合伊人 | 韩国三级无遮挡床戏视频 | 免费xxxx大片 | 国内一级野外a一级毛片 | 欧美片欧美日韩国产综合片 | 99热网址| 爱爱免费视频网站 | 国产成人悠悠影院 | 日本欧美一区二区三区免费不卡 | 亚洲嫩草影院在线观看 | 日本黄色视屏 | 国产馆精品推荐在线观看 | 国产片18在线观看 |