そこで、当時開発でよく悩んでいたスマレジのAPIを手軽に実行できるアプリを作ってみたのです。リクエストの仕様がちょっと独特かつ、項目が多いので気軽に試すのが難しいかなーというAPIでした。作ってみたのがこんな感じのものです。(低料金プランとSignalIR未設定のためか、ちょっと重い・・・)https://smaregiapiexplorer.azurewebsites.net/さて、なんとか自分がイメージしていたものが動くところまでは至ったのですが、そこで色々とぶつかっていたので、それを共有したいと思います。実装する上で、一番の課題だったところは、一番の機能的ポイントでもある、動的なテーブル形式のInputフォームでした。APIは各カラムのフィルターを柔軟に書けるようになっている反面、この部分のリクエストをJSONで書くのがなかなか大変だったので、この部分の実現が一番の肝でした。その1まあ、しょうがない。側に返す機能が備わっています。docs.microsoft.comできる限り、JavaScriptを書きたくなかった私ですが、ここで諦めてHTMLテーブルのInputをなめて、JSONを返すJavaScriptMethodを書き、対応することにしました。その2しかし、ここでも躓きます。APIにアクセスして、テーブルの情報を取得することはできました。Blazorは各Inputやバインディングの値が変更された際に、DOM要素をレンダリングし直します。DOMを初期状態に書き換えてしまい、値が取得できないということが発生。取得できていても非同期処理がレンダリングのタイミングがずれて、裏の変数では値を保持しているのに、レンダリングしている値と一致しないということまで発生しました。JavaScriptで値を取得して、テーブルを構成するためのListプロパティに逐次差し戻し、最新化するというものでした。</BSTable>SelectボックスなどのInputが操作されるたびに、JavaScriptが値を取り直しています。}これにより、テーブルを構成しているオブジェクトの値を最新に保つようにしています。アプリを作る上で感じたポイントと、ここまで私の課題と解決アプローチをお話してきたのですが、これが「まっとうな」「ベスト」といえるアプローチに行き着くことができていない、というのが正直なところです。いうが本来の目的だったのですがちょっと会場の時間が押していたこともあり、なくなく断念となりました(泣というわけで、せっかくなので、このBlogでもヒドイコードを晒して対応アプローチを募ってみたい、と思っています。github.comちなみに、私がこの経験を通じて得た教訓は「できる限り値はバインディングするに限る。直接的なバインディングなのか、間接的なバインディングに問わず」というものでした。(こんなBlogでいいのだろうか。