Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- frontend
- max-width
- 코딩테스트
- git
- node
- react-router-dom
- 자바
- java
- coding
- 변수
- media query
- redux
- cleancode
- 그럼에도 불구하고
- webpack
- 코드업
- github
- HTML
- react
- TypeScript
- JS
- 자바문제풀이
- Servlet
- JavaScript
- 프론트엔드
- 반응형 페이지
- 그럼에도불구하고
- CSS
- node.js
- @media
Archives
- Today
- Total
그럼에도 불구하고
[React] input 개수에 따른 useState 활용법 본문
오늘은 input 개수에 따른 useState 활용법에 대해 알아보겠습니다.
아래에는 다음과 같은 코드가 있습니다. 이 코드는 input에 사용자명과 메시지를 입력할 수 있는 text란이 2개 있고 확인 버튼을 누르면 alert 메서드로 내가 입력한 사용자명과 메시지를 알려줍니다.
📌 App.js
1 2 3 4 5 6 7 8 9 10 11 12 13 | import './App.css'; import EventPractice2 from './EventPractice2'; function App() { return ( <> <EventPractice2 /> </> ); } export default App; | cs |
📌 EventPractice2.js
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 | import React, {useState} from 'react'; const EventPractice2 = () => { const [username, setUsername] = useState(''); const [message, setMessage] = useState(''); const onChangeUsername = e => setUsername(e.target.value); const onChangeMessage = e => setMessage(e.target.value); const onClick = () => { alert(username + " : " + message ); setUsername(''); setMessage(''); }; const onKeyUp = e => { if(e.key === 'Enter') onClick(); } return ( <div> <h1> 이벤트 연습 </h1> <input type='text' name='username' placeholder='사용자명' value={username} onChange={onChangeUsername} /> <input type='text' name='message' placeholder='아무거나 입력해보세요' value={message} onChange={onChangeMessage} onKeyUp={onKeyUp} /> <button onClick={onClick}>확인</button> </div> ); }; export default EventPractice2; | cs |
EventPractice2에는 인풋이 두 개 밖에 없기 때문에 이런 코드도 나쁘지는 않습니다. 하지만 인풋의 개수가 많아질 것 같으면 e. target.name을 활용하는 것이 더 좋을 수 있습니다.
예를 들어
1 2 3 | const changeHandler = e => { [e.target.name] : e.target.value }; | cs |
위와 같이 객체 안에서 key를 [ ]로 감싸면 그 안에 넣은 레퍼런스가 가리키는 실제 값이 key 값으로 사용됩니다.
즉, 아래의 코드에 다음과 같은 객체를 만들면
1 2 3 4 5 6 7 | const name = 'varientKey'; const object = { [name] : 'value' }; | cs |
결과는 다음과 같습니다.
1 2 3 | { 'variantKey' : 'value' } | cs |
이 방식을 적용하여 useState를 통해 사용하는 상태에 문자열이 아닌 객체를 넣어 보겠습니다.
📌 EventPractice2.js
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 | import React, {useState} from 'react'; const EventPractice2 = () => { const [form, setForm] = useState({ username: '', message: '' }); const {username, message} = form; const onChange = e => { const nextForm = { ...form, [e.target.name] : e.target.value }; setForm(nextForm); } // const [username, setUsername] = useState(''); // const [message, setMessage] = useState(''); // const onChangeUsername = e => setUsername(e.target.value); // const onChangeMessage = e => setMessage(e.target.value); const onKeyUp = e => { if(e.key === 'Enter') onClick(); } const onClick = () => { alert(username + " : " + message ); setForm({ username: '', message: '' }) }; return ( <div> <h1> 이벤트 연습 </h1> <input type='text' name='username' placeholder='사용자명' value={username} onChange={onChange} /> <input type='text' name='message' placeholder='아무거나 입력해보세요' value={message} onChange={onChange} onKeyUp={onKeyUp} /> <button onClick={onClick}>확인</button> </div> ); }; export default EventPractice2; | cs |
다음과 같이 코드를 저장해도 기능이 잘 작동하는 것을 확인할 수 있습니다.
e.target.name 값을 활용하려면, 위와 같이 useState를 쓸 때 인풋 값들이 들어 있는 form 객체를 사용해 주면 됩니다.
'React > React basics' 카테고리의 다른 글
[React] SWAPI 이용하기 (0) | 2023.05.31 |
---|---|
[React] Single Page Application란? (0) | 2023.05.25 |
[React] propTypes를 통한 props 검증 (0) | 2023.05.22 |
[React] react-router-dom v6에 대해 알아보자 (0) | 2023.05.05 |
[React] immer란? (0) | 2023.05.05 |
Comments