input 값 다룰 때 useState( )로 일일이 관리하면 코드 복잡 → react hook form 입력값 등록(register)하면 자동화
register( )로 input 등록 시 useState( ) 생성 필요 없음
handleSubmit( )가 폼 제출 시 호출되어 모든 입력값을 한 번에 데이터로 받음
<aside> ✏️
데이터베이스에서 응답이 올 때까지 이 login 함수가 기다리도록 하기 위함
import { Link, useLocation, useNavigate } from "react-router-dom";
import Login from "./Login";
import { useForm } from "react-hook-form";
import axios from "axios";
.
.
.
function Signup() {
const location = useLocation();
const form = location.state?.from?.pathname || "/";
const navigate = useNavigate();
const {
register,
handleSubmit,
formState: { errors },
} = useForm();
const onSubmit = async (data) => {
const userInfo = {
// Hook Form에서 받은 폼 값 - data
fullname: data.fullname,
email: data.email,
password: data.password,
};
// 서버로 JSON 객체 전송
await axios
.post("<http://localhost:4001/users/signup>", userInfo)
.then((res) => {
console.log(res.data);
if (res.data) {
toast.success("Signup Successfully");
navigate(form, { replace: true });
}
/* localStorage에 유저 정보 저장 - 페이지 이동해도 로그인 유지 위함
localStorage는 문자열만 저장 가능. 객체 형태를 문자(JSON 형태)로 변환 */
localStorage.setIsetItem("Users", JSON.stringify(res.data.user));
})
.catch((err) => {
if (err.response) {
console.log(err);
toast.error("Error: " + err.response.data.message);
}
});
};
.
.
.
✔️ 이 데이터는 이후 Axios로 Node.js (Express) 백엔드에 전송됨
const userInfo = {
fullName: data.fullName,
email: data.email,
password: data.password,
};