期間: 2026-09-17 〜 2026-09-24 · PR 5 件(新機能 0 / 変更・修正 3 / その他 2)
新機能
なし
変更・修正
S2 の Menu でローダー/null の前のセパレーターを非表示に(#10609)
Before
S2 では常にローディング用ノードをレンダーするため、セクション付き Menu で最後のセクションの後にもセパレーター(区切り線)が表示されてしまっていた。
After
次のノードがローダーまたは null のときはセパレーターを隠すようにした。あわせて、非同期ローディングの Menu の docs サンプルに幅を固定し、アイテム読み込み中にリサイズしないようにした。
⏳ 未リリース · トピック: Menu
コレクション内でキーが重複した場合に例外を投げるように(#10605)
Before
異なる要素が同じキーを持つとコレクションが壊れていた。
['a', 'a', 'b']のようなケースではgetKeyBefore('a')が自己ループを返して無限反復・メモリ枯渇のクラッシュにつながり、['a', 'x', 'a']のようなケースでは反復すると'a'しか出てこないのにsizeは 2 を報告するなど、要素が静かに失われていた。
After
Documentが各キーを所有するElementNodeを記録するようにし、BaseCollection.addNodeで既に別の要素がそのキーを所有している場合は「Duplicate key ”…” found in collection. Every item in a collection must have a unique key.」という例外を投げるようにした。所有権エントリはremoveNodeで解放され、resetAfterSSRでクリアされる。
移行が必要
これまで黙って壊れていたキー重複が、今後は開発時に例外として検出されるようになる。GridList・ListBox・Table などでキーが重複するデータを渡していないか確認する必要がある。
⏳ 未リリース · トピック: Collections
空応答の後に非同期アイテムが届いたとき ComboBox のメニューを再度開くよう修正(#9823)
Before
useComboBoxをuseAsyncListと組み合わせている場合、クエリが 0 件を返すとメニューが閉じ、その後結果を返すクエリがあってもメニューが再度開かなかった。open()には空の controlled コレクションでも開けるガードがあるが、自動クローズ側のuseEffectには対称なガードがなく、filteredCollection.size === 0で無条件にクローズしていたことが原因。
After
空の controlled コレクションによって自動クローズされたかどうかをフラグで追跡し、入力にフォーカスが残ったまま件数が 0 以外になったら再度メニューを開くようにした。ユーザー操作(blur・Escape・確定)によるクローズ時はこのフラグをリセットし、その場合は閉じたままになる。
@react-spectrum/comboboxコンポーネントはallowsEmptyCollection: trueを自動設定して既にこの問題を回避していたが、useComboBox/useComboBoxStateを直接使う場合や RAC の ComboBox にはこの自動対応がなかった。
⏳ 未リリース · トピック: ComboBox