본문으로 건너뛰기

reset

</> reset: UseFormReset

전체 폼 상태, 필드 참조, 구독을 초기화합니다. 선택적 인수로 폼 상태의 일부만 초기화할 수도 있습니다.

매개변수


Reset은 formState를 유지할 수 있습니다. 사용할 수 있는 옵션은 다음과 같습니다.

이름타입설명
valuesobject | (values: Object) => Object 폼 값을 초기화할 선택적 객체입니다. 값을 제공할 때는 전체 defaultValues를 전달하는 것이 좋습니다. v7.36.0부터 현재 폼 값을 받아 다음 값을 반환하는 콜백도 허용합니다.
optionskeepErrorsboolean모든 오류를 유지합니다. 이후 사용자가 추가로 작업하면 이 동작은 보장되지 않습니다.
keepDirtybooleanDirtyFields 폼 상태를 유지하며, 사용자가 추가로 작업할 때까지 isDirty도 현재 상태로 잠시 유지됩니다.

중요: 이 유지 옵션은 폼 입력 값이 아니라 dirty 필드의 폼 상태에만 적용됩니다.
keepDirtyValuesbooleanv7.31.0부터 DirtyFieldsisDirty를 유지하며, dirty 상태가 아닌 필드만 새로 제공된 값으로 갱신합니다. 예제를 확인하세요.

중요: formState의 dirtyFields를 구독해야 합니다.
keepValuesboolean폼 입력 값이 변경되지 않습니다.
keepDefaultValuesbooleanuseForm으로 초기화한 기존 defaultValues를 유지합니다.
  • isDirty를 다시 검사합니다. 새로 제공된 값을 원래 defaultValues와 비교한 결과로 설정됩니다.
  • 값을 제공하면 dirtyFields도 다시 갱신됩니다. 새로 제공된 값과 원래 defaultValues를 비교한 결과로 설정됩니다.
keepIsSubmittedbooleanisSubmitted 상태가 변경되지 않습니다.
keepIsSubmitSuccessfulbooleanv7.47.0부터 isSubmitSuccessful 상태가 변경되지 않습니다.
keepTouchedbooleanisTouched 상태가 변경되지 않습니다.
keepIsValidatingbooleanv7.51.0부터 초기화 시 지우지 않고 isValidating/validatingFields 상태를 유지합니다.
keepIsValidboolean사용자가 추가로 작업할 때까지 isValid가 현재 상태로 잠시 유지됩니다.
keepSubmitCountbooleansubmitCount 상태가 변경되지 않습니다.
keepFieldsRefbooleanv7.60.0부터 내부 필드 참조(등록된 입력)를 보존합니다. 입력을 언마운트하고 다시 마운트하지 않으면서 폼 값을 초기화할 때 유용합니다.
예제:

비제어 컴포넌트

import { useForm } from "react-hook-form"

interface UseFormInputs {
firstName: string
lastName: string
}

export default function Form() {
const {
register,
handleSubmit,
reset,
formState: { errors },
} = useForm<UseFormInputs>()
const onSubmit = (data: UseFormInputs) => {
console.log(data)
}

return (
<form onSubmit={handleSubmit(onSubmit)}>
<label>First name</label>
<input {...register("firstName", { required: true })} />

<label>Last name</label>
<input {...register("lastName")} />

<input type="submit" />
<input type="reset" value="Standard Reset Field Values" />
<input
type="button"
onClick={() => reset()}
value="Custom Reset Field Values & Errors"
/>
</form>
)
}

Controller

import { useForm, Controller } from "react-hook-form"
import { TextField } from "@mui/material"

interface IFormInputs {
firstName: string
lastName: string
}

export default function App() {
const { register, handleSubmit, reset, setValue, control } =
useForm<IFormInputs>()
const onSubmit = (data: IFormInputs) => console.log(data)

return (
<form onSubmit={handleSubmit(onSubmit)}>
<Controller
render={({ field }) => <TextField {...field} />}
name="firstName"
control={control}
rules={{ required: true }}
defaultValue=""
/>
<Controller
render={({ field }) => <TextField {...field} />}
name="lastName"
control={control}
defaultValue=""
/>

<input type="submit" />
<input type="button" onClick={reset} />
<input
type="button"
onClick={() => {
reset({
firstName: "bill",
lastName: "luo",
})
}}
/>
</form>
)
}

제출 후 초기화

import { useEffect } from "react"
import { useForm, useFieldArray, Controller } from "react-hook-form"

function App() {
const {
register,
handleSubmit,
reset,
formState,
formState: { isSubmitSuccessful },
} = useForm({ defaultValues: { something: "anything" } })

const onSubmit = (data) => {
// It's recommended to reset in useEffect as execution order matters
// reset({ ...data })
}

useEffect(() => {
if (formState.isSubmitSuccessful) {
reset({ something: "" })
}
}, [formState.isSubmitSuccessful, reset])

return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("something")} />
<input type="submit" />
</form>
)
}

필드 배열

import { useEffect } from "react"
import { useForm, useFieldArray, Controller } from "react-hook-form"

function App() {
const { register, control, handleSubmit, reset } = useForm({
defaultValues: {
loadState: "unloaded",
names: [{ firstName: "Bill", lastName: "Luo" }],
},
})
const { fields, remove } = useFieldArray({
control,
name: "names",
})

useEffect(() => {
reset({
names: [
{
firstName: "Bob",
lastName: "Actually",
},
{
firstName: "Jane",
lastName: "Actually",
},
],
})
}, [reset])

const onSubmit = (data) => console.log("data", data)

return (
<form onSubmit={handleSubmit(onSubmit)}>
<ul>
{fields.map((item, index) => (
<li key={item.id}>
<input {...register(`names.${index}.firstName`)} />

<Controller
render={({ field }) => <input {...field} />}
name={`names.${index}.lastName`}
control={control}
/>
<button type="button" onClick={() => remove(index)}>
Delete
</button>
</li>
))}
</ul>

<input type="submit" />
</form>
)
}

동영상