国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HarmonyOS/OpenHarmony應用開發(fā)-ArkTS語言渲染控制LazyForEach數(shù)據(jù)懶加載

這篇具有很好參考價值的文章主要介紹了HarmonyOS/OpenHarmony應用開發(fā)-ArkTS語言渲染控制LazyForEach數(shù)據(jù)懶加載。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

LazyForEach從提供的數(shù)據(jù)源中按需迭代數(shù)據(jù),并在每次迭代過程中創(chuàng)建相應的組件。當LazyForEach在滾動容器中使用了,框架會根據(jù)滾動容器可視區(qū)域按需創(chuàng)建組件,當組件劃出可視區(qū)域外時,框架會進行組件銷毀回收以降低內(nèi)存占用。
一、接口描述

LazyForEach(
    dataSource: IDataSource,             // 需要進行數(shù)據(jù)迭代的數(shù)據(jù)源 
    itemGenerator: (item: any) => void,  // 子組件生成函數(shù)
    keyGenerator?: (item: any) => string // (可選) .鍵值生成函數(shù)
): void
interface IDataSource {
    totalCount(): number;                                             // Get total count of data
    getData(index: number): any;                                      // Get single data by index
    registerDataChangeListener(listener: DataChangeListener): void;   // Register listener to listening data changes
    unregisterDataChangeListener(listener: DataChangeListener): void; // Unregister listener
}
interface DataChangeListener {
    onDataReloaded(): void;                      // Called while data reloaded
    onDataAdd(index: number): void;            // Called while single data added
    onDataMove(from: number, to: number): void; // Called while single data moved
    onDataDelete(index: number): void;          // Called while single data deleted
    onDataChange(index: number): void;          // Called while single data changed
.}

HarmonyOS/OpenHarmony應用開發(fā)-ArkTS語言渲染控制LazyForEach數(shù)據(jù)懶加載,HarmonyOS/OpenHarmony開發(fā)學習分享,HarmonyOS


二、IDataSource類型說明

interface IDataSource {
    totalCount(): number;
    getData(index: number): any; 
    registerDataChangeListener(listener: DataChangeListener): void;
    unregisterDataChangeListener(listener: DataChangeListener): void;
}

HarmonyOS/OpenHarmony應用開發(fā)-ArkTS語言渲染控制LazyForEach數(shù)據(jù)懶加載,HarmonyOS/OpenHarmony開發(fā)學習分享,HarmonyOS


三、DataChangeListener類型說明
?

HarmonyOS/OpenHarmony應用開發(fā)-ArkTS語言渲染控制LazyForEach數(shù)據(jù)懶加載,HarmonyOS/OpenHarmony開發(fā)學習分享,HarmonyOS


四、使用限制
LazyForEach必須在容器組件內(nèi)使用,僅有List、Grid以及Swiper組件支持數(shù)據(jù)懶加載(即只加載可視部分以及其前后少量數(shù)據(jù)用于緩沖),其他組件仍然是一次性加載所有的數(shù)據(jù)。

LazyForEach在每次迭代中,必須創(chuàng)建且只允許創(chuàng)建一個子組件。

生成的子組件必須是允許包含在LazyForEach父容器組件中的子組件。
允許LazyForEach包含在if/else條件渲染語句中,也允許LazyForEach中出現(xiàn)if/else條件渲染語句。
鍵值生成器必須針對每個數(shù)據(jù)生成唯一的值,如果鍵值相同,將導致鍵值相同的UI組件被框架忽略,從而無法在父容器內(nèi)顯示。
LazyForEach必須使用DataChangeListener對象來進行更新,第一個參數(shù)dataSource使用狀態(tài)變量時,狀態(tài)變量改變不會觸發(fā)LazyForEach的UI刷新。
為了高性能渲染,通過DataChangeListener對象的onDataChange方法來更新UI時,需要生成不同于原來的鍵值來觸發(fā)組件刷新。
itemGenerator函數(shù)的調(diào)用順序不一定和數(shù)據(jù)源中的數(shù)據(jù)項相同,在開發(fā)過程中不要假設(shè)itemGenerator和keyGenerator函數(shù)是否執(zhí)行及其執(zhí)行順序。例如,以下示例可能無法正常運行:

LazyForEach(dataSource, 
  item => Text(`${item.i}. item.data.label`),
  item => item.data.id.toString())

五、示例文章來源地址http://www.zghlxwxcb.cn/news/detail-666122.html

// Basic implementation of IDataSource to handle data listener
class BasicDataSource implements IDataSource {
  private listeners: DataChangeListener[] = [];

  public totalCount(): number {
    return 0;
  }

  public getData(index: number): any {
    return undefined;
  }

  registerDataChangeListener(listener: DataChangeListener): void {
    if (this.listeners.indexOf(listener) < 0) {
      console.info('add listener');
      this.listeners.push(listener);
    }
  }

  unregisterDataChangeListener(listener: DataChangeListener): void {
    const pos = this.listeners.indexOf(listener);
    if (pos >= 0) {
      console.info('remove listener');
      this.listeners.splice(pos, 1);
    }
  }

  notifyDataReload(): void {
    this.listeners.forEach(listener => {
      listener.onDataReloaded();
    })
  }

  notifyDataAdd(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataAdd(index);
    })
  }

  notifyDataChange(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataChange(index);
    })
  }

  notifyDataDelete(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataDelete(index);
    })
  }

  notifyDataMove(from: number, to: number): void {
    this.listeners.forEach(listener => {
      listener.onDataMove(from, to);
    })
  }
}

class MyDataSource extends BasicDataSource {
  private dataArray: string[] = ['/path/image0', '/path/image1', '/path/image2', '/path/image3'];

  public totalCount(): number {
    return this.dataArray.length;
  }

  public getData(index: number): any {
    return this.dataArray[index];
  }

  public addData(index: number, data: string): void {
    this.dataArray.splice(index, 0, data);
    this.notifyDataAdd(index);
  }

  public pushData(data: string): void {
    this.dataArray.push(data);
    this.notifyDataAdd(this.dataArray.length - 1);
  }
}

@Entry
@Component
struct MyComponent {
  private data: MyDataSource = new MyDataSource();

  build() {
    List({ space: 3 }) {
      LazyForEach(this.data, (item: string) => {
        ListItem() {
          Row() {
            Image(item).width('30%').height(50)
            Text(item).fontSize(20).margin({ left: 10 })
          }.margin({ left: 10, right: 10 })
        }
        .onClick(() => {
          this.data.pushData('/path/image' + this.data.totalCount());
        })
      }, item => item)
    }
  }
}

到了這里,關(guān)于HarmonyOS/OpenHarmony應用開發(fā)-ArkTS語言渲染控制LazyForEach數(shù)據(jù)懶加載的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • OpenHarmony開發(fā)實戰(zhàn):為應用添加運行時權(quán)限(ArkTS)

    OpenHarmony開發(fā)實戰(zhàn):為應用添加運行時權(quán)限(ArkTS)

    通過AbilityAccessCtrl動態(tài)向用戶申請“允許不同設(shè)備間的數(shù)據(jù)交換”的權(quán)限,使用設(shè)備管理實例獲取周邊不可信設(shè)備列表。 說明: ?查詢周邊不可信設(shè)備之前,請確保本設(shè)備與周邊設(shè)備未進行配對。如果已配對,則恢復出廠設(shè)置之后重新查詢。 相關(guān)概念 訪問控制權(quán)限申請:應

    2024年04月23日
    瀏覽(31)
  • HarmonyOS應用開發(fā)實戰(zhàn)—登錄頁面【ArkTS】

    HarmonyOS應用開發(fā)實戰(zhàn)—登錄頁面【ArkTS】

    HarmonyOS(鴻蒙操作系統(tǒng))是華為公司推出的一種分布式操作系統(tǒng)。它被設(shè)計為一種全場景、全連接的操作系統(tǒng),旨在實現(xiàn)在各種設(shè)備之間的無縫協(xié)同和共享,包括智能手機、

    2024年02月05日
    瀏覽(25)
  • HarmonyOS應用開發(fā)學習筆記 ArkTS 布局概述

    HarmonyOS應用開發(fā)學習筆記 ArkTS 布局概述

    布局指用特定的組件或者屬性來管理用戶頁面所放置UI組件的大小和位置。在實際的開發(fā)過程中,需要遵守以下流程保證整體的布局效果 確定頁面的布局結(jié)構(gòu)。 分析頁面中的元素構(gòu)成。 選用適合的布局容器組件或?qū)傩钥刂祈撁嬷懈鱾€元素的位置和大小約束。 布局元素的組成

    2024年02月01日
    瀏覽(28)
  • 《HarmonyOS開發(fā) – OpenHarmony開發(fā)筆記(基于小型系統(tǒng))》第4章 OpenHarmony應用開發(fā)實例

    《HarmonyOS開發(fā) – OpenHarmony開發(fā)筆記(基于小型系統(tǒng))》第4章 OpenHarmony應用開發(fā)實例

    開發(fā)環(huán)境 : 開發(fā)系統(tǒng):Ubuntu 20.04 開發(fā)板:Pegasus物聯(lián)網(wǎng)開發(fā)板 MCU:Hi3861 OpenHarmony版本:3.0.1-LTS 1.新建工程及源碼 新建目錄 在applications/sample/myapp中新建src目錄以及myapp.c文件,代碼如下所示。 新建編譯組織文件 新建applications/sample/myapp/BUILD.gn文件,內(nèi)容如下所示: static_libr

    2024年02月09日
    瀏覽(37)
  • HarmonyOS應用開發(fā)實戰(zhàn)—開箱即用的應用首頁頁面【ArkTS】

    HarmonyOS應用開發(fā)實戰(zhàn)—開箱即用的應用首頁頁面【ArkTS】

    HarmonyOS(鴻蒙操作系統(tǒng))是華為公司推出的一種分布式操作系統(tǒng)。它被設(shè)計為一種全場景、全連接的操作系統(tǒng),旨在實現(xiàn)在各種設(shè)備之間的無縫協(xié)同和共享,包括智能手機、平板電腦、智能穿戴、智能家居、車載系統(tǒng)等。HarmonyOS的目標是構(gòu)建一個統(tǒng)一的、開放的、全場景的操

    2024年02月02日
    瀏覽(32)
  • 鴻蒙應用開發(fā)學習路線(OpenHarmony/HarmonyOS)

    鴻蒙應用開發(fā)學習路線(OpenHarmony/HarmonyOS)

    作者:堅果 團隊:堅果派 公眾號:“大前端之旅” 潤開鴻技術(shù)專家,華為HDE,InfoQ簽約作者,OpenHarmony布道師,擅長HarmonyOS應用開發(fā)、熟悉服務卡片開發(fā),在“戰(zhàn)碼先鋒”活動中作為大隊長,累計培養(yǎng)三個小隊長,帶領(lǐng)100+隊員完成Pr的提交合入。 歡迎通過主頁或者私信聯(lián)系

    2024年02月15日
    瀏覽(97)
  • HarmonyOS/OpenHarmony應用開發(fā)-Stage模型應用/組件級配置

    HarmonyOS/OpenHarmony應用開發(fā)-Stage模型應用/組件級配置

    在開發(fā)應用時,需要配置應用的一些標簽,例如應用的包名、圖標等標識特征的屬性。本文描述了在開發(fā)應用需要配置的一些關(guān)鍵標簽。圖標和標簽通常一起配置,可以分為應用圖標、應用標簽和入口圖標、入口標簽,分別對應 app.json5配置文件 和 module.json5配置文件 文件中的

    2024年02月13日
    瀏覽(21)
  • OpenHarmony鴻蒙原生應用開發(fā),ArkTS、ArkUI學習踩坑學習筆記,持續(xù)更新中。

    OpenHarmony鴻蒙原生應用開發(fā),ArkTS、ArkUI學習踩坑學習筆記,持續(xù)更新中。

    結(jié)論:在BIOS里面將Hyper-V打開,DevEco Studio模擬器可以成功啟動。 如果在另外的文件中引用組件,需要使用export導出,并在使用的頁面import該自定義組件。 1.自定義組件(被導入組件) 2.組合組件(引用自定義組件) 1、main_pages.json配置文件配置靜態(tài)路由地址,配置文件

    2024年02月04日
    瀏覽(21)
  • HarmonyOS/OpenHarmony應用開發(fā)-HDC環(huán)境變量設(shè)置

    HarmonyOS/OpenHarmony應用開發(fā)-HDC環(huán)境變量設(shè)置

    hdc(HarmonyOS Device Connector)是 HarmonyOS 為開發(fā)人員提供的用于調(diào)試的命令行工具,通過該工具可以在 windows/linux/mac 系統(tǒng)上與真實設(shè)備或者模擬器進行交互。 hdc 工具通過 HarmonyOS SDK 獲取,存放于 /Huawei/Sdk/openharmony/版本號/toolchains/ 目錄下。 1、打開環(huán)境變量 2、新建系統(tǒng)變量 3、

    2024年04月15日
    瀏覽(62)
  • HarmonyOS/OpenHarmony(Stage模型)應用開發(fā)單一手勢(二)

    HarmonyOS/OpenHarmony(Stage模型)應用開發(fā)單一手勢(二)

    三、拖動手勢(PanGesture) .PanGestureOptions(value?:{ fingers?:number; direction?:PanDirection; distance?:number}) 拖動手勢用于觸發(fā)拖動手勢事件,滑動達到最小滑動距離(默認值為5vp)時拖動手勢識別成功,擁有三個可選參數(shù): fingers:非必選參數(shù),用于聲明觸發(fā)拖動手勢所需要的最少手指數(shù)

    2024年02月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包