VUE無限レベルツリーデータ構造表示の実装

VUE無限レベルツリーデータ構造表示の実装

プロジェクトに取り組んでいると、左側のメニューナビゲーションやコメント参照などでよく使用されるツリー状のデータ構造に遭遇することがあります。このデータ構造の特徴は、ネストされるレベルがわからないため、テンプレートを使用してこのようなデータを表示するのは少し難しいことです。この記事では、このデータ構造を表示する 2 つの方法について説明します。

記事で使用したデータは次のとおりです。

メインデータ: {
  値: "ルート"、
  子供たち:[{
    値: "レベル 1-1",
    子供たち:[{
      値: "レベル 2-1",
      子供たち:[{
          値: "レベル3-1",
          子供たち:[]
       }]
     },{
       値: "レベル 2-2",
       子供たち:[]
     }]
   },{
      値: "レベル1-2",
      子供たち:[]
   }]
}

こんな感じです。

コンポーネントの再帰呼び出し

1 つ目は、自分自身を再帰的に呼び出し、自分自身を参照して子のデータを表示するコンポーネントを作成するコンポーネントです。子コンポーネントは次のとおりです。

<テンプレート>
<div>
  <div class="demo">
    {{treeData.value}}
    <tree-comp v-for="(item, index) in treeData.children" :treeData="item"></tree-comp>
  </div>
</div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  名前: 'treeComp',
  小道具:{
    ツリーデータ: {
      デフォルト: function(){
        戻る {}
      }
    }
  },
  マウントされた(){}、
  メソッド:{}
}
</スクリプト>
<style lang="less" スコープ>
  .demo{padding:5px 0;margin:1px 10px;text-align: left;font-size:16px;max-width:500px;border-left:1px dashed #999;
    &:before{content:'--';display: inline-block;padding:0 4px;}
  }
</スタイル>

次に、子コンポーネントを使用し、子コンポーネントにデータを渡す親コンポーネントを作成します。

<テンプレート>
  <tree-comp :treeData="メインデータ"></tree-comp>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  名前: 'treeMain',
  データ () {
    戻る {
      メインデータ: {
        値: "ルート"、
        子供たち:[
          {
            値: "レベル 1-1",
            子供たち:[{
              値: "レベル 2-1",
              子供たち:[{
                値: "レベル3-1",
                子供たち:[]
              }]
            },{
              値: "レベル 2-2",
              子供たち:[]
            }]
          },{
            値: "レベル1-2",
            子供たち:[]
          }
        ]
      }
    }
  },
  コンポーネント:{
    "tree-comp": () => import('./TreeComp')
  },
  マウントされた(){}、
  メソッド:{}
}
</スクリプト>

再帰コンポーネントの内容については、公式ドキュメントに記載されています-->再帰コンポーネント

レンダリングメソッドの使用

コンポーネントを使用するだけでなく、Vue の render メソッドを使用して JavaScript の完全なプログラミング機能を活用し、ツリー データを再帰的に処理して、無限レベルのツリーを表示することもできます。次のように:

<テンプレート>
  <tree-comp :treeData="メインデータ"></tree-comp>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  名前: 'treeRender',
  データ () {
    戻る {
      メインデータ: {
        値: "ルート"、
        子供たち:[
          {
            値: "レベル 1-1",
            子供たち:[{
              値: "レベル 2-1",
              子供たち:[{
                値: "レベル3-1",
                子供たち:[]
              }]
            },{
              値: "レベル 2-2",
              子供たち:[]
            }]
          },{
            値: "レベル1-2",
            子供たち:[]
          }
        ]
      }
    }
  },
  コンポーネント:{
    ツリーコンプ:{
      機能的: 真、
      プロパティ: {treeData: オブジェクト},
      レンダリング(h, {props: {treeData = {}}}) {
        const creatNode = (ノード)=>{
          ノードの子とノードの子の長さが0より大きい場合
            hArr = node.children.map(item=>{ とする
              createNode(item) を返す
            })
            h('div', {class:'demo'}, [node.value, hArr]) を返します
          }それ以外{
            h('div', {class:'demo'}, [node.value]) を返します
          }          
        }
        createNode(treeData) を返す
      },
    }
  },
  マウントされた(){}、
  メソッド:{}
}
</スクリプト>
<style lang="less" スコープ>
  .demo{padding:5px 0;margin:1px 10px;text-align: left;font-size:16px;max-width:500px;border-left:1px dashed #999;
    &:before{content:'--';display: inline-block;padding:0 4px;}
  }
</スタイル>

その中核となるのは render メソッドです。creatNode メソッドは深さ優先方式でツリー データを再帰的に走査し、vnode を生成してからページをレンダリングします。

VUE 無限レベルツリーデータ構造表示の実装に関するこの記事はこれで終わりです。VUE 無限レベルツリー構造に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Java 赤黒木データ構造とアルゴリズム分析
  • Java データ構造 バイナリツリーの学習
  • Python データ構造におけるバイナリソートツリーの定義、検索、挿入、構築、削除
  • Javaデータ構造におけるハフマンツリーの概要と実装
  • js が elementUI ツリー メニューのデータ構造を構築する方法の詳細な説明
  • Pythonデータ構造ツリーの概念の詳細な説明

<<:  IDEA で Docker プロジェクトをデプロイする手順

>>:  MacOS に MySQL 8.0 をインストールして MySQL にログインする方法

推薦する

Node.jsはブレークポイント再開を実装する

目次ソリューション分析スライス履歴書のダウンロード具体的な解決プロセス論理的分析フロントエンドサーバ...

CSSの優先度を理解する2つの方法

方法1: 値を追加する公式の説明を見るには MDN にアクセスしてください。優先度はどのように計算さ...

MySQLでユーザー認証情報を表示する具体的な方法

具体的な方法: 1. コマンドプロンプトを開く2. mysql -u root -pコマンドを入力し...

実用的なウェブオンラインツール12選

1.ファビコン.cc ico アイコンの Web サイトをオンラインで作成するには、画像をアップロー...

Node.js コンソールで強調表示されたコードを印刷する方法

序文コードを実行してエラーが発生すると、エラーが出力されます。エラーにはスタック情報が含まれており、...

MySQL の詳細な単一テーブルの追加、削除、変更、クエリの CRUD ステートメント

MySQL の追加、削除、変更、クエリステートメント1. 練習シートを作成するここでの練習表は3つの...

Unicode の数学記号の概要

数学、物理学、および一部の科学技術分野で使用される特殊記号は多数あります。Unicode コードには...

Vue3 における非親子コンポーネントの値転送の詳細な説明

目次アプリ.vueサブ1.vueサブ2.vue要約する vue2 における非親子コンポーネントの値の...

Vueは画像切り替え効果を実現

この記事の例では、画像切り替え効果を実現するためのVueの具体的なコードを参考までに共有しています。...

XHTML CSSを使用して正式なブログを書く

ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...

小さなプログラムが天井に張り付いてしまう問題を完璧に解決するためにposition:stickyを使用する方法

最近、あるプロジェクトのクライアントが、上部に 2 つのタブ メニューを配置することを要求しました。...

Linux の fsevents モジュールによって発生する npm ls エラーの解決方法の詳細な説明

Mac で開発されたプロジェクトがあり、パッケージ npm i がインストールされており、すべて正常...

Linux オペレーティング システムでよく使用される MySQL コマンドの概要

以下に、一般的な MySQL コマンドをいくつか示します。 -- データベース サービスを開始します...

ボックスモデルのサイズの詳細な説明は、パディング、マージン、境界の値によって異なります。

ボックス モデルは、要素ボックスの幅と高さ、パディング、境界線、余白のサイズを指定します。境界線の内...

MYSQL マスタースレーブ レプリケーションの知識ポイントの概要

単一の MYSQL サーバーが現在の Web サイトのトラフィックに対応できない場合の最適化ソリュー...