Blazor01

BlazorでのWebアプリケーション開発手法1【C#】A09_@rendermode

@rendermode InteractiveServer とは

Counter.razorの2行目に書かれている「@rendermode InteractiveServer」について解説します。これは、ユーザーが画面を操作したときにサーバーと通信するかどうかを指定する記述です。

図1 Counter.razorの2行目に@rendermode InteractiveServerと記述されている

画面が最初に表示されるときは、この記述の有無にかかわらずサーバーと通信して表示されます。問題になるのは、その後ボタンを押すなどのユーザー操作があったときです。ボタンを押して画面を更新するCounter画面のようなページでは、ユーザー操作をサーバーに伝えるために、必ずこの記述が必要になります。

動作確認:ボタンを押してカウントアップ

実際にCounter画面を開き、「Click me」ボタンを押すと、サーバーと通信してCurrent countの値が更新されていくことが確認できます。

図2 Counter画面。ボタンを押す前はCurrent count: 0

図3 ボタンを押すたびにサーバーと通信し、Current countが11に更新される

@rendermode を外すとどうなるか

試しに2行目の「@rendermode InteractiveServer」を削除してビルドし直してみます。

@page "/counter"

<PageTitle>Counter</PageTitle>

 

図4 2行目の@rendermode InteractiveServerを削除してリビルド

この状態で画面を開くと、初期表示(Current count: 0)はされます。ところが「Click me」ボタンを押しても、サーバーと通信しないためCurrent countの値が更新されません。

図5 @rendermodeを外した状態でボタンを押しても、Current countは0のまま変化しない

つまり@rendermode InteractiveServerという記述がないと、初期表示はできてもユーザー操作をサーバーに伝えることができない、ということです。

記述を元に戻す

削除した行を元に戻してリビルドすると、再びボタン操作でサーバーと通信できるようになります。

@page "/counter"
@rendermode InteractiveServer

<PageTitle>Counter</PageTitle>

 

図6 @rendermode InteractiveServerを元に戻してリビルド

図7 記述を戻すと、ボタン操作でCurrent countが再び更新されるようになる

Interactivity locationとの関係

プロジェクトを新規作成する際に選択した「Interactivity location」の設定によって、この記述の要・不要が変わります。プロジェクト作成画面には、Per page/componentとGlobalの2つの選択肢がありました。

図8 プロジェクト作成時の追加情報画面。Interactivity locationの設定項目

図9 Interactivity locationのドロップダウン。Per page/componentとGlobalの2択

Globalを選んでおけば、各ページに@rendermode InteractiveServerを書く必要はなくなります。その代わり、常にサーバーとつなぎっぱなしの状態になるため、サーバーの負荷は上がります。

一方、Per page/component(本コースで選択している設定)を選んでおくと、ユーザー操作があるページだけに@rendermode InteractiveServerを書けばよく、通信が不要なページには書かない、という判断ができます。その分サーバーへの負荷を抑えられるため、基本的にはPer page/componentを選んでおく方がよいということになります。

記述が不要なページの例:Weather画面

Weather画面はデータの一覧をポンと表示するだけで、ユーザー操作を受け取る必要がないページです。そのため、Weather.razorには@rendermode InteractiveServerの記述がありません。

図10 Weather.razor。@attribute [StreamRendering]はあるが、@rendermodeの記述はない

このように、ユーザー操作を受け取って画面を更新する必要があるページにだけ@rendermode InteractiveServerを書く、というのがPer page/component設定における基本的な考え方です。

BlazorでのWebアプリケーション開発手法1【C#】

A01_はじめに
A02_バージョンの確認
A03_プロジェクトの作成
A04_アプリの実行
A05_サンプルプログラムの構成
A06_Razorコンポーネント
A07_Razor構文
A08_@pageでURLを指定する
A09_@rendermode
A10_PageTitle
A11_HTMLの見出し
A12_pタグ
A13_単方向データバインド
A14_単方向データバインドの詳細
A15_Bootstrap
A16_ボタンクリックイベント
A17_イベント引数の受け取り方
A18_ここまでのまとめ
B01_新しいWebページを追加する方法
B02_サイドバーから画面を表示する
B03_サイドバーのアイコンを変更する方法
B04_計測値を表示する
B05_変数に置き換える
B06_最新の値でデータを更新する
B07_@usingで通常のC#コードを呼び出す
B08_画面遷移_aタグ
B09_画面遷移_aタグの見た目をボタンにする
B10_画面遷移_NavigationManagerでの遷移
B11_画面間のパラメータの受け渡し方法
B12_EscapeDataStringでエスケープする
B13_複数のパラメータを渡す
B14_任意のパラメータにする
B15_string以外の型をパラメータで使う方法
B16_DateTime型をパラメータで渡す方法
B17_引数2個のURLも型指定に変更する
B18_パラメータ属性をつけるときの注意点
B19_OnParametersSet
B20_OnInitialized
B21_OnInitializedが2回通る問題の対応
B22_ブラウザが開いている間の値を記憶する方法
B23_値の受け渡しとしてのProtectedSessionStorage
B24_非同期を想定したUIの制御
C01_一覧表示
C02_非同期での一覧表示
C03_table-striped
D01_入力エリア
D02_双方向データバインド
D03_入力データをリアルタイムで通知する方法
D04_placeholder
D05_入力エリアの横幅の調整
D06_テキストチェンジイベントを拾う方法
D07_プルダウン
D08_プルダウンのbootstrap
D09_プルダウンの選択している値をデータバインドで操作する
D10_プルダウンにリストの値を表示する
D11_プルダウンに未選択行を入れる
D12_プルダウンの入力を禁止する
D13_プルダウンのチェンジイベントを取得する
D14_チェックボックス
D15_チェックボックスにラベルを付ける
D16_複数のチェックボックスを並べる
D17_ラジオボタン
D18_ラジオボタンのデータバインド
D19_ラジオボタンのチェンジイベント
D20_ラジオボタンにbootstrapを適応する