Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

new_bird-hyun

React에서 React Hook Form과 Context API로 전역 폼 상태 관리 본문

코딩 공부

React에서 React Hook Form과 Context API로 전역 폼 상태 관리

새혀니 2025. 1. 2. 10:20

// FormContext.js

import React, { createContext, useContext } from 'react';
import { useForm, FormProvider } from 'react-hook-form';

const FormContext = createContext();

export const FormProviderComponent = ({ children }) => {
  const methods = useForm();
  return (
    <FormContext.Provider value={methods}>
      <FormProvider {...methods}>{children}</FormProvider>
    </FormContext.Provider>
  );
};

export const useFormContext = () => useContext(FormContext);

 

 

// Form.js

import React from 'react';
import { useFormContext } from './FormContext';

const FormInput = ({ name, label }) => {
  const { register, formState: { errors } } = useFormContext();

  return (
    <div>
      <label>{label}</label>
      <input {...register(name, { required: `${label}을 입력하세요.` })} />
      {errors[name] && <p>{errors[name].message}</p>}
    </div>
  );
};

export default function Form() {
  const { handleSubmit } = useFormContext();

  const onSubmit = (data) => {
    console.log('폼 데이터:', data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <FormInput name="name" label="이름" />
      <FormInput name="email" label="이메일" />
      <button type="submit">제출</button>
    </form>
  );
}

 

 

 

// App.js

import React from 'react';
import { FormProviderComponent } from './FormContext';
import Form from './Form';

function App() {
  return (
    <FormProviderComponent>
      <Form />
    </FormProviderComponent>
  );
}

export default App;

// React Hook Form과 Context API를 결합하면 복잡한 폼 상태 관리를 간소화할 수 있음