@state @prop @link
@prop是單向的顶霞,只能父組件傳子組件
@link是雙向的锣吼,可以子組件傳父組件
爺孫組件的參數(shù)傳遞可以使用@provide和@consume進行雙向數(shù)據(jù)傳遞。
兄弟組件之間數(shù)據(jù)傳遞可以使用共同的父組件或者全局狀態(tài)管理(例如localStorage玄叠、AppStorage)
- @Provider和@Consumer vs @Provide和@Consume的區(qū)別读恃?
| 能力 | V2 裝飾器@Provider 和@Consumer V1 裝飾器@Provide 和@Consume
本地初始化 允許本地初始化,當找不到@Provider 的時候使用本地默認值寺惫。 禁止本地初始化,當找不到對應(yīng)的@Provide 時候萨驶,會拋出異常艇肴。
支持類型 支持 function。 不支持 function再悼。
觀察能力 僅能觀察自身賦值變化,如果要觀察嵌套場景谤草,配合@Trace 一起使用娘侍。 觀察第一層變化泳炉,如果要觀察嵌套場景,配合@Observed 和@ObjectLink 一起使用氧腰。
alias 和屬性名 alias 是唯一匹配的 key,如果缺省 alias古拴,則默認屬性名為 alias。 alias 和屬性名都為 key紧帕,優(yōu)先匹配 alias,匹配不到可以匹配屬性名桅打。
從父組件初始化 禁止是嗜。 允許挺尾。
支持重載 默認開啟,即@Provider 可以重名丽柿,@Consumer 向上查找最近的@Provider魂挂。 默認關(guān)閉,即在組件樹上不允許有同名@Provide涂召。如果需要重載,則需要配置 allowOverride麻顶。
- foreach和lazyforeach
兩者都是對容器組件進行數(shù)據(jù)加載和渲染舱卡。foreach是一次循環(huán)加載,lazyforeach是按需加載轮锥。
他們的參數(shù)有3個,其中兩個必選一個可選新娜,必選參數(shù)為數(shù)據(jù)源list既绩,循環(huán)的回調(diào);可選參數(shù)為函數(shù)生成鍵值
HAP是我們自己寫的ability包
HSP是動態(tài)包衰粹,類似windows里的dll文件铝耻,可以通過路徑引用,不會打包到app包里
HAR是靜態(tài)包瓢捉,類似windows里的lib文件,會打包到app包里
鴻蒙有兩種多線程方式分別是taskpool和worker兽赁,一般情況用taskpool,常駐后臺的線程任務(wù)用worker刀崖。
| 普通任務(wù) | new taskpool.Task() | taskpool.execute() | 立即執(zhí)行的短時任務(wù),耗時不能超過3分鐘馆截。 |
| 延時任務(wù) | new taskpool.Task() | taskpool.executeDelayed() | 為了不影響應(yīng)用啟動的性能蜂莉,一些不影響啟動的初始化類任務(wù)往往期望放在延時任務(wù)中執(zhí)行,如拉取線上的配置信息等窖张。 |
| 長時任務(wù) | new taskpool.LongTask() | taskpool.execute() | 希望長時運行的任務(wù)一直保持執(zhí)行蚁滋,已為其他模塊提供特定的服務(wù),比如日志埋點辕录,后臺長鏈接保活等副女。 |
| 串行任務(wù) | new taskpool.SequenceRunner()速梗,new taskpool.Task() | SequenceRunner. execute() | 用于執(zhí)行一組需要串行執(zhí)行的任務(wù) |
| 依賴任務(wù) | task1.addDependency(task2), task1.removeDependency(task2) | taskpool.execute() | 任務(wù)之間存在先后依賴關(guān)系 |
onInitialize() - 在Ability創(chuàng)建時調(diào)用枕赵,用于執(zhí)行初始化操作位隶。
onStart() - 在Ability啟動時調(diào)用,用于執(zhí)行必要的準備工作涧黄。
onStop() - 在Ability停止時調(diào)用,用于釋放資源和清理操作懊昨。
onDestroy() - 在Ability銷毀時調(diào)用春宣,用于進行最終的清理工作。
onActive() - 在Ability從后臺返回前臺時調(diào)用躏惋,用于執(zhí)行恢復(fù)操作嚷辅。
onInactive() - 在Ability從前臺進入后臺時調(diào)用,用于執(zhí)行保存數(shù)據(jù)等操作扁位。
頁面生命周期是指被@Entry裝飾的組件的生命周期趁俊,主要包含以下幾個函數(shù):
onPageShow:頁面每次顯示時觸發(fā),包括路由過程则酝、應(yīng)用進入前后臺等場景。
onPageHide:頁面每次隱藏時觸發(fā)般卑,包括路由過程爽雄、應(yīng)用進入前后臺等場景。
onBackPress:當用戶點擊返回按鈕時觸發(fā)叹谁。如果返回值為true,則無法通過返回鍵返回上一頁焰檩,用戶必須與頁面交互才能返回。
自定義組件生命周期是指被@Component裝飾的UI單元的生命周期兜叨,主要包含以下幾個函數(shù):
aboutToAppear:在創(chuàng)建自定義組件的新實例后衩侥,執(zhí)行其build函數(shù)之前觸發(fā)」虻可以在此函數(shù)中改變狀態(tài)變量峦萎,更改將在后續(xù)執(zhí)行build函數(shù)中生效。
onDidBuild:組件build()函數(shù)執(zhí)行完成之后回調(diào)該接口骨杂,不建議在onDidBuild函數(shù)中更改狀態(tài)變量、使用animateTo等功能蛤售,這可能會導(dǎo)致不穩(wěn)定的UI表現(xiàn)妒潭。
aboutToDisappear:在自定義組件銷毀前觸發(fā)。不允許在此函數(shù)中改變狀態(tài)變量漠酿,特別是對@Link變量的修改可能會導(dǎo)致應(yīng)用程序行為不穩(wěn)定谎亩。
import { webview } from '@kit.ArkWeb'
@Entry
@Component
struct WebComponent {
controller: webview.WebviewController = new webview.WebviewController()
build() {
Column() {
// 三種加載網(wǎng)頁的方式
Web({ src: $rawfile("index.html"), controller: this.controller })
Web({ src: "resource://rawfile/index.html", controller: this.controller })
Web({ src: 'www.example.com', controller: this.controller })
.zoomAccess(false)
.aspectRatio(1)
.javaScriptAccess(true)
.onPageEnd(async e => {
// 調(diào)用網(wǎng)頁內(nèi)函數(shù)并獲取返回值
const res = await this.controller.runJavaScript('test()')
})
// 頁面上調(diào)用 confirm() 函數(shù)時觸發(fā),以此來實現(xiàn)頁面向原生通信
.onConfirm(event => {
})
}
}
}
// module.json5 訪問網(wǎng)絡(luò)前需要申請網(wǎng)絡(luò)權(quán)限
"module": {
"requestPermissions": [
{"name": "ohos.permission.INTERNET"}
]
}
在不涉及復(fù)雜動效夫凸、交互阱持、多級路由等場景時,可以使用router鸽扁。但考慮到應(yīng)用當前或以后可能出現(xiàn)的復(fù)雜場景,以及整體交互體驗的一致性桶现,推薦使用Navigation。Navigation可以完全替換router的能力吏夯。
- @Entry 裝飾的頁面即横,A 頁面跳到 B 頁面后再跳回 A 頁面裆赵,如何獲取 B 頁面的返回值
router.back({
url: 'pages/Home',
params: {
info: '來自Home頁'
}
})
// 通過調(diào)用 router.getParams() 方法進行獲取
onPageShow() {
const params = router.getParams() as Record<string, string>
console.log(params)
}
緩存有三種方式战授,分別是localStorage、AppStorage和PresisentStorage植兰。
localStorage是保存頁面的數(shù)據(jù),頁面銷毀數(shù)據(jù)消失废境。
AppStorage是app級的數(shù)據(jù)筒繁,App進程退出數(shù)據(jù)消失。
PresistentStorage是持久的數(shù)據(jù)毡咏,一般搭配AppStorage使用呕缭。
還有一種是preference,也可以持久存儲數(shù)據(jù)恢总,因為需要一個context參數(shù),一般用于存儲一些UI相關(guān)的東西佳谦。
另外就是數(shù)據(jù)庫滋戳,有[鍵值數(shù)據(jù)庫](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/data-persistence-by-kv-store-V5)和[關(guān)系數(shù)據(jù)庫](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/data-persistence-by-rdb-store-V5)