diff --git a/src/components/signup/BasicInfoForm.jsx b/src/components/signup/BasicInfoForm.jsx
index 53ad00f6..24e0a167 100644
--- a/src/components/signup/BasicInfoForm.jsx
+++ b/src/components/signup/BasicInfoForm.jsx
@@ -13,6 +13,7 @@ export default function BasicInfoForm({ onSubmit, formData, setters }) {
const [isNameValid, setIsNameValid] = useState(false);
const [isBirthValid, setIsBirthValid] = useState(false);
const [isAgree, setIsAgree] = useState(false);
+ const [idError, setIdError] = useState("");
const router = useRouter();
@@ -52,6 +53,9 @@ export default function BasicInfoForm({ onSubmit, formData, setters }) {
const inputClass = e.target.classList;
if (type === "userId") {
+ if (userId !== "") {
+ checkId();
+ }
if (!valid) {
inputClass.add(`${styles.invalid}`);
} else {
@@ -68,6 +72,24 @@ export default function BasicInfoForm({ onSubmit, formData, setters }) {
}
};
+ async function checkId() {
+ try {
+ const idRes = await fetch("/api/join/check-userid", {
+ method: "POST",
+ body: JSON.stringify({ userId: userId }),
+ });
+ const idData = await idRes.json();
+ if (idData.isDuplicate) {
+ setIsIdValid(false);
+ setIdError("이미 사용중인 아이디입니다.");
+ } else {
+ setIdError("");
+ }
+ } catch (error) {
+ console.error(error);
+ }
+ }
+
const todayYear = new Date().getFullYear();
const handleAgree = () => {
@@ -101,8 +123,10 @@ export default function BasicInfoForm({ onSubmit, formData, setters }) {
required
/>
- {!isIdValid &&
+ {!idError &&
+ !isIdValid &&
"아이디는 4~20자의 영문 소문자와 숫자로 입력해주세요."}
+ {idError && idError}
