[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
반응형