MUIのAutocompleteでのloadingとoptionsの関係
MUI(Material UI)にはAutocompleteというComponentがあります。
こいつは文字通りフォームでの入力を自動補完してくれる便利なやつですが、その分だけ複雑になっています。
ComponentのAPIドキュメントを見ると属性が多くて、何をどうしたらいいんだ… ってなりがち。
この中で
- 候補が読込中かを示す
loading
- 補完の候補を列挙する
options
この組み合わせによる挙動が最近のバージョンで一時的に変わってしまったので、書き留めておきます。
何がどうなったのか
具体的にはloading
がtrue
かつ、options
が設定されていた場合の挙動に影響がありました。
<Autocomplete {...props} loading={true} options={['foo', 'bar']} />
こうした場合に、以前は読込中ではなく補完候補が表示されていました。options.length > 0
の場合にはloading
の状態に関わらず候補が出てきます。
先月リリースされたv5.15.13では、この場合に何も表示されなくなってしまいました。
loading | options | 結果 |
---|---|---|
true | 空 | loading表示 |
false | 候補あり | 候補が表示される |
true | 候補あり | 何も表示されない |
diffを見ると、他の問題を修正した時に意図せず紛れ込んだ挙動と思われたのでissueを立てて報告しました。
やはり意図しないバグだったようで、v5.15.15で修正されました。
どちらかと言うとoptionsに候補があっても、loadingフラグが立っていればloading表示になる方が自然ではないかとも思ったのでその提案も込めてPRを上げましたが、ひとまず既存の動作を復元する決定となりました。
後方互換性は大切なのでそれはそれで妥当な判断でしょう。これまで書かれてなかったテストケースも増えたし、v6も含めて当面この挙動が継続されると見て大丈夫でしょう。
まとめ
さっきの表でまとめると、〜v5.15.12とv5.15.15〜の挙動は以下のようになります。
loading | options | 結果 |
---|---|---|
true | 空 | loading表示 |
false | 候補あり | 候補が表示される |
true | 候補あり | 候補が表示される |
v5.15.13とv5.15.14では挙動が異なるので、該当バージョンを使っている場合はv5.15.15に上げてしまうのをおすすめします。
Discussion