티스토리 뷰
nextjs+typescript 기반 CMS 개발 프로젝트
[nextjs+ts]프로젝트 05.로그인 페이지 react-hook-form을 활용한 리펙토링
개발자 고포고 2022. 3. 13. 02:04반응형
[nextjs+ts]프로젝트 05.로그인 페이지 react-hook-form을 활용한 리펙토링
react-hook-dom을 활용하면 간편하게 form을 수정할 수 있다.
#react-hook-form 설치
//일반적인 버전 설치
$ npm i react-hook-form
//rc버전 설치
$ npm i react-hook-form --legacy-peer-deps
#Input Component 구현
-interface를 정의하여 property 넘기기
-UserFormRegisterReturn 파라미터로 활용하여 react-hook-form에 있는 정보를 넘겨 받기
import { UseFormRegisterReturn } from "react-hook-form";
interface InputProps{
label:string;
name:string;
type:string;
register:UseFormRegisterReturn;
required:boolean;
}
export default function Input({label,name,register,
type,
required
}:InputProps){
return( <div className="flex flex-col p-2 pt-0">
<span className="p-1 text-xs font-extrabold text-gray-500">
{label}
</span>
<input required={required} {...register} type={type} className=" peer h-8 border-2"></input>
<span className="hidden text-xs font-medium text-red-600 peer-invalid:block">
{name}
</span>
</div>);
}
#Login 페이지 구현
-EnterForm 인터페이스를 구현하여 Submit하면 넘겨받을 데이터 정의
-onValid를 통하여 Submit하면 받을 함수 정의
-useForm훅을 이용하여 react-hook-form의 다양한 기능 정의
interface EnterForm {
email?: string;
password?: string;
}
const onValid = (data: EnterForm) => {
console.log(data.email);
console.log(data.password);
};
const { register, handleSubmit, reset, watch } = useForm<EnterForm>();
console.log(watch());
return (
<div className="flex flex-col items-center rounded-3xl bg-white pb-10">
<div className=" p-10 text-2xl font-bold">
<span>@SamsungEngineering CMS</span>
</div>
<form onSubmit={handleSubmit(onValid)}>
<Input
register={register("email", {
required: true,
})}
name="아이디를 입력해주세요"
label="아이디"
type="text"
required
/>
<Input
register={register("password", {
required: true,
})}
name="패스워드를 입력해주세요"
label="패스워드"
type="password"
required
/>
<div className="mt-5 flex items-center justify-center ">
<input
className=" h-10 w-64 rounded-sm bg-gray-300 text-sm font-medium text-white hover:bg-red-200 "
type="submit"
value="로그인"
/>
</div>
</form>
<div className="mt-8 flex flex-col items-center justify-center">
<span className="text-sm">
문의가 있는 경우, 아래의 이메일로 연락부탁드립니다.
</span>
<span className="text-sm">test@gmail.com</span>
</div>
</div>
);
};
export default Test;
#react #nextjs #react-hook-form #리액트 #로그인 #login #form
반응형
'nextjs+typescript 기반 CMS 개발 프로젝트' 카테고리의 다른 글
[nextjs/ts/react] 로그인 페이지 [완성] -기본 구성 설명- (0) | 2022.03.14 |
---|---|
[nextjs+ts]프로젝트 06. api request middleware 만들기(nextjs) (0) | 2022.03.13 |
[prisma+nextjs] api 서비스 개발하기 (0) | 2022.03.12 |
[prisma+PlanetScale]스크립트 작성하여 DB(PlanetScale)에 동기화하기 (0) | 2022.03.12 |
[prisma+PlanetScale]database connect 데이터베이스 구성 및 접속하기 (2) | 2022.03.12 |
댓글
반응형