SignUpPage.js 6.33 KB
Newer Older
우지원's avatar
우지원 committed
1
2
import React, { useState, useEffect } from 'react';
import { Button, Form, Container, Navbar, Alert } from 'react-bootstrap';
우지원's avatar
ul    
우지원 committed
3
import { Link } from 'react-router-dom';
우지원's avatar
우지원 committed
4
5
6
7
8
9
10

const INIT_USER = {
    username: '',
    nickname: '',
    email: '',
    password: '',
}
우지원's avatar
ul    
우지원 committed
11
12
13

function SingUp() {
    const [validated, setValidated] = useState(false);
우지원's avatar
우지원 committed
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    const [user, setUser] = useState(INIT_USER)
    const [error, setError] = useState('')
    const [disabled, setDisabled] = useState(true)

    useEffect(() => {
        const isUser = Object.values(user).every(el => Boolean(el))
        //Boolean : 참거짓 판별
        //every : every뒤에 함수값이 return하는 값이 모두 참일때만 true출력 -> element가 하나도 빈 문자열이 존재하지 않을때
        //empty string때만 false로 나옴.
        isUser ? setDisabled(false) : setDisabled(true)
    }, [user])

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

    async function handleSubmit(event) {
        event.preventDefault();
우지원's avatar
ul    
우지원 committed
34
35
36
37
38
39
40

        const form = event.currentTarget;
        if (form.checkValidity() === false) {
            event.preventDefault();
            event.stopPropagation();
        }
        setValidated(true);
우지원's avatar
우지원 committed
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
        console.log(user)

        try {
            setError('')
            const response = await fetch('/api/users/signup', {
                //post, get같은게 주어지지 않으면 기본적으로 fetch에 get요청함
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(user)
            })
            const data = await response.json()
            console.log(data)
            // setUser(INIT_USER)
        } catch (error) {
            console.log(error)
우지원's avatar
우지원 committed
58
            setError('오류가 발생했습니다!')
우지원's avatar
a    
우지원 committed
59
60
61
        }
    }

우지원's avatar
ul    
우지원 committed
62
    return (
63
        <>
우지원's avatar
병합    
우지원 committed
64
65
66
            <Navbar bg="dark" variant="dark">
                <Navbar.Brand>YDK Messenger</Navbar.Brand>
            </Navbar>
우지원's avatar
우지원 committed
67
                                                                                                                                                     
68
69
70
71
            <div>
                <Form noValidate validated={validated} onSubmit={handleSubmit}>
                    <Container className="d-flex justify-content-center">
                        <div className="mt-5 p-5 shadow w-75">
우지원's avatar
ul    
우지원 committed
72

73
74
75
76
77
78
79
                            <h2 className="text-center ">회원가입</h2>

                            <Form.Group controlId="formGroupUsername">
                                <Form.Label>이름</Form.Label>
                                <Form.Control
                                    required
                                    type="text"
우지원's avatar
우지원 committed
80
81
82
                                    name="username"
                                    onChange={handleChange}
                                    value={user.username}
83
84
85
                                    placeholder="이름을 입력해주세요" />
                                <Form.Control.Feedback type="invalid">
                                    필수 정보입니다! 이름을 입력해주세요!
우지원's avatar
ul    
우지원 committed
86
                            </Form.Control.Feedback>
87
                            </Form.Group>
우지원's avatar
ul    
우지원 committed
88

89
90
91
92
93
                            <Form.Group controlId="formGroupNickname">
                                <Form.Label>별명</Form.Label>
                                <Form.Control
                                    required
                                    type="text"
우지원's avatar
우지원 committed
94
95
96
                                    name="nickname"
                                    onChange={handleChange}
                                    value={user.nickname}
97
98
99
                                    placeholder="별명을 입력해주세요" />
                                <Form.Control.Feedback type="invalid">
                                    필수 정보입니다! 별명을 입력해주세요!
우지원's avatar
ul    
우지원 committed
100
                            </Form.Control.Feedback>
101
                            </Form.Group>
우지원's avatar
ul    
우지원 committed
102

103
104
105
106
                            <Form.Group controlId="formGroupEmail">
                                <Form.Label>이메일</Form.Label>
                                <Form.Control
                                    required
우지원's avatar
a    
우지원 committed
107
                                    type="email"
우지원's avatar
우지원 committed
108
109
110
                                    name="email"
                                    onChange={handleChange}
                                    value={user.email}
111
112
113
                                    placeholder="이메일을 입력해주세요" />
                                <Form.Control.Feedback type="invalid">
                                    필수 정보입니다! 이메일을 입력해주세요!
우지원's avatar
a    
우지원 committed
114
                            </Form.Control.Feedback>
115
                            </Form.Group>
우지원's avatar
ul    
우지원 committed
116

117
118
119
120
                            <Form.Group controlId="formGroupPassword">
                                <Form.Label>비밀번호</Form.Label>
                                <Form.Control
                                    required
우지원's avatar
a    
우지원 committed
121
                                    type="password"
우지원's avatar
우지원 committed
122
123
124
                                    name="password"
                                    onChange={handleChange}
                                    value={user.password}
125
126
127
                                    placeholder="비밀번호를 입력해주세요" />
                                <Form.Control.Feedback type="invalid">
                                    필수 정보입니다! 비밀번호를 입력해주세요!
우지원's avatar
ul    
우지원 committed
128
                            </Form.Control.Feedback>
129
                            </Form.Group>
우지원's avatar
ul    
우지원 committed
130

우지원's avatar
우지원 committed
131
132
133
134
135
136
137
138
139
140
141
142
                            {/* <Link to="./login"> */}
                                <Button 
                                disabled={disabled}
                                type='submit' 
                                variant="outline-success" 
                                size="lg" 
                                className="mr-4"
                                block>가입</Button>
                            {/* </Link> */}
                            {error && <Alert variant='danger'>
                                {error}
                            </Alert>}
143
144
145
146
147
                        </div>
                    </Container>
                </Form>
            </div >
        </>
우지원's avatar
ul    
우지원 committed
148
149
150
151
    )
}

export default SingUp