Ant Design Blazor コンポーネントライブラリのルーティング再利用マルチタブ機能

Ant Design Blazor コンポーネントライブラリのルーティング再利用マルチタブ機能

最近、Ant Design Blazor コンポーネント ライブラリにマルチタブ コンポーネントを実装する需要が高まっています。そこで、週末を利用して、`Tabs` コンポーネントをベースにした `ReuseTabs` コンポーネントを Blazor の組み込みルーティング コンポーネントと組み合わせて実装しました。

最近、Ant Design Blazor コンポーネント ライブラリにマルチタブ コンポーネントを実装する需要が高まっています。そこで、週末を利用して、 TabsコンポーネントをベースにしたReuseTabsコンポーネントを Blazor の組み込みルーティング コンポーネントと組み合わせて実装しました。

序文

Blazor は、.NET の最新のフロントエンド フレームワークです。WebAssembly または SignalR (WebSocket) に基づいてフロントエンド アプリケーションを構築できます。WebAssembly ホスティング モデルに基づく Blazor は、オフラインでも実行できます。さらに、.NET クラスライブラリを共有できるため、従来の JS ベースのフロントエンドとバックエンドの分離モデルと比較して、コード量を 1/3 に削減できます。 .NET 開発者は、使い慣れたテクノロジと経験を活用してフロントエンド アプリケーションを開発できるようになりました。異なるテクノロジ スタックを持つ開発者間の通信コストも大幅に削減され、生産性がさらに向上します。

つまり、Blazor は .NET 開発者にとってもう 1 つの生産性向上テクノロジーなのです。

Blazor コミュニティ エコシステムのオープン ソース UI コンポーネント ライブラリを使用することで、よく使用されるコンポーネントがカプセル化され、ユーザーは JS や CSS を記述する必要がなくなり、コミュニティの .NET 開発者から高い評価を得ています。現在、Blazor をベースに構築されたエンタープライズレベルのアプリケーションが多数導入・リリースされており、企業に徐々に認知されつつあります。

文章

複数のタブを多重化するルーティングとは

この記事のタイトルにあるルート再利用は、AngularのRouteReuseStrategyの概念であり、中国語コミュニティでは「マルチタブページ」と呼ばれることが多いです。その主な機能は、ページを切り替えるときにページの状態を維持することであり、現在表示されているページの状態は、任意にページを切り替えることで復元できます。これは通常、より複雑なバックエンド管理システムで使用されます。フォームをフィルタリングした後、ユーザーはレコードの詳細ページに入り、元の検索条件、ページ数などを維持したままリストページに戻ることができます。または、フォームに入力するときに、正しい情報を表示するために別のページに移動する必要があります。フォームに戻っても、入力した内容は失われません。

Blazor は C# コードを再利用できるという利点があるため、バックグラウンド管理システムの構築によく使用され、タブの使用が一般的な要求となっています。ただし、公式の Blazor チームはそのようなコンポーネントを直接提供していないため、実装するにはコミュニティのパートナーが必要です。

しかし、コミュニティ内のいくつかのオープンソース コンポーネント ライブラリを見ると、それらはすべて一般的な Tabs タブ コンポーネントのみを実装しており、切り替えパネルとしてのみ使用できます。 「マルチタブ」機能を実装するには、サポートされていないか、独自のメニュー コンポーネントとレイアウト コンポーネントに直接的または間接的に依存し、ページ ファイル パスに依存し、ページ コンポーネント タイプを結合し、最後にリフレクションを使用してページ コンポーネントを作成する必要があります...

マルチタブ機能は実装されていますが、実装はあまりエレガントではありません。結合度が非常に高く、コンポーネントライブラリ自身のフレームワークレイアウトでのみ使用でき、個別に使用することはできません。また、リフレクションのパフォーマンスも良くなく、規約に従ってページを配置する必要があり、ユーザーにさまざまな制限を課しています。

もちろん、コミュニティ内で流通しているより認知度の高いソリューションとして、 BlazorDemoMultiPagesTabプロジェクトがあります。 Blazor の組み込みルーティング コンポーネントを組み合わせてルーティング マルチタブを実装するプロトタイプを提供します。しかし、問題は、これが単なるデモであるということです。原理を実装しているだけです。コードは乱雑です。作者はそれを整理したり、コンポーネントにパッケージ化したりしていません。自分のプロジェクトで使用したい場合は、間違いなく頭を悩ませることになります。

Ant Design Blazor の ReuseTabs コンポーネント

最近、Ant Design Blazor コンポーネント ライブラリにマルチタブ コンポーネントを実装する需要が高まっています。そこで、週末の時間を利用して、 BlazorDemoMultiPagesTabで提供されているアイデアに基づいて、 TabsコンポーネントをベースにしたReuseTabsコンポーネントを実装し、Blazor の組み込みルーティング コンポーネントと組み合わせました。

ReuseTabsコンポーネントには、 ReuseTabsRouteViewReuseTabsという 2 つのサブコンポーネントのみが含まれています。ReuseTabsRouteView ReuseTabsRouteView組み込みのRouteViewコンポーネントから継承し、ページ コンポーネントの状態を維持したり破棄したりできるようにページ コンポーネントのライフ サイクルを引き継ぐ役割を担います。ReuseTabs ReuseTabsタブの表示と操作を担当します。また、メニューやレイアウトなどの他のコンポーネントに依存しないため、どの Blazor アプリケーションでも直接使用でき、他のコンポーネント ライブラリともうまく連携して使用できます。

主な特徴

  • 適用するには2つのコードを変更するだけです
  • タグ名の静的または動的な設定をサポート
  • ルートと同期し、 <a>タグ、 NavigationMangerなどのさまざまなリダイレクト方法をサポートします。

以下では、dotnet new テンプレート プロジェクトを例に、基本的な使用方法を紹介します。

使い方

まず、Ant Design Blazor ドキュメントの説明に従って、AntDesign パッケージとサービス登録をインストールします。

次に、プロジェクト内のApp.razorファイルを変更し、 RouteView ReuseTabsRouteViewに置き換えます。

<ルーター AppAssembly="@typeof(Program).Assembly">
    <コンテキスト="routeData">が見つかりました
- <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" / >
+ <ReuseTabsRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
    </見つかりました>
    ...
</ルーター>

プロジェクト内のMainLayout.razorファイルを変更します。

@LayoutComponentBase を継承します

<div class="page">
    <div class="サイドバー">
        <ナビゲーションメニュー />
    </div>

    <div class="main">
- <div class="top-row px-4">
- <a href="http://blazor.net" rel="external nofollow" target="_blank" class="ml-md-auto">概要</a>
- </div>
- <div class="content px-4">
- @体
- </div>
+ <ReuseTabs Class="top-row px-4" TabPaneClass="content px-4" / >
    </div>
</div>

タグ名をカスタマイズする2つの方法

プレーンテキストの場合は、ページ コンポーネントでReuseTabsPageTitle属性を使用できます。

@ページ "/counter"
+ @attribute [ReuseTabsPageTitle("カウンター")]

別のコンポーネントを追加したり、ページ コンテンツからタイトルを取得したりするなど、テンプレートを使用して動的なタブ名を取得する必要がある場合は、 IReuseTabsPageインターフェイスを実装する必要があります。

@ページ "/"
+ @implements IReuseTabsPage

<h1>こんにちは、世界!</h1>

@コード{
+ パブリック RenderFragment GetPageTitle() =>
+ @<div>
+ <Icon Type="home"/> ホーム
+ </div>
+ ;
}

注: ReuseTabsコンポーネントは現在、バージョン 0.9.0 のデイリー ビルド パッケージに含まれています。正式にリリースされる前に、ドキュメントに記載されている方法を参照してインストールする必要があります。

後続の機能

現在、このコンポーネントは基本的な機能のみを実装しており、一部の機能は後続の計画に含まれています。

  • 右クリックメニュー
  • コードモードが閉じられました
  • キャッシュ戦略
  • ルーティングガードと権限制御

追記

Blazorコミュニティは1年以上前から複数タブの実現を求めてきましたが、ここ数日でようやく実現しました。国内外のコミュニティは歓喜し、大きな達成感を感じています。

実装の詳細については、興味のある学生は Ant Design Blazor のソース コード (数個のファイルのみ) を確認できます。もちろん、興味を持っている学生がたくさんいれば、詳しく紹介する記事を書くこともできます。

実際、コミュニティ内のより多くの愛好家が立ち上がり、経験を共有し、オープンソース プロジェクトに貢献することで、コミュニティが健全に発展することを願っています。
Ant Design Blazor は 1 年以上開発されてきましたが、正直に言うと、他のコンポーネント ライブラリ プロジェクトの作者と比べると、私自身の時間の投資と貢献はそれほど多くありません。コードの貢献に加えて、私のエネルギーの大部分はコミュニティの運営に費やされています。
プロジェクトを宣伝し、通行人をユーザーに変え、ユーザーを貢献者に変え、より多くの人がそれぞれ少しずつのエネルギーを費やして全員の貢献の効果を達成できるようにすることが、オープンソース プロジェクトを長期間アクティブに保つための長期戦略です。

最後に、ユーザーと貢献者の皆様のご支援に心より感謝申し上げます。彼らの問題、事例、PR はどれも私たちの肯定であり、私たちが頑張り続ける原動力です。

参考リンク

https://github.com/BlazorPlus/BlazorDemoMultiPagesTab

https://github.com/ant-design-blazor/demo-reuse-tabs

ナイトリービルド

Ant Design Blazor コンポーネント ライブラリの複数タブのルーティング再利用に関するこの記事はこれで終わりです。Ant Design Blazor コンポーネント ライブラリの関連コンテンツについては、123WORDPRESS.COM で過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • [Asp.Net Core] Blazor Server Sideで画像検証コードを実装する
  • [Asp.Net Core] Blazor サーバーサイドに関する簡単な説明
  • HTTPのヘッダー情報の詳細な説明
  • Golangはhttpのサーバー側とクライアント側を実装するだけです
  • IOSはCocoaHttpServerを使用して携帯電話上にローカルサーバーを構築します
  • Golang は圧縮ファイルのダウンロード機能を提供するための http サーバーを実装します
  • Golang で http.FileServer を使用して静的ファイルを返す
  • http.server に基づく LAN サーバーの構築プロセスの分析
  • golangのhttpserverのエレガントな再起動方法の詳細な説明
  • Blazor Server アプリケーションで HTTP リクエストを実行する

<<:  MySQLデータの同時更新を処理する方法

>>:  Linux コマンドラインでメールを送信する 5 つの方法 (推奨)

推薦する

要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...

CSS でのフレックスレイアウトの詳細な説明

フレックス レイアウトは、エラスティック レイアウトとも呼ばれます。任意のコンテナーをフレックス レ...

Docker Compose を使用して nginx のロード バランシングを実装する方法

Dockerネットワーク管理とコンテナIP設定に基づいてNginxロードバランシングを実装するすべて...

簡潔なReactコンポーネントを書くためのヒント

目次スプレッド演算子を使用してプロパティを渡すのは避けてください関数パラメータをオブジェクトにカプセ...

nginx+php-fpm サービスの HTTP ステータス コード 502 の詳細な分析

弊社の Web プロジェクトの 1 つでは、新しい都市の増加によりトラフィックと DB 負荷が増加し...

ブラウザのスクロールバーのスタイルを変更するための純粋な CSS の例

CSSを使用してブラウザのスクロールバーのスタイルを変更する ::-webkit-スクロールバー{ ...

require/import キーワードを使用して v-for ループでローカル画像をインポートするいくつかの方法

目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...

Nginx でバージョン番号と Web ページのキャッシュ時間を非表示にする方法

Nginx の最適化 - バージョン番号と Web ページのキャッシュ時間を非表示にするバージョン番...

Tomcat をサービスとして登録する際に注意すべき点のまとめ

Tomcat をサービスとして登録する場合の注意点は次のとおりです。 インターフェースを開いたら、以...

MySQL CHARとVARCHARの選択方法

目次VARCHAR 型と CHAR 型結論: VARCHAR 型と CHAR 型VARCHAR と ...

自己終了XHTMLタグを書くときに注意すべきこと

XHTML の img タグはいわゆる自己終了タグであり、XML では完全に合法です。 XHTMLの...

仮想マシンに Linux rhel7.3 オペレーティング システムをインストールする (具体的な手順)

仮想化ソフトウェアをインストールする仮想マシンにオペレーティング システムをインストールする前に、ホ...

DockerコンテナでJupyterノートブックを設定する方法

Jupyter ノートブックは、主に Python コードの記述、より具体的にはディープラーニング開...

Vue nextTickの原理の分析

目次イベントループmiscroTask (マイクロタスク) UI レンダリング (重要なポイント)次...

MySQL の暗黙的な型変換によって発生するインデックス障害の解決策

目次質問再生暗黙的な変換要約する参照する質問仕事中、1 つの SQL クエリ ステートメントのみを実...