Skip to content

jw-r/react-lightweight-form

Repository files navigation

react-lightweight-form

애플리케이션 내에 text, textArea type의 Input Field만을 사용하는데 어마어마한 크기의 react-hook-form을 다운로드 할 필요는 없습니다

여러분의 프로토타입 혹은 많은 종류의 Input Field를 전문적으로 다루지 않는 애플리케이션을 위해 더이상 무거운 react-hook-form을 다운로드하지 마세요

이 패키지를 사용해 매 입력마다 리렌더링을 발생시키지 않으면서 onChange 방식으로 강력한 유효성 검사를 수행할 수 있습니다!

물론 강력한 타입 시스템을 장점 역시 충분히 누릴 수 있습니다👍

설치

npm i react-lightweight-form yarn add react-lightweight-form

사용 방법

아래는 useForm 훅을 사용하는 기본적인 예시입니다.

interface Values { username: string; } function App() { const { register, handleSubmit } = useForm<Values>(); const onSubmit = (values: Values) => { somePostRequest(values); }; return ( <form onSubmit={handleSubmit(onSubmit)}> <div>이름</div> <input {...register('username', { onMountFocus: true, })} /> <button>제출</button> </form> ); }

register

useFormregister 함수는 폼 필드를 등록하고 유효성 검사 규칙을 적용하는 강력한 기능을 제공합니다. 이 함수를 사용하여, 폼 필드와 관련된 여러 옵션들을 지정할 수 있습니다. 각 옵션의 사용 방법은 다음과 같습니다.

Validation Options

값 유효성 검사 옵션은 다음과 같이 설정할 수 있습니다.

  1. 값으로 설정 (에러 발생 시, errors 객체에 기본 에러 메시지가 부여됩니다)
{...register('username', { maxLength: 10, })}
  1. 객체로 설정 (에러 발생 시의 Error message를 직접 설정합니다)
{...register('username', { maxLength: { value: 10, message: '사용자 이름은 최대 10글자까지 입력할 수 있습니다', }, })}
  • required: 이 필드가 필수로 입력해야 하는지 여부를 정의합니다.
register('username', { required: true }); // 또는 사용자 지정 에러 메시지와 함께 register('username', { required: { value: true, message: '사용자 이름을 입력해야 합니다', }, });
  • maxLength: 필드의 최대 길이를 지정합니다.
register('username', { maxLength: 20 }); // 또는 사용자 지정 에러 메시지와 함께 register('username', { maxLength: { value: 20, message: '사용자 이름은 20자를 초과할 수 없습니다', }, });
  • minLength: 필드의 최소 길이를 지정합니다.
register('password', { minLength: 6 }); // 또는 사용자 지정 에러 메시지와 함께 register('password', { minLength: { value: 6, message: '비밀번호는 최소 6자 이상이어야 합니다', }, });
  • max: 숫자 입력 필드의 최대 값을 설정합니다.
register('age', { max: 99 }); // 또는 사용자 지정 에러 메시지와 함께 register('age', { max: { value: 99, message: '나이는 99세 이하여야 합니다', }, });
  • min: 숫자 입력 필드의 최소 값을 설정합니다.
register('age', { min: 18 }); // 또는 사용자 지정 에러 메시지와 함께 register('age', { min: { value: 18, message: '나이는 18세 이상이어야 합니다', }, });
  • pattern: 필드 값이 일치해야 하는 정규 표현식을 지정합니다.
register('phoneNumber', { pattern: /[0-9]/g, }); // 또는 사용자 지정 에러 메시지와 함께 register('phoneNumber', { pattern: { value: /[0-9]/g, message: '전화번호는 숫자만 포함해야 합니다', }, });
  • validation: 사용자 정의 유효성 검사 함수를 지정할 수 있습니다. 이 함수는 입력 값을 매개변수로 받아 유효성 여부를 boolean 값으로 반환합니다.
register('email', { validation: (inputValue) => inputValue.includes('@'), // 또는 validation: { value: (inputValue) => inputValue.includes('@'), message: '이메일 형식에는 @가 포함되어야 합니다', }, });

그 외 Options

  • onErrorFocus: 유효성 검사 실패 시 해당 필드에 자동으로 포커스를 맞출지를 결정합니다. 기본값은 true입니다.
register('username', { onErrorFocus: true });
  • onMountFocus: 컴포넌트가 마운트될 때 해당 필드에 자동으로 포커스를 맞출 것인지 결정합니다. 이는 사용자가 폼을 더 빠르게 입력하기 시작할 수 있도록 도와줍니다. 기본값은 false입니다.
register('username', { onMountFocus: true });
  • autoComplete: 브라우저가 해당 필드에 대해 자동완성 기능을 사용할지 여부를 결정합니다. 보안이 중요한 필드(예: 비밀번호)에 대해서는 false로 설정하여 자동완성을 비활성화할 수 있습니다. 기본값은 false입니다.
register('password', { autoComplete: false });
  • initialValue: 필드의 초기 값을 설정합니다. 이 값을 통해 폼 필드에 기본값을 제공할 수 있으며, 사용자가 폼을 열었을 때 해당 값이 이미 입력되어 있게 합니다.
register('username', { initialValue: 'user123' });
  • setValueAs: 필드의 값을 변환하여 저장할 때 사용되는 함수를 정의합니다. 이를 통해 사용자가 입력한 값을 내부적으로 사용하기에 적합한 다른 형태로 변환할 수 있습니다.
    • Submit 시에 반환받은 값의 타입이 string 이외의 값이길 기대한다면 반드시 setValueAs 함수를 통해 타입을 설정해야합니다.
register('birthdate', { setValueAs: (value) => new Date(value), });

또는, 사용자가 입력한 숫자 형식의 문자열을 실제 숫자로 변환하려면 다음과 같이 할 수 있습니다.

register('age', { setValueAs: (value) => parseInt(value, 10), });

handleSubmit

handleSubmit 함수는 폼 제출(submit) 이벤트를 처리합니다. 이 함수는 모든 폼 입력의 유효성을 검사하고, 오류가 없을 경우에만 콜백 함수를 호출합니다. 이 콜백 함수는 유효한 폼 데이터로 작업을 수행하는 데 사용됩니다.

interface Values { username: string; } function App() { const { register, handleSubmit } = useForm<Values>(); const onSubmit = (values: Values) => { somePostRequest(values); // values === { username: <inputValue> } }; return ( <form onSubmit={handleSubmit(onSubmit)}> <input {...register('username')} /> <button>제출</button> </form> ); }

errors

errors 상태는 폼 필드의 유효성 검사 중 발생하는 오류 메시지를 저장합니다. 폼 제출 시 또는 입력에 의해 필드의 유효 상태에 변경이 있을 때 errors 객체가 업데이트되고 리렌더링이 트리거됩니다.

const { errors } = useForm(); { errors.username && <p>{errors.username.message}</p>; }

watch

watch 함수는 지정한 하나 이상의 폼 필드 값의 변화를 관찰하고 싶을 때 사용합니다.

interface Values { username: string; password: number; } function App() { const { register, watch } = useForm<Values>(); // 타입이 string const usernameValue = watch('username'); // 타입이 { username: string, password: number } const usernameAndPassword = watch('username', 'password'); return ( <form> <input {...register('username')} /> <input {...register('password', { setValueAs: (value) => Number(value), })} /> </form> ); }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors