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

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

概述

@State裝飾的變量,與聲明式范式中的其他被裝飾變量一樣,是私有的,只能從組件內(nèi)部訪問,在聲明時(shí)必須指定其類型和本地初始化。初始化也可選擇使用命名參數(shù)機(jī)制從父組件完成初始化。

@State裝飾的變量擁有以下特點(diǎn):

  • @State裝飾的變量與子組件中的@Prop裝飾變量之間建立單向數(shù)據(jù)同步,與@Link、@ObjectLink裝飾變量之間建立雙向數(shù)據(jù)同步。
  • @State裝飾的變量生命周期與其所屬自定義組件的生命周期相同。

裝飾器使用規(guī)則說明

@State變量裝飾器 說明
裝飾器參數(shù)
同步類型 不與父組件中任何類型的變量同步。
允許裝飾的變量類型 Object、class、string、number、boolean、enum類型,以及這些類型的數(shù)組。嵌套類型的場景請參考觀察變化。類型必須被指定。
不支持any,不支持簡單類型和復(fù)雜類型的聯(lián)合類型,不允許使用undefined和null。
建議不要裝飾Date類型,應(yīng)用可能會(huì)產(chǎn)生異常行為。不支持Length、ResourceStr、ResourceColor類型,Length、ResourceStr、ResourceColor為簡單類型和復(fù)雜類型的聯(lián)合類型。
被裝飾變量的初始值 必須本地初始化。

變量的傳遞/訪問規(guī)則說明

傳遞/訪問 說明
從父組件初始化 可選,從父組件初始化或者本地初始化。如果從父組件初始化將會(huì)覆蓋本地初始化。
支持父組件中常規(guī)變量、@State、@Link、@Prop、@Provide、@Consume、@ObjectLink、@StorageLink、@StorageProp、@LocalStorageLink和@LocalStorageProp裝飾的變量,初始化子組件的@State。
用于初始化子組件 @State裝飾的變量支持初始化子組件的常規(guī)變量、@State、@Link、@Prop、@Provide。
是否支持組件外訪問 不支持,只能在組件內(nèi)訪問。

初始化規(guī)則圖示


image.png

觀察變化和行為表現(xiàn)

詳細(xì)請看官方文檔

注意點(diǎn):

  • 嵌套屬性的賦值觀察不到。
// 嵌套的屬性賦值觀察不到
this.title.name.value = 'ArkUI';
  • 當(dāng)裝飾的對象是array時(shí),可以觀察到數(shù)組本身的賦值和添加、刪除、更新數(shù)組的變化

題外話:compose中,數(shù)組,列表更新只能觀察到自己,卻無法觀察數(shù)組的添加、刪除、更新。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容