Open choigirang opened 7 months ago
컴포넌트 분리
<>
<SignHeader />
<SignProgress />
<Bottom onSubmit={agreementCheck} method="post" encType="multipart/form-data">
<InputContainer>
<div className="title">기본 정보 입력</div>
<InputBox>
{/* 이미지 */}
<ImageSelect selectedImage={selectedImage} setSelectedImage={setSelectedImage} />
{/* 아이디 */}
<Id id={id} setId={setId} validationItems={validationItems} />
{/* 비밀번호 */}
<Password
checkPass={checkPass}
setCheckPass={setCheckPass}
validatePass={validatePass}
setValidatePass={setValidatePass}
validationItems={validationItems}
/>
{/* 닉네임 */}
<NickName nickName={nickname} setNickName={setNickName} />
{/* 이메일 */}
<Email userMail={userMail} setUserMail={setUserMail} inputAble={inputAble} setInputAble={setInputAble} />
{/* 보안 코드 */}
<SecurityCode
security={security}
setSecurity={setSecurity}
checkSecurity={checkSecurity}
setCheckSecurity={setCheckSecurity}
checkMailOpt={checkMailOpt}
userMail={userMail}
/>
</InputBox>
</InputContainer>
<NextPage>
<button className="btn" type="submit">
다음
</button>
</NextPage>
</Bottom>
</>
ex ) about ID
export default function Id({ id, setId, validationItems }: IdProps) {
const [checkId, setCheckId] = useState<IdValidate>({
length: false,
word: false,
});
// 아이디 유효성 확인
const checkIdHandler = (event: React.ChangeEvent<HTMLInputElement>) => {
const value = event.target.value;
// 아이디 길이 확인
const valueLength = value.length >= 2 && value.length <= 20;
// 아이디 특수문자 확인
function checkChar(value: string) {
return validationItems.every(item => item.name !== '특수문자' || !item.check(value));
}
if (checkChar(value) && valueLength) {
setId(prev => ({
...prev,
userId: value,
}));
} else {
setId(prev => ({ ...prev, required: false }));
}
};
return (
<IdContainer>
<Label htmlFor="id">아이디</Label>
<InputBox validate={checkId}>
<input
id="id"
name="userId"
type="text"
placeholder="특수문자를 제외한 2글자 이상 20글자 이하의 문자"
onChange={checkIdHandler}
required
/>
<button>중복검사</button>
</InputBox>
</IdContainer>
);
}
코드가 너무 무거우니 컴포넌트 분리