Next UI Components Guide
Project Information

Select / MultiSelect / RHFSelect / RHFMultiSelect

react-select 기반 Select, MultiSelect, RHFSelect, RHFMultiSelect의 controlled usage, React Hook Form 연동, props 확장 패턴을 정리한 가이드 페이지입니다.

Select

Select / controlled usage

Select는 react-select를 기반으로 value와 onChange를 외부 상태로 관리하는 controlled usage를 기준으로 정리한 선택 컴포넌트입니다.

Prop

value | onChange | options

value: string | number | nulloptions: OptionsOrGroups<SelectOption, GroupBase<SelectOption>>

Select는 단일 선택 전용 래퍼입니다. react-select의 option 객체는 내부에서만 쓰고, 외부에서는 선택된 value 하나만 주고받습니다. options는 일반 목록과 grouped options를 모두 그대로 전달할 수 있습니다.

디자인
Prop

isSearchable | isClearable | placeholder

boolean | string

react-select의 검색과 clear 기능을 그대로 열어두되, 기본 스타일은 Textfield와 유사한 형태로 맞췄습니다.

담당자를 선택해주세요
Prop

MultiSelect

value: (string | number)[]

MultiSelect는 다중 선택 전용 래퍼입니다. value는 항상 배열로 관리되고, 여러 option을 chip 형태로 선택할 수 있습니다.

React
TypeScript
Prop

disabled | readOnly | isError | grouped options

boolean | OptionsOrGroups<SelectOption, GroupBase<SelectOption>>

disabled는 상호작용 전체를 막고, readOnly는 현재 값을 유지한 채 메뉴 열기, 검색, clear, 값 변경만 막습니다. grouped options는 Select와 MultiSelect 모두 그대로 전달할 수 있습니다.

운영
에디터
항목을 선택해주세요
항목을 선택해주세요.

React Hook Form

RHFSelect / RHFMultiSelect / 폼 연동

RHFSelect는 단일 선택, RHFMultiSelect는 다중 선택을 React Hook Form 필드와 연결한 래퍼 컴포넌트입니다.

Prop

Select props 확장 + RHFComponentProps

RHFComponentProps<TFormValues, TFieldName, SelectProps, RHFValueInputManagedProps>

RHFSelect는 Select props를 기반으로 하고, name/value/defaultValue/onBlur/onChange는 RHF가 관리합니다. 단일 선택값은 string | number | null 형태로 RHF 상태와 연결되고, defaultValue도 null 또는 단일 value 형태를 사용합니다.

프로덕트
name과 control을 전달하면 RHF 상태와 연결됩니다.
Prop

rules

required | validate

필수 선택처럼 단일 선택값이 반드시 있어야 하는 경우 rules로 검증을 연결할 수 있습니다.

권한을 선택해주세요
Prop

RHFMultiSelect

RHFComponentProps<TFormValues, TFieldName, MultiSelectProps, RHFValueInputManagedProps>

RHFMultiSelect는 다중 선택 전용 래퍼입니다. RHF 필드는 배열 값을 다루고, defaultValue도 [] 같은 배열 형태를 사용하는 것이 자연스럽습니다. closeMenuOnSelect={false} 조합도 자주 함께 사용합니다.

React
TypeScript
배열 값으로 RHF 상태와 연결됩니다.
Prop

react-select props

isSearchable | isClearable | noOptionsMessage | menuPlacement ...

RHF 연결과 함께 react-select 주요 props를 그대로 함께 전달할 수 있습니다. isSearchable, isClearable, noOptionsMessage, menuPlacement뿐 아니라 styles, components 같은 확장도 동일하게 사용할 수 있습니다.

담당자를 검색해주세요
react-select props와 styles, components 확장도 RHFSelect에서 함께 사용할 수 있습니다.

Props Table

Select props 한눈에 보기

Select의 단일 선택 value 규칙과 react-select 확장 props를 표로 정리했습니다.

PropTypeDefaultRequiredDescription
optionsOptionsOrGroups<SelectOption, GroupBase<SelectOption>>-Required일반 옵션 목록과 grouped options를 모두 그대로 전달할 수 있습니다.
valuestring | number | nullnullOptional외부에서는 option 객체 대신 선택된 primitive value 하나만 주고받습니다.
onChange(nextValue, selectedOption, actionMeta) => voidundefinedOptionalnextValue는 primitive value 또는 null이고, selectedOption과 actionMeta도 함께 받을 수 있습니다.
placeholderstring"항목을 선택해주세요"Optional선택값이 없을 때 표시할 안내 문구입니다.
disabledbooleanfalseOptional상호작용 전체를 비활성화합니다.
readOnlybooleanfalseOptional현재 값을 유지한 채 메뉴 열기, 검색, clear, 값 변경만 막습니다.
isErrorbooleanfalseOptional시각 에러 상태와 aria-invalid를 적용합니다. Field의 에러 상태와 합쳐집니다.
infoMessage | errorMessagestring""Optional필드 아래에 안내 메시지나 에러 메시지를 노출합니다.
isSearchable | isClearablebooleanfalse | falseOptionalreact-select 검색과 clear 기능을 그대로 열어둡니다. readOnly/disabled에서는 자동으로 비활성화됩니다.
components | stylesreact-select extension propsundefinedOptionalreact-select 커스텀 컴포넌트와 스타일 확장을 전달할 수 있습니다.
menuPlacement | menuPosition | noOptionsMessage ...react-select propsinheritedOptionalreact-select의 주요 메뉴 제어 prop도 함께 전달할 수 있습니다.
SelectProps는 react-select의 단일 선택 API를 감싸되, 외부에서는 option 객체 대신 primitive value만 다루도록 단순화한 래퍼 타입입니다.

Props Table

MultiSelect props 한눈에 보기

MultiSelect의 다중 선택 value 규칙과 자주 쓰는 react-select props를 표로 정리했습니다.

PropTypeDefaultRequiredDescription
optionsOptionsOrGroups<SelectOption, GroupBase<SelectOption>>-Required일반 옵션 목록과 grouped options를 모두 그대로 전달할 수 있습니다.
value(string | number)[][]Optional외부에서는 선택된 primitive value 배열만 주고받습니다.
onChange(nextValue, selectedOption, actionMeta) => voidundefinedOptionalnextValue는 primitive value 배열이고, selectedOption과 actionMeta도 함께 받을 수 있습니다.
closeMenuOnSelectbooleanreact-select defaultOptional다중 선택에서는 보통 false로 두고 연속 선택 흐름을 만듭니다.
isSearchable | isClearablebooleanfalse | falseOptional검색과 전체 clear 기능을 그대로 열어둘 수 있습니다. readOnly/disabled에서는 자동으로 비활성화됩니다.
placeholderstring"항목을 선택해주세요"Optional선택값이 없을 때 표시할 안내 문구입니다.
disabled | readOnly | isErrorbooleanfalseOptional상태 제어와 에러 표시 규칙은 Select와 동일합니다.
infoMessage | errorMessagestring""Optional필드 아래에 안내 메시지나 에러 메시지를 노출합니다.
components | styles | menuPlacement ...react-select propsinheritedOptionalreact-select의 커스텀 컴포넌트, 스타일, 메뉴 제어 prop도 함께 전달할 수 있습니다.
MultiSelectProps는 react-select의 다중 선택 API를 감싸되, 외부에서는 option 객체 대신 primitive value[]만 다루도록 단순화한 래퍼 타입입니다.

Props Table

RHFSelect props 한눈에 보기

RHFSelect에서 사용하는 RHF 제어 props와 Select 상속 props를 표로 정리했습니다.

PropTypeDefaultRequiredDescription
nameFieldPath<TFormValues>-RequiredReact Hook Form 필드 경로입니다.
controlControl<TFormValues>-RequireduseForm에서 받은 control 객체를 전달합니다.
rulesUseControllerProps['rules']undefinedOptional필수 선택이나 커스텀 검증 규칙을 useController 규격으로 전달합니다.
defaultValuestring | number | nullundefinedOptional일반적으로는 useForm의 defaultValues를 우선 사용합니다.
shouldUnregisterbooleanfalseOptional조건부 렌더링으로 필드가 사라질 때 RHF 상태에서도 값을 제거할지 결정합니다.
disabledbooleanfalseOptionaluseController와 실제 Select에 동시에 반영되어 필드 업데이트와 상호작용을 막습니다.
isError | errorMessageboolean | stringfalse | field error messageOptionalRHF 검증 상태를 기반으로 시각 에러 상태와 메시지를 적용합니다.
options | isSearchable | isClearable ...Select inherited propsinheritedOptionalRHF가 직접 관리하지 않는 Select UI props와 react-select props는 그대로 전달할 수 있습니다.
RHFSelectPropsSelectProps에서 name, value, defaultValue, onBlur, onChange를 RHF가 관리하는 구조입니다.

Props Table

RHFMultiSelect props 한눈에 보기

RHFMultiSelect에서 사용하는 RHF 제어 props와 MultiSelect 상속 props를 표로 정리했습니다.

PropTypeDefaultRequiredDescription
nameFieldPath<TFormValues>-RequiredReact Hook Form 필드 경로입니다.
controlControl<TFormValues>-RequireduseForm에서 받은 control 객체를 전달합니다.
rulesUseControllerProps['rules']undefinedOptional최소 선택 개수 같은 검증 규칙을 useController 규격으로 전달합니다.
defaultValue(string | number)[]undefinedOptional일반적으로는 useForm의 defaultValues를 우선 사용합니다.
shouldUnregisterbooleanfalseOptional조건부 렌더링으로 필드가 사라질 때 RHF 상태에서도 값을 제거할지 결정합니다.
disabledbooleanfalseOptionaluseController와 실제 MultiSelect에 동시에 반영되어 필드 업데이트와 상호작용을 막습니다.
isError | errorMessageboolean | stringfalse | field error messageOptionalRHF 검증 상태를 기반으로 시각 에러 상태와 메시지를 적용합니다.
options | closeMenuOnSelect | isSearchable ...MultiSelect inherited propsinheritedOptionalRHF가 직접 관리하지 않는 MultiSelect UI props와 react-select props는 그대로 전달할 수 있습니다.
RHFMultiSelectPropsMultiSelectProps에서 name, value, defaultValue, onBlur, onChange를 RHF가 관리하는 구조입니다.