狠狠撸

狠狠撸Share a Scribd company logo
.NET 7 での
ASP.NET Core Blazor の
新機能ピックアップ
2022/10/29
【7回】.NET 7 x FUN FAN F# | Hybrid
大田 一希
自己紹介
? 名前 : 大田 一希(かずき)
? Twitter : @okazuki
? 仕事 : 日本マイクロソフト
クラウド ソリューション アーキテクト エンジニアリング
? 一言
? 今日は C# のほうから来ました。
? Blog など
? かずきのBlog@hatena
https://blog.okazuki.jp/
? Qiita
https://qiita.com/okazuki
? Zenn
https://zenn.dev/okazuki
? 趣味 : スマブラSP 2480 時間、プログラミング
名刺に印刷するときに
入りきらないと噂
本セッションの目的
.NET 7 の Blazor の新機能を使ってみたくなってもらう!
かなりハードな目標…
新機能が結構地味…
目次
? ローディング画面の新機能
? データ バインディングの新機能
? コンポーネントの仮想化の新機能
? ナビゲーションの新機能
? まとめ
ローディング画面の新機能
.NET 6 の ASP.NET Core Blazor WebAssembly のデフォルトの
ローディング画面
.NET 7 のローディング画面
それっぽさ 2 倍以上
ローディング画面の新機能
.NET 7 では以下の CSS のカスタム プロパティが提供される
? --blazor-load-percentage
? アプリのファイルがロードされたパーセンテージ
? --blazor-load-percentage-text
? アプリのファイルがロードされたパーセンテージの小数点を四捨五入
したテキスト
データ バインディング
最近の UI フレームワークは、ほぼ標準搭載している機能
×
Test
× × × × × ×
検索
▲
▼
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
Page1
Page1
string Query { get; set; }
IEnumerable<Result> Results { get; set; }
UI の値とクラスのプロパティを紐づける機能
データバインディングの新機能
@bind:after が地味に便利
? UI からの値の変更後に呼ばれるメソッドが設定できる
×
Test
× × × × × ×
検索
▲
▼
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
〇×△〇×△〇×△〇×△〇×△
Page1
Page1
string Query { get; set; }
void SearchItems() { … }
①値の更新
@bind="Query" @bind:after="SearchItems"
Test edited
②メソッドの呼び出し
@bind:after の使いどころ
大カテゴリー→中カテゴリー→小カテゴリーを選ぶ機能に最適
双方向バインド対応コンポーネントを作る
以下の 2 つのプロパティをペアで公開
? 読み書き可能な値を保持するためのプロパティを公開
? プロパティ名Changed という名前の EventCallback<T> 型のプロパティを公開
? プロパティの値に変更があったときに EventCallback<T> を呼び出す
素直に実装した場合
新機能を使った場合
<input value="@Value"
@onchange="e => ValueChanged.InvokeAsync(e.Value as string ?? string.Empty)" />
<input @bind:get="Value" @bind:set="ValueChanged" />
よくあるケースなのにコードがメンドクサイ
コンポーネントの仮想化の新機能
.NET 6 から Virtualize コンポーネントで仮想化が可能
? 大量のデータをスクロールさせて表示されるときの効率アップ
.NET 7 で SpacerElement プロパティが追加
? 仮想化時に上下に表示させるダミーのエレメントのタグ名を指定
? デフォルトは div タグ
画面遷移前の確認が出来るように
? こんな機能が簡単に作れるようになる機能が追加
NavigationLock コンポーネント
NavigationLock コンポーネントを置くと画面遷移に割り込める
? OnBeforeInternalNavigation プロパティ
? アプリ内画面遷移時に呼び出される
? 引数の LocationChangingContext の PreventNavigation を呼ぶと画面
遷移をキャンセル可能
? ConfirmExternalNavigation プロパティ
? true を設定すると外部サイトへの画面遷移前に確認ダイアログが出る
画面遷移時に状態を渡せるようになった
今まで
? クエリ パラメーターに渡したい情報を設定
? メモリ上などに情報を設定
? その他の永続化ストレージに情報を設定
? など
今回追加されたもの
? HistoryEntryState プロパティで文字列型のデータを受け渡し可能
HistoryEntryState の使い方
渡す側
? NavigationManager の NavigateTo メソッドの第二引数に渡す
NavigationOptions に設定
受け取る側
? NavigationManager の HistoryEntryState を参照する
_navigationManager.NavigateTo("/counter",
new NavigationOptions
{
HistoryEntryState = "10",
});
string? state = _navigationManager.HistoryEntryState;
便利なポイント
ブラウザーの戻るボタンに対応!!!
クエリパラメーターと違ってユーザーが気軽に
変更できない
その他気になるところ
? Blazor WebAssembly の認証まわりの改善
? login_hint 付きで画面を表示したりとかが簡単に
? など
? 実験的機能で Blazor WebAssembly でマルチスレッド対応
? Blazor 抜きで WebAssembly で .NET が使えるように
まとめ
? 結構地味な新機能達
? ローディング画面
? データバインディング
? 仮想化
? ナビゲーション
? 痒い所に手が届く系機能の充実
? Blazor 自体がこなれてきてる
ありがとうございました
地味に便利な機能を使って快適な Blazor 生活を

More Related Content

.NET 7 での ASP.NET Core Blazor の新機能ピックアップ