728x90
출처 : 인프런_따라하며 배우는 노드, 리액트 시리즈 — 기본 강의
Step 1) 회원가입 페이지 구현
client/src/components/views/RegisterPage/RegisterPage.js
import React, { useState } from 'react'
import {useDispatch} from 'react-redux';
import {loginUser} from '../../../_actions/user_action'
import {registerUser} from '../../../_actions/user_action'
import { withRouter} from 'react-router-dom'
function RegisterPage(props) {
const dispatch = useDispatch();
const [Email, setEmail] = React.useState(" ")
const [Password, setPassword] = React.useState(" ")
const [Name, setName] = React.useState(" ")
const [ConfirmPassword, setConfirmPassword] = React.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(); //리프레시 방지-> 방지해야 이 아래 라인의 코드들 실행 가능
// console.log('Email', Email);
// console.log('Password', Password);
//비밀번호와 비밀번호 확인 같을띠 회원가입 되게 함
if(Password !== ConfirmPassword){
return alert('비밀번호와 비밀번호 확인은 같아야 합니다.')
} //여기서 걸리면 아래로 못감
let body={
email: Email,
password: Password,
name: Name
}
//디스패치로 액션 취하기
dispatch(registerUser(body))
.then(response => {
if(response.payload.success) {
props.history.push('/login')
} else {
alert('Failed to sign 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>
회원 가입
</button>
</form>
</div>
)
}
//export default RegisterPage
export default withRouter(RegisterPage)
Step 2) Action 기능 구현
import Axios from 'axios';
import {
LOGIN_USER, REGISTER_USER
} from './types';
export function loginUser(dataTosubmit) {
const request = Axios.post('/api/users/login', dataTosubmit) //서버에 리퀘스트 날리고
.then(response => response.data) //받은 데이터를 request에 저장
return { //Action 했으니까 이제 Reducer로 보냄
type: LOGIN_USER,
payload: request
}
}
export function registerUser(dataTosubmit) {
const request = Axios.post('/api/users/register', dataTosubmit) //서버에 리퀘스트 날리고
.then(response => response.data) //받은 데이터를 request에 저장
return { //Action 했으니까 이제 Reducer로 보냄
type: REGISTER_USER,
payload: request
}
}
Step 3) type 지정
//action의 타입들만 관리하는 파일
export const LOGIN_USER = "login_user";
export const REGISTER_USER = "register_user";
Step 4) Reducer 작성
user_reducer.js
import { LOGIN_USER, REGISTER_USER } from '../_actions/types';
export default function(state={}, action){ //state 는 이전 상태
switch(action.type){ //Action에는 여러 타입 존재함. 이 타입에 따라 다르게 반응하도록 작성
case LOGIN_USER:
return {...state, loginSuccess: action.payload} //... : spread operator은 파라미터 state를 그대로 가져온 것으로 빈 상태를 의미
break;
case REGISTER_USER:
return { ... state, register: action.payload}
break;
default:
return state;
}
}
구현이 완료됐으니 회원가입을 해보자. 성공한 것을 볼 수 있다.
728x90
'Node & React > Basic Study' 카테고리의 다른 글
[MAC] Node/React 기초 - 회원 인증 확인하기 (0) | 2021.01.20 |
---|---|
[MAC] Node/React 기초 - 로그아웃 페이지 만들기 (0) | 2021.01.20 |
[MAC] Node/React 기초 - 로그인 페이지 만들기 (0) | 2021.01.19 |
[MAC] Node/React 기초 - Redux란?, Redux 설치 (0) | 2021.01.18 |
[MAC] Node/React 기초 - Concurrently (프론트, 백 서버 한번에 켜기) (0) | 2021.01.18 |