로그인 페이지에서 거의 다 해둔 내용을 회원가입 페이지에서는 조금만 바꾸어 사용하면 되기 때문에 뚝딱뚝딱 했다!
import React, { useState } from "react";
import { useDispatch } from "react-redux";
import { registerUser } from "../../../_actions/user_action";
import { useNavigate } from "react-router-dom";
function RegisterPage(props) {
const dispatch = useDispatch();
const navigate = useNavigate();
const [Email, setEmail] = useState("");
const [Password, setPassword] = useState("");
const [Name, setName] = useState("");
const [ConfirmPassword, setConfirmPassword] = useState("");
const onEmailHandler = (event) => {
setEmail(event.currentTarget.value);
};
const onNameHandler = (event) => {
setName(event.currentTarget.value);
};
const onPasswordHandler = (event) => {
setPassword(event.currentTarget.value);
};
const onConfirmPasswordHandler = (event) => {
setConfirmPassword(event.currentTarget.value);
};
const onSubmitHandler = (event) => {
event.preventDefault();
if (Password !== ConfirmPassword) {
return alert("비밀번호와 비밀번호 확인이 다릅니다.");
}
let body = {
email: Email,
name: Name,
password: Password,
};
dispatch(registerUser(body)).then((response) => {
if (response.payload.success) {
navigate("/login");
} else {
alert("Failed to sign up");
}
});
};
return (
<div
style={{ display: "flex", justifyContent: "center", alignItems: "center", width: "100%", height: "100vh" }}
onSubmit={onSubmitHandler}
>
<form style={{ display: "flex", flexDirection: "column" }}>
<label>Email</label>
<input type="email" value={Email} onChange={onEmailHandler} />
<label>Name</label>
<input type="text" value={Name} onChange={onNameHandler} />
<label>Password</label>
<input type="password" value={Password} onChange={onPasswordHandler} />
<label>Confirm Password</label>
<input type="password" value={ConfirmPassword} onChange={onConfirmPasswordHandler} />
<br />
<button>회원가입</button>
</form>
</div>
);
}
export default RegisterPage;
export const REGISTER_USER = "register_user";
type에 REGISTER_USER를 정의해준다.
import { LOGIN_USER, REGISTER_USER } from "./types";
export function registerUser(dataToSubmit) {
const request = axios.post("/api/users/register", dataToSubmit).then((response) => response.data);
return {
type: REGISTER_USER,
payload: request,
};
}
기존의 login과 관련된 action 이후에 register과 관련된 action을 추가해준다. 로그인과 거의 동일하다.
registerUser function 생성
axios를 통해 request 진행
서버에서 받은 data를 request 변수에 저장
return을 시켜 reducer로 보냄
import { LOGIN_USER, REGISTER_USER } from "../_actions/types";
const userReducer = (state = {}, action) => {
switch (action.type) {
case REGISTER_USER:
return { ...state, register: action.payload };
default:
return state;
}
};
export default userReducer;
MongoDB에 잘 회원가입이 되었는지 확인해보면 잘 추가되어있다!
따라하며 배우는 노드, 리액트 시리즈 - 기본 강의 를 공부하며 작성한 글입니다.