Signup.js 2.54 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
3
4
5
import {  Col, Container, Form, Row, Button, Alert } from "react-bootstrap"
import axios from "axios"
import catchErrors from '../utils/catchErrors'
import { Redirect } from 'react-router-dom'
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
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
32
33
34

const INIT_USER = {
    name: '',
    email: '',
    password: ''
}

function Signup() {
    const [user, setUser] = useState(INIT_USER)
    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])

    function handleChange(event) {
        const {name, value} = event.target
        setUser({...user, [name]: value})
    }

    async function handleSubmit(event) {
        event.preventDefault()
        try {
            setError('')
            const response = await axios.post('/api/users/signup', user)
            console.log(response.data)
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
35
36
37
            console.log(user)
            // setUser(INIT_USER)
            setSuccess(true)
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
38
        } catch (error) {
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
39
            console.log(error)
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
40
41
42
43
44
            catchErrors(error, setError)
        }
    }

    if (success) {
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
45
        alert('회원가입 되었습니다.')
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
46
        return <Redirect to='/'/>
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
47
    } 
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

    return (
        <Container>
            <Row className= 'vh-100 flex-column align-items-center justify-content-center'>
            <h2>회원가입</h2>
                <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
78
export default Signup