티스토리 뷰
728x90
반응형
저번 시간에는 로그인 페이지를 만들었었다.
이번에는 마지막으로 회원가입 페이지를 만드는 시간을 가지려 한다.
1. LoginPage.js를 가져와 추가하기
// client > src > components > views > RegisterPage > RegisterPage.js
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
import { registerUser } from '../../../_actions/user_action';
function RegisterPage(props) {
const [Email, setEmail] = useState("");
const [Password, setPassword] = useState("");
const [Name, setName] = useState("");
const [ConfirmPassword, setConfirmPassword] = useState("");
const dispatch = useDispatch();
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) {
props.history.push("/login")
} else {
alert("Failed to Sing Up")
}
})
}
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center', width: '100%', height: '100vh'
}}>
<form style={{display: 'flex', flexDirection: 'column'}}
onSubmit={onSubmitHandler}
>
<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 type="submit">SignUp</button>
</form>
</div>
)
}
export default RegisterPage
로그인에서 진행하던 것을 가져와 Name, ConfirmPassword값을 추가해주었다.
2. user_action 추가하기
// client > src > _actions > user_action.js
import axios from 'axios';
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
}
}
3. types 추가하기
// client > src > _actions > types.js
// 일부 생략
export const REGISTER_USER = "register_user";
로그인과 동일하게 타입을 정리해준다.
4. user_reducer 추가하기
// client > src > _reducers > user_reducer.js
import {
LOGIN_USER,
REGISTER_USER
} from '../_actions/types';
export default function (state = {}, action) {
switch (action.type){
// 일부 생략
case REGISTER_USER:
return { ...state, register: action.payload }
break;
default:
return state;
}
}
상단에 있는 비어있는 값( state = {} )을 가져( ...state )와 작업을 해주면 된다.
728x90
반응형
'Front-End > React' 카테고리의 다른 글
React-Youtube : ffmpeg로 비디오 썸네일 생성하기 (0) | 2021.04.09 |
---|---|
React-Youtube : 비디오를 저장하는 함수 만들기 (0) | 2021.04.07 |
boiler-plate : redux로 로그인 화면 구현하기 (0) | 2021.04.03 |
boiler-plate : React hook (0) | 2021.04.02 |
boiler-plate : 리덕스를 설정하자 (0) | 2021.04.01 |
댓글
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Git
- 자바
- 뷰
- 리액트 유튜브
- github
- 리액트
- Coding Test
- 코딩테스트
- CSS
- 재공부
- 리액트 썸네일
- Switch
- Visual Studio Code
- node.js
- 파이썬
- 노드
- javascript
- 배열
- mongodb
- 함수
- node
- react
- redux
- 자바스크립트
- node-sass
- java
- programmers
- array
- 프로그래머스
- 리덕스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함