@Styles裝飾器:定義組件重用樣式

2024-01-25 12:01 更新

如果每個(gè)組件的樣式都需要單獨(dú)設(shè)置,在開(kāi)發(fā)過(guò)程中會(huì)出現(xiàn)大量代碼在進(jìn)行重復(fù)樣式設(shè)置,雖然可以復(fù)制粘貼,但為了代碼簡(jiǎn)潔性和后續(xù)方便維護(hù),我們推出了可以提煉公共樣式進(jìn)行復(fù)用的裝飾器@Styles。

@Styles裝飾器可以將多條樣式設(shè)置提煉成一個(gè)方法,直接在組件聲明的位置調(diào)用。通過(guò)@Styles裝飾器可以快速定義并復(fù)用自定義樣式。用于快速定義并復(fù)用自定義樣式。

說(shuō)明

從API version 9開(kāi)始,該裝飾器支持在ArkTS卡片中使用。

裝飾器使用說(shuō)明

  • 當(dāng)前@Styles僅支持通用屬性通用事件
  • @Styles方法不支持參數(shù),反例如下。
    1. // 反例: @Styles不支持參數(shù)
    2. @Styles function globalFancy (value: number) {
    3. .width(value)
    4. }
  • @Styles可以定義在組件內(nèi)或全局,在全局定義時(shí)需在方法名前面添加function關(guān)鍵字,組件內(nèi)定義時(shí)則不需要添加function關(guān)鍵字。
    1. // 全局
    2. @Styles function functionName() { ... }
    3. // 在組件內(nèi)
    4. @Component
    5. struct FancyUse {
    6. @Styles fancy() {
    7. .height(100)
    8. }
    9. }
  • 定義在組件內(nèi)的@Styles可以通過(guò)this訪(fǎng)問(wèn)組件的常量和狀態(tài)變量,并可以在@Styles里通過(guò)事件來(lái)改變狀態(tài)變量的值,示例如下:
    1. @Component
    2. struct FancyUse {
    3. @State heightValue: number = 100
    4. @Styles fancy() {
    5. .height(this.heightValue)
    6. .backgroundColor(Color.Yellow)
    7. .onClick(() => {
    8. this.heightValue = 200
    9. })
    10. }
    11. }
  • 組件內(nèi)@Styles的優(yōu)先級(jí)高于全局@Styles。

    框架優(yōu)先找當(dāng)前組件內(nèi)的@Styles,如果找不到,則會(huì)全局查找。

使用場(chǎng)景

以下示例中演示了組件內(nèi)@Styles和全局@Styles的用法。

  1. // 定義在全局的@Styles封裝的樣式
  2. @Styles function globalFancy () {
  3. .width(150)
  4. .height(100)
  5. .backgroundColor(Color.Pink)
  6. }
  7. @Entry
  8. @Component
  9. struct FancyUse {
  10. @State heightValue: number = 100
  11. // 定義在組件內(nèi)的@Styles封裝的樣式
  12. @Styles fancy() {
  13. .width(200)
  14. .height(this.heightValue)
  15. .backgroundColor(Color.Yellow)
  16. .onClick(() => {
  17. this.heightValue = 200
  18. })
  19. }
  20. build() {
  21. Column({ space: 10 }) {
  22. // 使用全局的@Styles封裝的樣式
  23. Text('FancyA')
  24. .globalFancy ()
  25. .fontSize(30)
  26. // 使用組件內(nèi)的@Styles封裝的樣式
  27. Text('FancyB')
  28. .fancy()
  29. .fontSize(30)
  30. }
  31. }
  32. }
以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)