成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

若干種在日常開發中會導致@Observed失效的情況

系統 OpenHarmony
@ObjectLink 與 @Observed 能夠極大的提高開發效率,但是也存在很多坑。特別是無法使用鏈式編程這種問題,會讓很多從其他開發方向轉OpenHarmony的老鳥都掉坑里。所以必須認真對待@ObjectLink 與 @Observed。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

概述

@Observed與@ObjectLink是開發中常用的復雜數據類型綁定的技巧。
但是@Observed與@ObjectLink在開發中存在著許多坑。
接下來我將列舉我遇到的幾個坑。

測試環境

測試工具:DevEco Studio 3.1.1 Release
測試API版本號:API9
測試環境:

  • OpenHarmony 3.2 Release
  • HarmonyOS API9 模擬器

正確使用場景

首先我將舉例正確在開發中@Observed與@ObjectLink的正確使用方式,并且正確文件的源文件我也會打包放置在資源文件中。

先來看實現效果:

若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區

源代碼:

若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區

DataModel.ets:

// 接口
@Observed
export class  DataInteface {
  value: number;
}
// 實現數據類
@Observed
export class DataModel implements DataInteface {
  value: number = 0;
}

Index.ets:

import { DataModel, DataInteface } from "../model/DataModel"

@Entry
@Component
struct Index {
  @State
  sensors: DataInteface[] = [
    new DataModel(),
    new DataModel(),
    new DataModel(),
    new DataModel(),
    new DataModel(),
    new DataModel(),
  ];

  build() {
    Row() {
      List() {
        ForEach(this.sensors, (item: DataInteface) => {
          ListItem() {
            SensorView({ sen: item })
          }.width("100%")
        })
      }
      .width("100%")
    }
  }
}

@Component
struct SensorView {
  @ObjectLink
  sen: DataInteface
  build() {
    Button(`點擊數據會自增${this.sen.value}`)
      .fontSize(20)
      .backgroundColor(Color.Yellow)
      .onClick(() => {
        this.sen.value++;
        console.log("anran" + this.sen.value)
      })
  }
}

錯誤使用方法

1、使用interface撰寫接口

雖然按照TypeScript規范需要使用interface撰寫接口,但是@Observed不能修飾interface。所以在OpenHarmony開發中應當使用class撰寫接口。
效果:可以進行數據雙向綁定,但是編譯時會報錯。

錯誤代碼:

若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區

// 接口
@Observed
export interface  DataInteface {
  value: number;
}
// 實現類
@Observed
export class DataModel implements DataInteface {
  value: number = 0;
}

2、使用鏈式編程初始化數據

在OpenHarmony中不應當使用鏈式編程初始化@Observed修飾的對象。因為這將會替代掉@Observed幫助我們生產的對象轉而使用原生的數據對象。這將會導致所有的數據無法進行雙向綁定。
在實際項目中很容易因為一貫的編程經驗而使用鏈式編程,這時候就會出現問題,而且這種問題很難排查,小編就遇到了這種問題。

效果:

若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區

代碼:

若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區

3、直接使用for循環對@Observed對象渲染

直接使用for循環對@Observed對象渲染渲染,而不封裝,不使用@ObjectLink對數據引用。

運行效果:同錯誤2。

代碼:

若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區

4、只給接口使用了@Observed沒有給實現類寫@Observed

運行效果:同錯誤2

代碼:

若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區

5、沒有給接口使用@Observed,只給實現類寫@Observed

效果:程序可以正常雙向綁定,但是編譯器會給出警告。

代碼:

若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區若干種在日常開發中會導致@Observed失效的情況-開源基礎軟件社區

結論

@Observed 可能是通過某種替代原有對象的方式實現的,所以使用鏈式編程初始化對象會導致數據雙向綁定失效。
而通常來說編譯器的警告都是自己編譯器給的,很可能不會正常影響程序運行。

@ObjectLink 與 @Observed 能夠極大的提高開發效率,但是也存在很多坑。特別是無法使用鏈式編程這種問題,會讓很多從其他開發方向轉OpenHarmony的老鳥都掉坑里。所以必須認真對待@ObjectLink 與 @Observed。

文章相關附件可以點擊下面的原文鏈接前往下載

https://ost.51cto.com/resource/2931

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2017-09-06 12:42:45

AndroidGradle開發技巧

2022-06-26 09:56:50

HttpUtil工具類模式

2024-08-02 17:19:36

2017-01-10 19:06:39

Android日常開發技術經驗

2023-05-17 08:34:27

開發技術應用

2022-12-06 10:39:43

Spring事務失效

2021-08-03 15:26:56

代碼智能阿里云

2025-01-15 09:00:20

2022-12-19 08:30:51

ViteWebpack

2022-06-08 23:38:49

程序員開發bug

2022-09-14 19:50:22

事務場景流程

2022-06-27 07:23:44

MySQL常量優化

2023-03-26 07:58:04

開發工具開源

2024-08-01 08:29:45

Spring參數類型

2019-08-02 17:06:49

JavaScript程序員技術

2024-11-29 08:20:23

Rust內存泄漏

2022-07-13 14:40:50

Chrome前端日常開發

2023-08-04 07:22:32

SpringBoot項目

2012-02-03 10:07:04

HibernateJava

2020-12-08 09:45:07

MySQL數據庫索引
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产清纯白嫩初高生视频在线观看 | 国产在线www | 手机看片169 | 国产视频中文字幕在线观看 | 欧美日韩综合一区 | 精品乱码一区二区三四区 | 二区在线观看 | 欧美国产一区二区 | 一区二区三区播放 | 亚洲成人精品在线 | 91av大全| 黄色一级片在线播放 | 免费在线一区二区 | av免费成人 | 亚洲精品中文字幕在线观看 | 亚洲三区视频 | 国家一级黄色片 | 在线播放中文字幕 | 国产精品国产三级国产aⅴ入口 | 欧美精品一二三区 | 国内精品久久精品 | 国产自产21区 | 久久综合久色欧美综合狠狠 | 偷牌自拍| 久久久久久久久久久久久久久久久久久久 | 91n成人| 天堂一区二区三区四区 | 久久国产一区二区三区 | 亚洲久草 | www.887色视频免费 | 九九一级片 | 天天夜夜人人 | 国产精品成人久久久久 | 成人精品一区二区三区中文字幕 | 婷婷成人在线 | av性色全交蜜桃成熟时 | 久久久久久综合 | 中国一级特黄真人毛片免费观看 | 亚洲成av人片在线观看无码 | 成人欧美日韩一区二区三区 | 成人精品一区二区三区中文字幕 |