国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenHarmony 應(yīng)用 ArkUI 狀態(tài)管理開發(fā)范例

這篇具有很好參考價值的文章主要介紹了OpenHarmony 應(yīng)用 ArkUI 狀態(tài)管理開發(fā)范例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文轉(zhuǎn)載自《#2023 盲盒+碼 #?OpenHarmony 應(yīng)用 ArkUI?狀態(tài)管理開發(fā)范例》,作者:zhushangyuan_

本文根據(jù)橘子購物應(yīng)用,實現(xiàn) ArkUI 中的狀態(tài)管理。

在聲明式 UI 編程框架中,UI 是程序狀態(tài)的運行結(jié)果,用戶構(gòu)建了一個 UI 模型,其中應(yīng)用的運行時的狀態(tài)是參數(shù)。當(dāng)參數(shù)改變時,UI 作為返回結(jié)果,也將進(jìn)行對應(yīng)的改變。這些運行時的狀態(tài)變化所帶來的 UI 的重新渲染,在 ArkUI 中統(tǒng)稱為狀態(tài)管理機(jī)制。

自定義組件擁有變量,變量必須被裝飾器裝飾才可以成為狀態(tài)變量,狀態(tài)變量的改變會引起 UI 的渲染刷新。如果不使用狀態(tài)變量,UI 只能在初始化時渲染,后續(xù)將不會再刷新。?下圖展示了 State 和 View(UI)之間的關(guān)系。

OpenHarmony 應(yīng)用 ArkUI 狀態(tài)管理開發(fā)范例,OpenHarmony

管理組件擁有的狀態(tài)

@State 裝飾器:組件內(nèi)狀態(tài)

@State 裝飾的變量,或稱為狀態(tài)變量,一旦變量擁有了狀態(tài)屬性,就和自定義組件的渲染綁定起來。當(dāng)狀態(tài)改變時,UI 會發(fā)生對應(yīng)的渲染改變。

在狀態(tài)變量相關(guān)裝飾器中,@State 是最基礎(chǔ)的,使變量擁有狀態(tài)屬性的裝飾器,它也是大部分狀態(tài)變量的數(shù)據(jù)源。

@link 裝飾器:父子雙向同步

子組件中被 @Link 裝飾的變量與其父組件中對應(yīng)的數(shù)據(jù)源建立雙向數(shù)據(jù)綁定。

@Link 裝飾的變量與其父組件中的數(shù)據(jù)源共享相同的值。

@Componentexport struct DetailPage {  @State currentLocation: string = ''}

在父組件 DetailPage 中聲明當(dāng)前定位 currentLocation 變量

Panel(this.isPanel)?{????Location({?isPanel:?$isPanel,?currentLocation:?$currentLocation?})}

將 currentLocation 變量傳給子組件 Location

@Componentexport?struct?Location?{??@Link?currentLocation:?string}

子組件用 @Link 裝飾的 currentLocation 接收。

??@Builder?cityList(city:?any)?{????if?(this.currentLocation?===?city.name)?{??????List()?{????????ForEach(city.city,?twoCity?=>?{??????????ListItem()?{????????????Column()?{??????????????Text(`${twoCity}`)????????????????.width('100%')????????????????.height(30)????????????????.fontSize(14)????????????????.onClick(()?=>?{??????????????????this.currentLocation?=?city.name?+?'/'?+?twoCity????????????????})????????????}??????????}????????})??????}??????.width('100%')??????.divider({?strokeWidth:?2,?color:?$r('app.color.divider'),?startMargin:?0,?endMargin:?20?})????}??}

子組件中的 currentLocation 變量改變會同步父組件中的 currentLocation。

管理應(yīng)用擁有的狀態(tài)

AppStorage 是應(yīng)用全局的 UI 狀態(tài)存儲,是和應(yīng)用的進(jìn)程綁定的,由 UI 框架在應(yīng)用程序啟動時創(chuàng)建,為應(yīng)用程序 UI 狀態(tài)屬性提供中央存儲。

和 LocalStorage 不同的是,LocalStorage 是頁面級的,通常應(yīng)用于頁面內(nèi)的數(shù)據(jù)共享。而對于 AppStorage,是應(yīng)用級的全局狀態(tài)共享。AppStorage 使用場景和相關(guān)的裝飾器:@StorageProp 和 @StorageLink

@StorageProp

@StorageProp(key)是和 AppStorage 中 key 對應(yīng)的屬性建立單向數(shù)據(jù)同步,我們允許本地改變的發(fā)生,但是對于 @StorageProp,本地的修改永遠(yuǎn)不會同步回 AppStorage 中,相反,如果 AppStorage 給定 key 的屬性發(fā)生改變,改變會被同步給 @StorageProp,并覆蓋掉本地的修改。

@Entry@Componentstruct?HomePage {  @State curBp:?string?=?'md' //?curBp指當(dāng)前窗口斷點,sm代表小屏,md代表中屏,lg代表大屏}

在Home.ets頁面中,用 @State 聲明當(dāng)前窗口類型:curBp 變量并賦初值為 md,代表中屏。

  isBreakpointSM?=?(mediaQueryResult)?=> {    if?(mediaQueryResult.matches) {??????this.curBp?=?'sm'??????AppStorage.SetOrCreate('curBp',?this.curBp)    }  }  isBreakpointMD?=?(mediaQueryResult)?=> {    if?(mediaQueryResult.matches) {??????this.curBp?=?'md'??????AppStorage.SetOrCreate('curBp',?this.curBp)    }  }  isBreakpointLG?=?(mediaQueryResult)?=> {    if?(mediaQueryResult.matches) {??????this.curBp?=?'lg'??????AppStorage.SetOrCreate('curBp',?this.curBp)    }  }

根據(jù)屏幕尺寸,將 curBp 設(shè)置為相應(yīng)的值,并用 SetOrCreate()方法保存在 AppStorage 中。

在子組件 NavigationHomePage 中直接使用 curBp 變量

@Entry@Componentexport?struct?NavigationHomePage {  @StorageProp('curBp') curBp:?string?=?'sm'}

curBp 是根據(jù)窗口的尺寸判斷的,是不能改變的,因此使用 @StorageProp(‘curBp’)與 AppStorage(‘curBp’)建立單向數(shù)據(jù)同步。

@StorageLink

@StorageLink(key)是和 AppStorage 中 key 對應(yīng)的屬性建立雙向數(shù)據(jù)同步:

1.? 本地修改發(fā)生,該修改會被同步回 AppStorage 中;

2.? AppStorage 中的修改發(fā)生后,該修改會被同步到所有綁定 AppStorage 對應(yīng) key 的屬性上,包括單向(@StorageProp 和通過 Prop 創(chuàng)建的單向綁定變量)、雙向(@StorageLink 和通過 Link 創(chuàng)建的雙向綁定變量)變量和其他實例(比如 PersistentStorage)。

@Entry@Componentstruct?HomePage {  @StorageLink('shoppingCartGoodsList')?shoppingCartGoodsList: { data: { id:?number?} }[]?=?[]}

在Home.ets頁面中,用 @StorageLink 裝飾器定義 shoppingCartGoodsList,用于獲取全局的購物車商品列表。

this.emitterClass.setShoppingCartGoodsList((eventData)=>{????this.shoppingCartGoodsList.push(eventData.data.id)????AppStorage.SetOrCreate('shoppingCartGoodsList',?this.shoppingCartGoodsList)})

使用 AppStorage.SetOrCreate(‘shoppingCartGoodsList’,?this.shoppingCartGoodsList)將購物車商品列表保存在 AppStorage 中。

因為購物車中的商品會聯(lián)動的變化,比如在商品的詳情頁將商品添加至購物車,在首頁也需要更新購物車信息,因此購物車商品列表采用 @StorageLink 裝飾器裝飾,與 AppStorage(‘shoppingCartGoodsList’)建立雙向同步。

運行測試效果

執(zhí)行以下命令,可以下載橘子購物應(yīng)用工程:

git?initgit?config?core.sparsecheckout?trueecho?code/Solutions/Shopping/OrangeShopping/?>?.git/info/sparse-checkoutgit?remote?add?origin?https://gitee.com/openharmony/applications_app_samples.gitgit?pull?origin?master

參考資料

橘子購物示例應(yīng)用文章來源地址http://www.zghlxwxcb.cn/news/detail-689237.html

到了這里,關(guān)于OpenHarmony 應(yīng)用 ArkUI 狀態(tài)管理開發(fā)范例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • OpenHarmony ArkUI 如何調(diào)用相機(jī)

    OpenHarmony ArkUI 如何調(diào)用相機(jī)

    ? ArkUI調(diào)用相機(jī)和調(diào)用相冊其實是一個思路,只用修改一個地方。 我們繼續(xù)來說相機(jī)調(diào)用,ArkUI沒辦法自己獲取相機(jī),所以得依靠一下@ohos.multimedia.camera 本指導(dǎo)主要展示了調(diào)用相機(jī)的調(diào)用過程,以及調(diào)用相機(jī)的權(quán)限準(zhǔn)備; 本指導(dǎo)對比了兩種設(shè)計方案優(yōu)劣,并給出推薦方案; 本

    2024年02月14日
    瀏覽(16)
  • HarmonyOS 應(yīng)用開發(fā)學(xué)習(xí)筆記 狀態(tài)管理概述

    HarmonyOS 應(yīng)用開發(fā)學(xué)習(xí)筆記 狀態(tài)管理概述

    移動端開發(fā),最重要的一點就是數(shù)據(jù)的處理,并且正確的顯示渲染UI。 變量在頁面和組件、組件和組件之間有時候并不能實時共享,而有時候,又不需要太多的作用域(節(jié)省資源),作用就需要根據(jù)不同場景,設(shè)置不同狀態(tài)的變量。 官方文檔 在聲明式UI編程框架中,UI是程序

    2024年02月03日
    瀏覽(21)
  • OpenHarmony 使用 ArkUI Inspector 分析布局

    OpenHarmony 使用 ArkUI Inspector 分析布局

    ●?摘要:視圖的嵌套層次會影響應(yīng)用的性能,開發(fā)者應(yīng)該移除多余的嵌套層次,縮短組件刷新耗時。本文會介紹如何使用 ArkUI?Inspector 工具分析布局,提示應(yīng)用響應(yīng)性能。 ●?:列舉本文相關(guān)的:OpenHarmony?HarmonyOS?鴻蒙?Inspector?布局檢查器?視圖嵌套 應(yīng)用將布

    2024年02月09日
    瀏覽(25)
  • 【開源三方庫】Easyui:基于OpenAtom OpenHarmony ArkUI深度定制的組件框架

    【開源三方庫】Easyui:基于OpenAtom OpenHarmony ArkUI深度定制的組件框架

    萬冬陽 公司:中國科學(xué)院軟件所 小組:知識體系工作組 Easyui是一套基于ArkTS語言開發(fā)的輕量、可靠的移動端組件庫,它是對OpenAtom?OpenHarmony(以下簡稱“OpenHarmony”)?ArkUI進(jìn)行深度定制的組件框架。Easyui可擴(kuò)展性較強(qiáng),可以基于源碼進(jìn)行二次開發(fā),修改原有組件以及新增部

    2024年02月03日
    瀏覽(23)
  • ArkUI框架之聲明式 UI 條件渲染&聲明周期以及案例美化實戰(zhàn)運用【OpenHarmony/HarmonyOS】

    1.1.1 用戶名位數(shù)判斷 實現(xiàn)用戶名位數(shù)判斷可以直接在build方法函數(shù)里進(jìn)行寫if語句的條件判斷。 我們把用戶名改到超出五位查看效果如下:

    2024年02月06日
    瀏覽(25)
  • OpenHarmony應(yīng)用開發(fā)——在標(biāo)準(zhǔn)OpenHarmony上運行應(yīng)用-標(biāo)準(zhǔn)OpenHarmony工程設(shè)置

    OpenHarmony應(yīng)用開發(fā)——在標(biāo)準(zhǔn)OpenHarmony上運行應(yīng)用-標(biāo)準(zhǔn)OpenHarmony工程設(shè)置

    ????????前面我們創(chuàng)建了一個工程并使其在HarmonyOS系統(tǒng)上運行,本文我們來闡述一下如何在標(biāo)準(zhǔn)的OpenHarmony開發(fā)板或系統(tǒng)上運行。 ????????首先,打開Settings. ? ? ? ? 將SDK選擇為OpenHarmony,第一次選擇路徑應(yīng)該為空,隨后點擊Edit。 ? ? ? ? 選擇好存儲路徑后,隨后點擊

    2024年02月04日
    瀏覽(24)
  • OpenHarmony開發(fā)-連接開發(fā)板調(diào)試應(yīng)用

    OpenHarmony開發(fā)-連接開發(fā)板調(diào)試應(yīng)用

    在 OpenHarmony 開發(fā)過程中,連接開發(fā)板進(jìn)行應(yīng)用調(diào)試是一個關(guān)鍵步驟,只有在真實的硬件環(huán)境下,我們才能測試出應(yīng)用更多的潛在問題,以便后續(xù)我們進(jìn)行優(yōu)化。本文詳細(xì)介紹了連接開發(fā)板調(diào)試 OpenHarmony 應(yīng)用的操作步驟。 首先,我們搭建了OpenHarmony的開發(fā)環(huán)境,安裝 OpenHarmo

    2024年04月11日
    瀏覽(20)
  • 《HarmonyOS開發(fā) – OpenHarmony開發(fā)筆記(基于小型系統(tǒng))》第4章 OpenHarmony應(yīng)用開發(fā)實例

    《HarmonyOS開發(fā) – OpenHarmony開發(fā)筆記(基于小型系統(tǒng))》第4章 OpenHarmony應(yīng)用開發(fā)實例

    開發(fā)環(huán)境 : 開發(fā)系統(tǒng):Ubuntu 20.04 開發(fā)板:Pegasus物聯(lián)網(wǎng)開發(fā)板 MCU:Hi3861 OpenHarmony版本:3.0.1-LTS 1.新建工程及源碼 新建目錄 在applications/sample/myapp中新建src目錄以及myapp.c文件,代碼如下所示。 新建編譯組織文件 新建applications/sample/myapp/BUILD.gn文件,內(nèi)容如下所示: static_libr

    2024年02月09日
    瀏覽(37)
  • 鴻蒙開發(fā)實戰(zhàn)-OpenHarmony之天氣應(yīng)用

    鴻蒙開發(fā)實戰(zhàn)-OpenHarmony之天氣應(yīng)用

    功能描述: 通過請求免費API獲取指定城市七天內(nèi)相關(guān)天氣信息 開發(fā)環(huán)境: IDE:DEV ECO 4.0.600 SDK:4.0.10.15 開發(fā)板:DAYU200 4.0.10.16 一. 創(chuàng)建項目,調(diào)試環(huán)境 1.創(chuàng)建項目 2.選擇OpenHarmony、API10 3.連網(wǎng)條件下加載依賴 4.在開發(fā)板上簽名,運行HelloWorld測試環(huán)境 直接運行,然后點擊log報錯直

    2024年02月21日
    瀏覽(12)
  • OpenHarmony開發(fā)- 應(yīng)用子系統(tǒng)/Launcher

    OpenHarmony開發(fā)- 應(yīng)用子系統(tǒng)/Launcher

    Launcher 作為系統(tǒng)人機(jī)交互的首要入口,提供應(yīng)用圖標(biāo)的顯示、點擊啟動、卸載應(yīng)用,并提供桌面布局設(shè)置以及最近任務(wù)管理等功能。 Launcher 采用 擴(kuò)展的TS語言(ArkTS)開發(fā),主要的結(jié)構(gòu)如下: product 業(yè)務(wù)形態(tài)層:區(qū)分不同產(chǎn)品、不同屏幕的各形態(tài)桌面,含有桌面窗口、個性化

    2024年04月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包