Navigation
コードからページを遷移する場合、NavigationManagerを使う。
(*)DIして使用すればよい。
■アプリケーションのルートページに遷移する例
@inject NavigationManager NavigationManage;
this.NavigationManager .NavigateTo("./");
コンポーネントにコンテンツを渡す
■RenderFragment
・コンポーネントにHTMLなどのコンテンツを渡すことを可能とするもの。
・コンポーネント側Codeでは、RenderFragment型で、コンテンツを受け取る
パラメータを定義
・コンポーネント側razorでは、受け取ったコンテンツを表示したい場所に、
@フラグメント名と定義する。
対象のRenderFragment名でタグを切り、そのタグ内で引き渡すHTMLを書く。
<Component側 Code部>
[Parameter]
public RenderFragment Content1{ get; set; }
[Parameter]
public RenderFragment Content2 { get; set; }
<Component側 razor部>
<div>
<p>@Content1</p>
<p>@Content2</p>
</div>
<Component呼び出し側>
<Component名 Title = "パラメータをコンポーネントに渡す">
<Content1>
<a href="https://yahoo/co.jp">Content1に表示</a> ///Content1にaタグが生成される
</Content1>
<Content2>
<a href="https://Google/com">Content2に表示</a>
</Content2>
</Component>
Component間のデータ授受(属性スプラッティング)
コンポーネントに複数のパラメータを一括で渡すことができる。
(*)ただし、一つのコンポーネントに渡せるパラメータのまとまりは一種だけ。
・CaptureUnmatchedValues属性を定義し、Dictionary型でパラメータを定義する。
■Component側(パラメータを受ける側)
・Code側
[Parameter(CaptureUnmatchedValues = true)]
public Dictionary<string, object> パラメータ名{ get; set; }
・Razor側
<input id="test" @attributes ="パラメータ名" />
■コンポーネント呼び出し側
<コンポーネント @attributes ="パラメータ名" />
@code{
public Dictionary<string, object> パラメータ名{ get; set;}
= new Dictionary<string, object>
{
{ "maxlength", "5" },
{ "placeholder", "ここに入力してください..." },
{ "size", "50" }
};
}
Task,async,await
■Task
・処理したい仕事のまとまり:Task(=複数のメソッド)を保持して、
それを実行開始するもの。手順書。
・Task.Runは、Taskのインスタンス化と実行を同時にするもの。
・Task.Runは内部のメソッドを非同期で実行開始だけするもの。
よって、処理が終わる前に即座に次の処理に進む。
var task = Task.Run( () =>
{
MethodA();
MethodB();
});
■async
・メソッドやTaskの宣言時に付ける文言。
付けたメソッドを「非同期メソッド」という。
・つけると、メソッド内でawaitを使えるようになるだけ。
■await
・非同期で実行されるTaskやメソッドの終了を待つ。
終了を待つので、非同期処理の実行結果を受け取り処理することが
できる。
(ex)
var returnValue = await Task.Run( () => GetNameMethod()) ;
Task.RunでGetNameMethodを実行し、その実行が終わるのを待ち、
returnValue変数に結果をセットしている。
■戻り値
Taskの実行結果の戻り値を呼び出し元に返す場合
そのメソッドの引数の型は、Task<T>になる。
例えば、Stringのリストを返すGetNameMethodを非同期で実行する場合
以下のようになる。
public async Task<IEnumerable<String>> GetNameByStringList()
{
return await Task.Run( () => this.GetNameMethod()) ;
}
子Componentから親への受渡まとめ
基本的に、以下の2のやり方だけやっていればよいのではないか?
■子側
子側はやり方は一つだけ。
①[Parameter]属性付きでEventCallbackを定義する。
②渡したいタイミングで、定義したイベントを起こす。
①
[Parameter]
public EventCallback<渡す値の型> イベント名{ get; set; }
②
private void イベント起こすメソッド(){
イベント名.InvokeAsync(this.Result);
}
■親側
親側は2通りある。
1.戻り値として直接値を受け取る
2.イベントを購読する
1.戻り値を受け取る
①コンポーネントを呼ぶ時、パラメータに@bind-イベント名=戻値名>
<コンポーネント名 Weight ="@Weight"
Height ="@Height" @bind-Result="Result" />
このやり方の場合、自動でバインドされる為、子で渡された後
何か処理を挟む余地はない。
また子のイベント名を、変数名+Changedにしなければならない。
2.イベントを購読する
①コンポーネントを呼ぶ時、子のイベント名=紐付先親メソッド名とする。
②紐付先親メソッド名で、引数に渡される値の型を持たせる。
<コンポーネント 子イベント名="親メソッド名" />
private void 親メソッド名(子が渡す値の型 子イベントの引数名)
{
}
Razor記法‐制御構文
■IF
@if(条件)
{
<div>Trueの場合です</div>
}
else
{
<div>Falseの場合です</div>
}
■ForEach
@foreach(var 変数 in コレクション)
{
<div>変数</div>
}