@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ù)組的添加、刪除、更新。