본문으로 건너뛰기

subscribe

subscribe: UseFormSubscribe v7.55.0부터

formState 변경과 값 업데이트를 구독합니다. 폼 변경으로 인한 불필요한 리렌더링을 피하면서 개별 필드나 전체 폼을 구독할 수 있습니다.

Props(속성)


이름타입설명예시
nameundefined전체 폼을 구독합니다.subscribe()
stringname으로 단일 필드를 구독합니다.subscribe({ name: 'firstName' })
string[]name으로 여러 필드를 구독합니다.subscribe({ name: ['firstName', 'lastName'] })
formStatePartial<ReadFormState>구독할 formState 항목을 선택합니다.
subscribe({ 
  formState: { 
    values: true, 
    isDirty: true, 
    dirtyFields: true, 
    touchedFields: true, 
    isValid: true, 
    errors: true, 
    validatingFields: true, 
    isValidating: true 
  } 
})
callbackFunction구독의 콜백 함수입니다.
subscribe({ 
  formState: { 
    values: true 
  }, 
  callback: ({ values }) => { 
    console.log(values) 
  } 
})
exactboolean = false이름을 정확히 일치시킬지 지정합니다. false(기본값)이면 구독한 이름이 변경된 필드 이름의 접두사이거나 그 반대일 때 구독이 실행됩니다. v7.81.0부터 true이면 구독한 필드 자체나 상위 경로 중 하나가 업데이트될 때 실행되지만, 중첩된 하위 경로가 변경될 때는 실행되지 않습니다(예: "users.0.name""users"를 설정하면 업데이트되지만 "users""users.0.name"이 변경되어도 업데이트되지 않음).subscribe({ name: 'target', exact: true })
예시:

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

type FormInputs = {
firstName: string
lastName: string
}

export default function App() {
const { register, subscribe } = useForm<FormInputs>()

useEffect(() => {
// make sure to unsubscribe;
const callback = subscribe({
formState: {
values: true,
},
callback: ({ values }) => {
console.log(values)
},
})

return () => callback()

// You can also just return the subscribe
// return subscribe();
}, [subscribe])

return (
<form>
<input {...register("firstName", { required: true })} />
<input {...register("lastName", { required: true })} />
</form>
)
}