Signup.js 2.96 KB
Newer Older
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
1
import React, { useState, useEffect } from 'react'
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
2
import {  Col, Container, Form, Row, Button, Alert, Image } from "react-bootstrap"
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
3
4
5
import axios from "axios"
import catchErrors from '../utils/catchErrors'
import { Redirect } from 'react-router-dom'
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
6
7
import ohuh from '../ohuh-sm.PNG';
import { Link } from 'react-router-dom';
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
8
9
10
11
12

const INIT_USER = {
    name: '',
    email: '',
    password: ''
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
13
} // 초기유저에 이름, 이메일, 비밀번호를 빈배열로 지정한다.
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
14
15

function Signup() {
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
16
    const [user, setUser] = useState(INIT_USER) 
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
17
18
19
20
21
22
23
24
    const [disabled, setDisabled] = useState(true)
    const [error, setError] = useState('')
    const [success, setSuccess] = useState(false)

    useEffect(() => {
        const isUser = Object.values(user).every(el => Boolean(el))
        isUser ? setDisabled(false) : setDisabled(true)
    }, [user])
Lee SeoYeon's avatar
..    
Lee SeoYeon committed
25
    //바뀌는것이 있을때 이벤트가 발생하는 함수
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
26
27
28
29
30
31
    function handleChange(event) {
        const {name, value} = event.target
        setUser({...user, [name]: value})
    }

    async function handleSubmit(event) {
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
32
        event.preventDefault() //submit을 누르면 이벤트가 실행
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
33
        try {
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
34
            setError('') //post로 경로를 지정해서 서버에서 값을 받는다
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
35
36
            const response = await axios.post('/api/users/signup', user)
            console.log(response.data)
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
37
38
            console.log(user)
            setSuccess(true)
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
39
        } catch (error) {
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
40
            console.log(error)
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
41
42
43
            catchErrors(error, setError)
        }
    }
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
44
    //성공시 알림창이 뜨고 원래 페이지로 돌아간다
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
45
    if (success) {
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
46
        alert('회원가입 되었습니다.')
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
47
        return <Redirect to='/'/>
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
48
    } 
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
49
50
51
52

    return (
        <Container>
            <Row className= 'vh-100 flex-column align-items-center justify-content-center'>
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
53
54
                <Link to='/'><Image src={ohuh}/></Link>
                 <h2>회원가입</h2>
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
                <Col md={5}>
            {error && <Alert variant='danger'>
                {error}
            </Alert>}
                <Form onSubmit={handleSubmit}>
                    <Form.Group>
                        <Form.Label>이름</Form.Label>              
                        <Form.Control name='name' value={user.name} onChange={handleChange}/>
                    </Form.Group>
                    <Form.Group>
                        <Form.Label>이메일</Form.Label>
                        <Form.Control name='email' type='email'value={user.email} onChange={handleChange}/>
                    </Form.Group>
                    <Form.Group>
                        <Form.Label>비밀번호</Form.Label>
                        <Form.Control name='password' type='password' value={user.password} onChange={handleChange}/>
                    </Form.Group>
                    <Button disabled={disabled} type='submit' block>확인</Button>
                </Form>
                </Col>
            </Row>
        </Container>
    )
}

Lee SeoYeon's avatar
0113    
Lee SeoYeon committed
80
export default Signup