From 2e224ce83e86dd47bf0c9ffdd7ca60ee161bdd59 Mon Sep 17 00:00:00 2001 From: "Joshua J." <31038284+joshuajaco@users.noreply.github.com> Date: Fri, 30 Jan 2026 02:00:06 +0100 Subject: [PATCH 1/2] fix(HiddenSelect): initial form value (#9466) * fix(HiddenSelect): initial form value * Add test to make sure we pass through Select correctly * Apply suggestion from @snowystinger --------- Co-authored-by: Robert Snow Co-authored-by: Robert Snow --- .../@react-aria/select/src/HiddenSelect.tsx | 9 +++- .../select/test/HiddenSelect.test.tsx | 17 ++++++++ .../react-aria-components/test/Select.test.js | 41 ++++++++++++++++++- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/packages/@react-aria/select/src/HiddenSelect.tsx b/packages/@react-aria/select/src/HiddenSelect.tsx index 61e9455b571..1029f53eb8e 100644 --- a/packages/@react-aria/select/src/HiddenSelect.tsx +++ b/packages/@react-aria/select/src/HiddenSelect.tsx @@ -145,6 +145,8 @@ export function HiddenSelect(props: Hidde let inputRef = useRef(null); let {containerProps, selectProps} = useHiddenSelect({...props, selectRef: state.collection.size <= 300 ? selectRef : inputRef}, state, triggerRef); + let values: (Key | null)[] = Array.isArray(state.value) ? state.value : [state.value]; + // If used in a
, use a hidden input so the value can be submitted to a server. // If the collection isn't too big, use a hidden . @@ -167,6 +169,10 @@ export function HiddenSelect(props: Hidde ); } })} + {/* The collection may be empty during the initial render. */} + {/* Rendering options for the current values ensures the select has a value immediately, */} + {/* making FormData reads consistent. */} + {state.collection.size === 0 && name && values.map((value, i) =>