@State裝飾的變量待秃,或稱為狀態(tài)變量拜秧,一旦變量擁有了狀態(tài)屬性,就和自定義組件的渲染綁定起來锥余。當狀態(tài)改變時腹纳,UI會發(fā)生對應(yīng)的渲染改變。
概述
@State裝飾的變量驱犹,與聲明式范式中的其他被裝飾變量一樣嘲恍,是私有的,只能從組件內(nèi)部訪問雄驹,在聲明時必須指定其類型和本地初始化佃牛。初始化也可選擇使用命名參數(shù)機制從父組件完成初始化。
@State裝飾的變量擁有以下特點:
- @State裝飾的變量與子組件中的@Prop裝飾變量之間建立單向數(shù)據(jù)同步医舆,與@Link俘侠、@ObjectLink裝飾變量之間建立雙向數(shù)據(jù)同步。
- @State裝飾的變量生命周期與其所屬自定義組件的生命周期相同蔬将。
裝飾器使用規(guī)則說明
@State變量裝飾器 | 說明 |
---|---|
裝飾器參數(shù) | 無 |
同步類型 | 不與父組件中任何類型的變量同步爷速。 |
允許裝飾的變量類型 | Object、class霞怀、string惫东、number、boolean、enum類型廉沮,以及這些類型的數(shù)組颓遏。嵌套類型的場景請參考觀察變化。類型必須被指定滞时。 不支持any叁幢,不支持簡單類型和復雜類型的聯(lián)合類型,不允許使用undefined和null坪稽。 建議不要裝飾Date類型曼玩,應(yīng)用可能會產(chǎn)生異常行為。不支持Length窒百、ResourceStr演训、ResourceColor類型,Length贝咙、ResourceStr、ResourceColor為簡單類型和復雜類型的聯(lián)合類型拂募。 |
被裝飾變量的初始值 | 必須本地初始化庭猩。 |
變量的傳遞/訪問規(guī)則說明
傳遞/訪問 | 說明 |
---|---|
從父組件初始化 | 可選,從父組件初始化或者本地初始化陈症。如果從父組件初始化將會覆蓋本地初始化蔼水。 支持父組件中常規(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)
詳細請看官方文檔
注意點:
- 嵌套屬性的賦值觀察不到。
// 嵌套的屬性賦值觀察不到
this.title.name.value = 'ArkUI';
- 當裝飾的對象是array時尊沸,可以觀察到數(shù)組本身的賦值和添加威沫、刪除贤惯、更新數(shù)組的變化
題外話:compose中,數(shù)組棒掠,列表更新只能觀察到自己孵构,卻無法觀察數(shù)組的添加、刪除烟很、更新颈墅。