目次
要件
次ステップは、HOC の作成という最も重要な部分です
ホームページ ウェブフロントエンド jsチュートリアル Vue の HOC テクノロジーが無限ロード リストを開発する方法 (コード例)

Vue の HOC テクノロジーが無限ロード リストを開発する方法 (コード例)

Jan 10, 2019 am 11:11 AM
javascript vue.js

この記事の内容は、Vue の HOC テクノロジーを使用して無限ロード リストを開発する方法 (コード例) です。必要な方は参考にしていただければ幸いです。

Web 開発では、データのページ読み込みメカニズムを使用します。そのバリエーションの 1 つは、ページの下部にループ読み込みメカニズムを使用することです。さらに読み込むボタン。問題は、異なるデータを表示する場合、そのようなリストを大量に記述する必要があることですが、ロジックは同様です。

  1. データ セットを維持する

  2. さらにデータを読み込む

  3. データを対応するデータとともに使用するコンポーネント それを表示します。

  4. 読み込みステータスなどを処理します。

すべて同じロジックを完成させるそのようなコンポーネントはありますか?

要件

このような InfiniteList コンポーネントが必要です。このコンポーネントは、関連データの読み込みと保守を管理し、それをリスト形式で表示する役割を果たします。 list items は、呼び出し元 によって決定された コンポーネントである必要があります。

HOC

高階コンポーネントの概念は、高階関数と同様に、React でよく言及されます。

高階関数:
(fn) => otherFn高階コンポーネント:
component =>otherComponent高階コンポーネントは次の目的で使用されます。コードの再利用 主に処理ロジックと汎用性において優れたツールは、奇跡的な効果をもたらします。

そこで、この要件を達成するために HOC を使用することにしました

参考記事: http://hcysun.me/2018/01/05/%...
Conscience Blog
この記事に関連する知識

  • vue

  • vue のレンダリング関数

実装

0

vue および iview UI ライブラリを使用します

1

最初に UI フレームワークを作成し、vue ファイルを使用してコンポーネント全体を構築します。基本的な枠組み。ソース コード アドレス

  • html パート

<template>
  <div>
    <div>
      <slot></slot>
    </div>
    <div>
      <button>
        {{loadButtonText}}
      </button>
    </div>
  </div>
</template>
ログイン後にコピー
スロットを使用して、ループ内でレンダリングされる項目を配布します

  • js パート

UI 関連のデータ (あまり重要ではありません)

 props: {
      loadTip: {
        type: String,
        default: "加载更多"
      }
      ...
    },
    computed: {
      loadButtonText() {},
      tipIcon() {}
    }
ログイン後にコピー
このパートの最も重要な部分は 1 つのイベント発行だけであり、これは変換されます。データの読み込み要求のボタンをクリックしたときの動作

handleClickLoad() {
        // 发射 请求加载数据的 事件
        this.$emit("on-load");
      }
ログイン後にコピー
    #css部分は省略
  • 2

次ステップは、HOC の作成という最も重要な部分です

まず第一に、Vue のコンポーネントが何であるかを理解する必要があります。 Vue ファイルを書くときと同様に、エクスポートされるのはオブジェクトなので、今 HOC を書くときは、実際には最終的にオブジェクトを返す必要があります。

そこで、HOC を生成するために次の関数を書きました

/**
 * 使用高阶组件的办法实现了一个无限加载列表
 * 可以根据数据循环渲染出特定的组件,并且管理加载状态
 * @param component 具体项的组件 {props: {data}}
*/
function InfiniteList(listItem) {
    return {
        props:...
        data(){}
        ...
    }
}
ログイン後にコピー

レンダリングする場合は、もちろん Vue のレンダリング関数を使用します
render(h) {
    return h(component, data, children);
}
ログイン後にコピー

組み合わせ方法を使用します。最外層のニーズを使用しました。手順 1 で作成したテンプレートをインポートして登録しました。

import InfiniteListTemplate from "./InfiniteListTemplate";
function InfiniteList(listItem) {
    return {
        ...
        components: {
          InfiniteListTemplate  //  列表框架的模板,这个模板里面只有ui表现
        },
        ...
    }
}
ログイン後にコピー

render 関数は、React に慣れているプログラマにとっては難しくなく、公式 Web サイトにも非常に詳細に紹介されています。

render(h) {
      const self = this;
      // 根据 data 的 dataList循环渲染子组件
      const listItems = ...

      return h(InfiniteListTemplate, {
        props: {
          ...self.$props, // 传递所有参数
          hasMore: self.hasMore,  // 另外的hasMore和loading是这个HOC的state
          loading: self.loading
        },
        attrs: self.$attrs,
        on: {
          // 监听加载按钮事件
          "on-load": () => self.handleLoadData()
        }
      }, listItems);
    },
ログイン後にコピー

ここでは、テンプレートが最も外側のレイヤー (テンプレート コンポーネントと呼ばれる) でレンダリングされ、現在の HOC の props と attrs がテンプレート コンポーネントに渡されます。

ここで HOC データについて説明します。非常に単純です。2 つの状態と 1 つのデータ配列です。

data() {
      return {
        hasMore: true,
        loading: false,
        dataList: []
      }
    }
ログイン後にコピー

それでは、ループはどこでレンダリングされているのでしょうか?心配しないでください。render の listItem は、ループ内でレンダリングするコンポーネントです。React を使用する人は、このスタイルによく慣れていると思います。
const listItems = this.dataList.map(item => h(component, {
            props: {
              data: item
            }
          })
        );
ログイン後にコピー

はメンテナンスデータはどうですか?もちろん、管理のために

load data

関数を渡す必要があります。HOC の props で

return h(InfiniteListTemplate, {options}, listItems);
ログイン後にコピー

を定義します。その後、テンプレート関数が on を起動することを覚えています。 -loadイベント? HOC でそれをリッスンしてロジックを処理する必要があります

props: {
      tipColor,
      loadTip,
      loadingTip,
      // 上面的数据都是为了传给模板(组件)
      offset: {
        type: Number,
        default: 5
      },
      // 数据加载的函数,需要的是一个 (index, offset) => Promise
      loadDataFunc: {
        type: Function,
        default() {
          return (index, offset) => Promise.resolve(new Array(offset).map((o, i) => index + i));
        }
      }
    },
ログイン後にコピー

InfiniteList.js コードを完成させます3

もう一度使用してください

render(h) {
    return h(InfiniteListTemplate, {
        ...
        on: {
            'on-load': () => self.handleLoadData()
        }
    }, listItems);
},
methods: {
      /**
       * 监听模板点出了加载按钮时的操作
       * 调用数据加载函数加载数据
       * @return {Promise<void>}
       */
      async handleLoadData() {
        try {
          this.loading = true;
          let res = await this.loadDataFunc(this.dataList.length, this.offset);
          if (res && res.length) {
            this.dataList = this.dataList.concat(res);
            this.$Message.success(`成功获取到${res.length}条新数据`);
          } else {
            this.$Message.info(`已经获取了全部数据了`);
            this.hasMore = false;
          }
        } catch (e) {
          this.$Message.error("加载失败" + e.message);
        } finally {
          this.loading = false;
        }
      }
    },</void>
ログイン後にコピー

MyComponent .vue

は非常に単純なコンポーネントです

<script>
import MyComponent from "./components/MyComponent";
import InfiniteList from "./components/hoc/InfiniteList";
const InfiniteListComponent = InfiniteList(MyComponent);
...

data() {
    loadDataFunc: (index, offset) => Promise<[]>
}
</script>

<template>
  <div>
    <infinitelistcomponent>
    </infinitelistcomponent>
  </div>
</template>
ログイン後にコピー

レンダリングは次のとおりです

Vue の HOC テクノロジーが無限ロード リストを開発する方法 (コード例)概要フロントエンド内 開発プロセス中、HOC はコードを利用するための強力なツールですが、抽象化には高い要件があります。

React が大好きになったような気がします...Vue はこの HOC を実装するのがとても面倒です

以上がVue の HOC テクノロジーが無限ロード リストを開発する方法 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 Dec 17, 2023 am 08:41 AM

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。

See all articles