てぃぐれのプログラマwiki

ワクワクに従う

Cascading Value リロードに弱い?【Blazor】

経緯

Blazorでどの画面でも使うような値の持ち方を考えていた。

jwtにももちろん値は持つのだが、コロコロ変わる、でも使いまわすような状況の場合、どこに値を持てばよいのか悩む。

 

Session Storage

あまり使わないWebストレージ。あまり値を晒したくない。もちろん、APIの方でチェックはいれるのだが、チェックの入れる方法にも慎重にならなければならない気がする。

WebAssemblyの方って既存のライブラリだと暗号化してくれないのも、使いたくない理由の一つである。

 

Cascading Value

ちょうど、これだ!!となった。ログイン後の情報を使って、取得した値をこれに入れて、子・孫画面でも使える。

使ってみて、いい感じと思ったのだが、リロードや親要素で取得するときと子画面で取得するときが重なると弱い。というか値がnullになる。。

少なくとも、子画面でOnInitializeAsyncや OnAfterRenderAsyncで入れると上記のようになる。

さあ、どうしよう。。

 

追記 22/09/30

Cascading valueがnullになるのは親のレンダリングが子画面より遅いからだ。

Cascading valueを使って処理させたい場合、OnInitilizeではなく、ShouldRenderやOnSetParamerterでNullではない場合等の条件をつけて処理させてあげるのがよいだろう。

 

グローバル変数を使う?

まだ試していないがこのあたりだろうか。。

c# - How Can I Declare A Global Variables Model In BLAZOR? - Stack Overflow