.NET 8 RC1 Blazor

.NET 8 RC1(正確にはPreview 6?)からblazorserverプロジェクトテンプレートが無くなってしまった。

.NET Blogによると、

.NET 8 では、Web UI のすべてのニーズに Blazor コンポーネントのフルスタックを使用できるように、Blazor に機能を追加してきました。 要求に応じてサーバーから Blazor コンポーネントを静的にレンダリングし、強化されたナビゲーションとフォーム処理でエクスペリエンスを段階的に強化し、サーバーでレンダリングされた更新をストリーミングし、Blazor Server または Blazor WebAssembly を使用して必要な場合に豊かな対話機能を追加できるようになりました。 アプリの読み込み時間を最適化するために、Blazor は実行時に Blazor Server と Blazor WebAssembly のどちらを使用するかを自動選択することもできます。

とのこと。

Server SideのBlazorコンポーネントを動かすには、blazorプロジェクトテンプレートを使用する必要がある。このテンプレートのオプションを見ると、デフォルトでServer Sideを使用するらしい。

-uw, –use-wasm Configures whether to support rendering components interactively in the browser using WebAssembly.
The default value is false.
Type: bool
Default: false
-us, –use-server Configures whether to support rendering components interactively on the server via a SignalR WebSocket connection.
The default value is true.

Type: bool
Default: true

で、blazorテンプレートでコンポーネントを作ってみたのだが、イベントのハンドリングとかが全然動作しない。.NET Blogの記事を見てもよくわからないし、他の記事でもRC1以前のものばかりで良く分からない。

仕方ないので、サンプルのCounterコンポーネントを見てみると、先頭に以下のようなディレクティブが・・・

@page "/counter"
@attribute [RenderModeServer]

どうもこの属性を指定しないと、サーバーサイドでレンダリングされないようだ。

とりあえず、この属性を指定したら、コンポーネントが動作するようになった。

結構、破壊的な変更だよね。

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。 好きなことだけ拾って投稿しているので、内容にはあまり期待しないでねw
カテゴリー: .NET, asp.net core, Blazor, 技術系 パーマリンク

.NET 8 RC1 Blazor への2件のフィードバック

  1. takezou のコメント:

    ちなみに、-uwを付けて、プロジェクトを作成すると、サンプルコンポーネント用プロジェクトとサーバープロジェクトが作成され、コンポーネントプロジェクトが、ProjectReferenceとしてサーバープロジェクトに参照される形となる。

    Program.csを見ると、
    builder.Services.AddRazorComponents()
    .AddServerComponents()
    .AddWebAssemblyComponents();
    ・・・
    app.MapRazorComponents()
    .AddServerRenderMode()
    .AddWebAssemblyRenderMode();

    となっており、ServerSideコンポーネントでもWASMコンポーネントでも実行できるようになっているようだ。
    コンポーネントプロジェクト上のCounterコンポーネントには以下の属性が指定されている。

    @attribute [RenderModeAuto]
    要は、呼び出される元によって、wasmかServer Sideかが決定される様子。

    サーバー上のCounterコンポーネントでは、単純に以下のような形でコンポーネントを呼び出している。
    <プロジェクト名.Client.Pages.Counter />

  2. takezou のコメント:

    .NET8リリース版では、Blazor ServerSideプロジェクトテンプレートが復活している。
    ちなみに、Blazorテンプレートを使用する場合、「静的サーバー」レンダリングがデフォルトとなり、動的なレンダリングを行なうには、下記のディレクティブを指定する。
    「対話型サーバーレンダリング」
    @rendermode InteractiveServer
    「対話型Web Assembly」
    @rendermode InteractiveWebAssembly
    「自動判定」
    @rendermode InteractiveAuto
    ちなみに、静的サーバレンダリングで実行中画面などを表示する場合は、下記を指定。
    @attribute [StreamRendering]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください