본문으로 이동

Vue Form API

Form의 Vue 컴포넌트, prop, slot, 이벤트, 함수와 공개 타입을 확인합니다.

Vue 폼 안내로 돌아가기

API

Vue 패키지: @sectile/vue/form

컴포넌트
  • FormRoot
  • FormSelector
  • FormFieldSelector
  • FormField
  • FormLabel
  • FormDescription
  • FormMessage
  • FormSummary
  • FormReset
  • FormSubmit
고급 컨트롤 프리셋
  • compositeControlCapabilities
  • hiddenInputSubmissionCapabilities
  • hiddenSelectSubmissionCapabilities
  • hiddenValueSubmissionCapabilities
  • nativeInputControlCapabilities

함수

defineFormSubmission

ts
function defineFormSubmission<const Schema extends FormSchema<object, object>>(definition: FormSchemaSubmissionDefinition<Schema>): FormSchemaSubmissionDefinition<Schema>

useFormSelector

ts
function useFormSelector<Selected>(selector: FormSelectorFunction<Selected>, options: FormSubscribeOptions<Selected> = {}): Readonly<ShallowRef<Selected>>

useFormFieldSelector

ts
function useFormFieldSelector<Selected>(id: string, selector: FormFieldSelectorFunction<Selected>, options: FormSubscribeOptions<Selected> = {}): Readonly<ShallowRef<Selected>>

useFormFieldController

ts
function useFormFieldController(id: string): FormFieldController

provideFormControlOwner

ts
function provideFormControlOwner(): void

useCompositeFormControl

ts
function useCompositeFormControl(options: {
  readonly root: FormElementSource;
  readonly focusTarget?: FormElementSource;
  readonly validationTarget?: FormElementSource;
  readonly submissions?: FormSubmissionSource;
  readonly labelMode?: FormLabelMode;
  readonly reset?: () => void;
  readonly getValue?: () => unknown;
  readonly isValueEqual?: (current: unknown, baseline: unknown) => boolean;
}): FormControlParticipation

useFormControl

ts
function useFormControl(registration: FormControlRegistration): FormControlParticipation

useNativeInputFormControl

ts
function useNativeInputFormControl(element: Readonly<ShallowRef<HTMLInputElement | HTMLTextAreaElement | null | undefined>>, options: {
    readonly reset?: () => void;
    readonly getValue?: () => unknown;
    readonly isValueEqual?: (current: unknown, baseline: unknown) => boolean;
  } = {}): FormControlParticipation

Props

FormRootProps

issues

애플리케이션이 제공하는 검증 이슈입니다.

mapSubmitError

제출 중 throw 또는 reject된 오류를 사용자에게 노출해도 되는 failure로 변환하는 함수입니다.

onSubmit

검증을 통과한 네이티브 제출을 처리하고 성공, 제출 failure 또는 서버 이슈를 반환하는 함수입니다.

revalidateOn

검증 실패 후 기존 검증 의도를 다시 수행할 사용자 조작 이벤트입니다.

schema

최종 제출 검증과 출력 변환에 사용할 Standard Schema입니다.

validate

현재 필드를 검증하고 애플리케이션 이슈를 반환하는 함수입니다.

validateOn

첫 제출 전 검증을 수행할 사용자 조작 이벤트입니다.

FormFieldProps

as

이 파트가 렌더링할 요소 또는 컴포넌트입니다.

asChild

하나뿐인 자식 요소에 파트 속성을 직접 합칠지 여부입니다.

disabled

사용자 조작을 막을지 여부입니다.

form

컨트롤을 연결할 네이티브 form 요소의 ID입니다.

id

관련 파트를 연결하는 안정적인 ID입니다.

name

네이티브 폼 제출에 사용할 이름입니다.

readonly

값 확인만 허용하는 읽기 전용 상태 여부입니다.

required

제출 전에 올바른 값이 반드시 있어야 하는지 여부입니다.

FormSelectorProps

equals

선택한 두 상태 스냅샷이 같은지 판정하는 함수입니다.

select

슬롯에 노출할 폼 또는 필드 상태를 선택하는 함수입니다.

FormFieldSelectorProps

equals

선택한 두 상태 스냅샷이 같은지 판정하는 함수입니다.

id

관련 파트를 연결하는 안정적인 ID입니다.

select

슬롯에 노출할 폼 또는 필드 상태를 선택하는 함수입니다.

FormPartProps

as

이 파트가 렌더링할 요소 또는 컴포넌트입니다.

asChild

하나뿐인 자식 요소에 파트 속성을 직접 합칠지 여부입니다.

슬롯

FormRootSlotProps

dirty

현재 값이 기준값과 다른지 여부입니다.

reinitialize

현재 값을 새 변경 기준으로 삼고, 유지하도록 지정하지 않은 폼 상태를 초기화하는 함수입니다.

replaceIssues

한 출처의 검증 이슈를 바꾸는 함수입니다.

reset

네이티브 form reset을 실행하고 Form 상태를 비웁니다. 제어 값은 계속 애플리케이션이 관리합니다.

state

현재 전체 폼 상태입니다.

submission

현재 제출 생명주기 스냅샷입니다.

submitCount

submission.count에서 계산한 제출 시도 횟수입니다.

submitFailed

식별한 제출을 실패로 기록하는 함수입니다.

submitStarted

제출을 시작하고 generation 토큰을 반환하는 함수입니다.

submitSucceeded

식별한 제출을 성공으로 기록하는 함수입니다.

submitted

제출을 시도했는지 여부입니다.

touched

사용자가 필드를 조작했는지 여부입니다.

valid

현재 입력의 검증 통과 여부입니다.

validation

현재 검증 생명주기 스냅샷입니다.

FormFieldSlotProps

clearIssues

현재 필드의 검증 이슈를 비우는 함수입니다.

controlId

시맨틱 컨트롤에 지정한 ID입니다.

describedBy

컨트롤을 설명하는 공백 구분 ID입니다.

descriptionId

필드 도움말에 지정한 ID입니다.

dirty

현재 값이 기준값과 다른지 여부입니다.

id

현재 필드 또는 항목의 안정적인 ID입니다.

issues

현재 canonical 검증 이슈입니다.

labelId

필드 레이블에 지정한 ID입니다.

messageId

필드 오류 메시지에 지정한 ID입니다.

relatedIssues

다른 필드가 소유하지만 현재 필드도 무효로 만드는 이슈입니다.

removeIssue

ID로 필드 이슈 하나를 제거하는 함수입니다.

replaceIssues

한 출처의 검증 이슈를 바꾸는 함수입니다.

setMeta

현재 필드의 수정 가능한 메타 상태를 갱신하는 함수입니다.

touched

사용자가 필드를 조작했는지 여부입니다.

upsertIssue

필드 이슈 하나를 추가하거나 교체하는 함수입니다.

valid

현재 입력의 검증 통과 여부입니다.

FormSummarySlotProps

firstIssue

첫 canonical 이슈이며 없으면 null입니다.

issues

현재 canonical 검증 이슈입니다.

serverIssues

현재 canonical 서버 이슈입니다.

submission

현재 제출 생명주기 스냅샷입니다.

valid

현재 입력의 검증 통과 여부입니다.

validation

현재 검증 생명주기 스냅샷입니다.

FormSubmitSlotProps

canSubmit

폼이 유효하고 제출 중이 아닌지 여부입니다.

submission

현재 제출 생명주기 스냅샷입니다.

submitting

폼 제출이 진행 중인지 여부입니다.

valid

현재 입력의 검증 통과 여부입니다.

이벤트

FormSubmitEvent

이름타입필수
formDataFormData필수
valuesReadonly<Values>필수
submitterHTMLElement | null필수
stateFormState필수
reinitialize(options?: FormReinitializeOptions) => void필수
nativeEventSubmitEvent필수
defaultPreventedboolean필수
preventDefault() => void필수
stopPropagation() => void필수
stopImmediatePropagation() => void필수

기타 타입

FormState

이름타입필수
validationFormValidationState필수
submissionFormSubmissionState필수
touchedboolean필수
dirtyboolean필수
validboolean필수
fieldsreadonly FormFieldState<string>[]필수
issuesreadonly FormIssue<string>[]필수
allIssuesreadonly FormIssue<string>[]필수

FormFieldState

이름타입필수
idstring필수
namestring | null필수
touchedboolean필수
dirtyboolean필수
validboolean필수
issuesreadonly FormIssue<string>[]필수
relatedIssuesreadonly FormIssue<string>[]필수

FormFieldMetaInput

이름타입필수
namestring | null | undefined
touchedboolean | undefined
dirtyboolean | undefined

FormSubscribeOptions

이름타입필수
equals((previous: Selected, next: Selected) => boolean) | undefined

FormSelectorFunction

ts
type FormSelectorFunction<Selected> = (state: FormState) => Selected

FormFieldSelectorFunction

ts
type FormFieldSelectorFunction<Selected> = (field: FormFieldState | null) => Selected

FormIssue

이름타입필수
idStableID필수
messagestring필수
sourceFormIssueSource필수
fieldIdstring | undefined
relatedFieldIdsreadonly string[] | undefined

FormIssueSource

ts
type FormIssueSource = 'native' | 'field' | 'form' | 'validate' | 'schema' | 'server'

FormReinitializeOptions

이름타입필수
preserve{ readonly touched?: boolean; readonly validation?: boolean; readonly submission?: boolean; } | undefined

FormValues

ts
type FormValues<Shape extends object = Record<string, unknown>> = Readonly<Shape>

FormSchema

ts
type FormSchema<Input extends object = Record<string, unknown>, Output extends object = Input> = StandardSchemaV1<FormValues<Input>, FormValues<Output>>

FormSchemaInput

ts
type FormSchemaInput<Schema extends StandardSchemaV1> = StandardSchemaV1.InferInput<Schema>

FormSchemaOutput

ts
type FormSchemaOutput<Schema extends StandardSchemaV1> = StandardSchemaV1.InferOutput<Schema>

FormIssueInput

이름타입필수
idstring | undefined
messagestring필수
pathFormFieldPath | undefined
relatedPathsreadonly FormFieldPath[] | undefined

FormSubmitIssue

ts
type FormSubmitIssue = FormIssueInput

FormSubmitResult

ts
type FormSubmitResult =
| void
  | { readonly ok: true }
  | {
      readonly ok: false;
      readonly failure?: FormSubmissionFailure;
      readonly issues?: readonly FormSubmitIssue[];
    }

FormSubmitHandler

ts
type FormSubmitHandler<Values extends object = Record<string, unknown>> = (event: FormSubmitEvent<Values>) => FormSubmitResult | PromiseLike<FormSubmitResult>

FormSubmissionDefinition

이름타입필수
schemaundefined
onSubmitFormSubmitHandler<Record<string, unknown>>필수

FormSchemaSubmissionDefinition

이름타입필수
schemaSchema필수
onSubmitFormSubmitHandler<FormSchemaOutput<Schema>>필수

FormSubmitErrorMapper

ts
type FormSubmitErrorMapper =
(
  reason: unknown,
) => FormSubmissionFailure | undefined

FormResetHandler

ts
type FormResetHandler = () => void

FormStateChangeHandler

ts
type FormStateChangeHandler = (state: FormState) => void

FormInteractionValidationTrigger

ts
type FormInteractionValidationTrigger = Exclude<FormValidationTrigger, 'submit'>

FormValidateContext

이름타입필수
triggerFormValidationTrigger필수
intentFormValidationIntent필수
changedFieldIdstring | null필수
signalAbortSignal필수

FormValidationIssue

이름타입필수
messagestring필수
pathFormFieldPath | undefined
relatedPathsreadonly FormFieldPath[] | undefined

FormValidationResult

이름타입필수
issuesreadonly FormValidationIssue[] | undefined

FormValidateHandler

ts
type FormValidateHandler<Values extends object = Record<string, unknown>> =
(
  values: FormValues<Values>,
  context: FormValidateContext,
) => FormValidationResult | PromiseLike<FormValidationResult>

FormSubmitStartedAction

ts
type FormSubmitStartedAction = () => number | null

FormSubmitSucceededAction

ts
type FormSubmitSucceededAction = (generation: number) => boolean

FormSubmitFailedAction

ts
type FormSubmitFailedAction =
(
  generation: number,
  result: {
    readonly failure?: FormSubmissionFailure;
    readonly issues?: readonly FormIssue[];
  },
) => boolean

FormReplaceIssuesAction

ts
type FormReplaceIssuesAction =
(
  source: FormIssueSource,
  issues: readonly FormIssue[],
) => boolean

FormResetAction

ts
type FormResetAction = () => void

FormReinitializeAction

ts
type FormReinitializeAction = (options?: FormReinitializeOptions) => void

FormRootComponent

ts
interface FormRootComponent {
  new <Input extends object = Record<string, unknown>, Output extends object = Input>(props: FormRootPublicProps<Input, Output>): {
    $props: FormRootPublicProps<Input, Output>;
    $slots: {
      default?: (props: FormRootSlotProps) => VNodeChild;
    };
    submitStarted: FormSubmitStartedAction;
    submitSucceeded: FormSubmitSucceededAction;
    submitFailed: FormSubmitFailedAction;
    replaceIssues: FormReplaceIssuesAction;
    reinitialize: FormReinitializeAction;
    reset: FormResetAction;
  };
}

FormFieldController

이름타입필수
stateReadonly<ShallowRef<FormFieldState | null>>필수
setMeta(meta: FormFieldMetaInput) => boolean필수
replaceIssues(source: FormIssueSource, issues: readonly FormIssue[]) => boolean필수
upsertIssue(issue: FormIssue) => boolean필수
removeIssue(issueId: string | number) => boolean필수
clearIssues(source?: FormIssueSource) => boolean필수

FormSelectorComponent

ts
interface FormSelectorComponent {
  new <Selected>(props: FormSelectorProps<Selected>): {
    $props: FormSelectorProps<Selected>;
    $slots: { default?: (props: { readonly selected: Selected }) => VNodeChild };
  };
}

FormFieldSelectorComponent

ts
interface FormFieldSelectorComponent {
  new <Selected>(props: FormFieldSelectorProps<Selected>): {
    $props: FormFieldSelectorProps<Selected>;
    $slots: { default?: (props: { readonly selected: Selected }) => VNodeChild };
  };
}

FormControlCapabilities

이름타입필수
idboolean | undefined
describedByboolean | undefined
invalidboolean | undefined
labelledByboolean | undefined
requiredboolean | undefined
disabledboolean | undefined
readonlyboolean | undefined

FormControlParticipation

이름타입필수
participatingboolean필수
controlPropsComputedRef<Readonly<Record<string, unknown>>>필수

FormControlRegistration

이름타입필수
elementFormElementSource<HTMLElement>필수
semanticControlFormElementSource<HTMLElement> | undefined
focusTargetFormElementSource<HTMLElement> | undefined
validationTargetFormElementSource<HTMLElement> | undefined
submissionsFormSubmissionSource | undefined
labelModeFormLabelMode | undefined
capabilitiesFormControlCapabilities | undefined
explicitreadonly FormMetadataAttribute[] | undefined
reset(() => void) | undefined
getValue(() => unknown) | undefined
isValueEqual((current: unknown, baseline: unknown) => boolean) | undefined

FormElementSource

ts
type FormElementSource<ElementType extends HTMLElement = HTMLElement> =
| Readonly<ShallowRef<ElementType | null | undefined>>
  | (() => ElementType | null)

FormLabelMode

ts
type FormLabelMode = 'for' | 'labelledby' | 'legend'

FormMetadataAttribute

ts
type FormMetadataAttribute =
| 'id'
  | 'name'
  | 'form'
  | 'required'
  | 'disabled'
  | 'readonly'
  | 'aria-describedby'
  | 'aria-errormessage'
  | 'aria-invalid'
  | 'aria-labelledby'
  | 'aria-disabled'
  | 'aria-required'
  | 'aria-readonly'

FormSubmissionCapabilities

이름타입필수
nameboolean | undefined
formboolean | undefined
requiredboolean | undefined
disabledboolean | undefined
readonlyboolean | undefined

FormSubmissionRegistration

이름타입필수
elementFormElementSource<FormControlSubmissionElement>필수
relativeNameFormControlRelativePath | undefined
capabilitiesFormSubmissionCapabilities | undefined
explicitreadonly FormMetadataAttribute[] | undefined

FormSubmissionSource

ts
type FormSubmissionSource =
| readonly FormSubmissionRegistration[]
  | (() => readonly FormSubmissionRegistration[])

MIT 라이선스로 배포합니다.