250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

[React] const { value, name } = e.target; 에서 value가 사용되지 않을 때 본문

[Snow-ball]front/REACT 리액트

[React] const { value, name } = e.target; 에서 value가 사용되지 않을 때

Snow-ball 2021. 4. 3. 18:01
반응형

VS코드에서 React 코드를 하다가보니 제대로 값이 전달되지 않았다. 무슨일인가 찾아봤더니 value 부분이 색깔이 짙어져있었다. 짙어져있다면 'value'가 선언은 되었지만 해당 값이 읽히지는 않는중이다.

 

여러가지 시도하다가 보니 해결한 방법은 [name]: value, 로 수정하는 것이 해결법이였다.

 

 

 

 

전체 코드

1
2
3
4
5
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
35
36
37
38
39
40
41
42
43
44
45
46
47
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
78
79
80
81
82
83
84
85
86
87
// import './src/uss/component/userDetail.css';
import React, { useState, useCallback } from 'react';
import axios from 'axios';
import { Link } from 'react-router-dom';
 
const UserDetail = () => {
    const [inputs, setInputs] = useState({
        username: ' ',
        password: ' ',
    });
 
    const { username, password } = inputs; // 비구조화 할당을 통해 값 추출
 
    const handleChange = useCallback(
        (e) => {
            const { value, name } = e.target; // 우선 e.target 에서 name 과 value 를 추출
            setInputs({
                ...inputs,         // 기존의 input 객체를 복사한 뒤
                [name]: value, // name 키를 가진 값을 value 로 설정
            });
        },
        [inputs]
    );
 
    const login = (e) => {
        e.preventDefault();
        console.log(setInputs);
        alert('do Login');
 
        axios
            .post(`http://localhost:8080/users/login`, {
                username,
                password,
            })
            .then((res) => {
                alert('로그인 되셨습니다');
                console.log(res);
                // alert('res = ' + JSON.stringify(res));
                // alert('res.data = ' + JSON.stringify(res.data));
                alert('res.data.data = ' + res.data.data);
                alert('JOSN.stringify(res.data.data) = ' + JSON.stringify(res.data.data));
 
                setInputs(res.data);
            })
            .catch(() => {
                alert('가입하지 않은 아이디이거나, 잘못된 비밀번호입니다.');
            });
    };
 
    return (
        <>
            <form onSubmit={(e) => e.preventDefault()}>
                <h2>로그인</h2>
 
                <div className="imgcontainer">
                    <img src="img_avatar2.png" alt="Avatar" className="avatar" />
                </div>
 
                <div className="container">
                    <label htmlFor="username">
                        <b>ID</b>
                    </label>
                    <input type="text" placeholder="Enter Username" name="username" value={inputs.username || ''} onChange={handleChange} required />
 
                    <label htmlFor="password">
                        <b>Password</b>
                    </label>
                    <input type="password" placeholder="Enter Password" name="password" value={inputs.password || ''} onChange={handleChange} required />
 
                    <button type="submit" onClick={login}>
                        로그인
                    </button>
 
                    <div className="container" />
                    <Link to="/">
                        <button type="submit" className="cancelbtn">
                            취소
                        </button>
                    </Link>
                </div>
            </form>
        </>
    );
};
 
export default UserDetail;
 
cs

 

 

 

 

 

 

 

베타존 : 네이버쇼핑 스마트스토어

나를 꾸미다 - 인테리어소품 베타존

smartstore.naver.com

 

반응형
Comments