🎉

Blazor に対応してみた ReactiveProperty v8.1.0 をリリースしました

2022/04/30に公開

ReactiveProperty v8.1.0 をリリースしました。

リリースノート

今回は凄く久しぶりに新しいパッケージを増やしました。Blazor 用の ReactiveProperty.Blazor を追加しています。中身としては以前 zenn に書いた EditForm でのバリデーション機能との統合のための ReactivePropertiesValidator コンポーネントが入っています。

https://zenn.dev/okazuki/articles/reactiveproperty-editform

Blazor での ReactiveProperty の使いどころですが、ボタン クリック イベントなどの後に自動的に UI が更新されたりするので、あんまり使いどころがないかもしれないですが、タイマーといったようなユーザー操作以外を契機にデータが変わった場合は、データの変更を監視して StateHasChanged メソッドを呼ぶ必要があります。そんな時には ReactiveProperty を使うと以下のように簡単に書けます。

// このコンポーネントで監視する必要のある ReactiveProperty<T> などの IObseravble<T> をマージして StateHasChanged を呼ぶ
Observable.Merge(new[]
{
    vm.SomeProperty.ToUnit(),
    vm.HogeProperty.ToUnit(),
    anotherVm.FooProperty.ToUnit(),
}).Subscribe(_ => InvokeAsync(StateHasChanged)); // サンプルなのでやってないけど Subscribe したものはコンポーネントの破棄タイミングで Dispose してね

他に、ReactiveProperty 型じゃない場合でも INotifyPropertyChanged インターフェースを実装している型に対しては以下のようにプロパティの変更の監視が出来というのも、使えるポイントかもしれません。

somePOCO.ObserveProperty(x => x.Foo.Bar.Baz).Subscribe(_ => InvokeAsync(StateHasChanged));

まとめ

ということで、若干見切り発車ですが Blazor で使う場合にあると便利そうなバリデーション機能を追加してみました。Blazor であると便利そうなものがあれば今後も追加していこうと思います。

でも、次の v8.2.0 は MAUI がリリースされたタイミングかな。

Microsoft (有志)

Discussion