본문 바로가기
웹/React

[React] 회원가입 페이지 만들기

by ohojee 2023. 8. 14.
// RegisterPage.js

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();
	let navigate = useNavigate();

	const [Email, setEmail] = useState("") //서버에 보내고자하는 값들을 state에서 받음
	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 onSubmitHadler = (event) => {
		event.preventDefault(); //없으면 매번 페이지가 리프레쉬됨

		console.log('Email', Email)
		console.log('Password', Password)

		if (Password !== ConfirmPassword) {
			return alert('비밀번호와 비밀번호 확인은 같아야 합니다.')
		}

		let body = {
			email: Email,
			name: Name,
			password: Password
		}

		dispatch(registerUser(body))
			.then(response => {
				if(response.payload.success) {
					console.log('email', Email)
					console.log('password', Password)
					console.log('name', Name)
					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={onSubmitHadler}
      >
        <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
// _actions/user_action.js

export function registerUser(dataTosubmit) {

	const request = axios.post('/api/user/register', dataTosubmit) //서버로 내용 보내기
	.then(response => response.data ) //서버에서 받은 데이터를 리퀘스트에 저장
	return {
		type: REGISTER_USER, 
		payload: request
	}
}
// _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 }
		default:
			return state;
			
	}
}

로그인 페이지랑 비슷하게 작성하면 됨

' > React' 카테고리의 다른 글

[React] 인증 체크  (0) 2023.08.16
[React] 로그아웃 기능  (0) 2023.08.15
[React] 로그인 페이지 만들기  (0) 2023.08.13
[React] react hooks  (0) 2023.08.12
[React] redux  (0) 2023.08.11

댓글