티스토리 뷰
이벤트 규칙
- 이벤트의 이름은 전부 카멜 표기법으로 표현됩니다. onkeyup -> onKeyUp
- 이벤트를 전달할 때는 {함수} 형태로 사용합니다
인풋값 핸들링 해보기
- 인풋의 값이 변화되는 이벤트 onChange 연결
- 이벤트 안 첫번째 매개변수에서 event객체 활용하기 (e.target.속성값)
- setter를 이용해서 state변경하기
const EventComponent = () => {
const [name, setName] = useState('');
let handleName = (e) => { //2.event객체 활용
setName(e.target.value); //3.state변경 (input의 value도 변경)
}
return (
<div>
<h3>리액트 이벤트 핸들링</h3>
<input type="text" name="name" onChange={handleName} value={name}/><br/> {/*1. 이벤트연결*/}
<h3>체인지된 결과: {name}</h3>
</div>
)
}
#리액트 이벤트 활용 수업 중 확인 해본 내용.
*EventComponent.js
import { useState } from "react";
const EventComponent = () => {
//name을 저장할 useState
const[name, setName] = useState('');
//이벤트 함수의 첫번째 매개변수에 이벤트에 대한 정보를 넣어준다.
const handleName = (e) => {
// console.log(e.target.value);
setName(e.target.value);//state체인지
}
const [topic, setTopic] = useState('');
const handleTopic = (e) => {
setTopic(e.target.value);
}
//클릭이벤트
const handleClick = () => {
alert(`${name}님의 주제는 ${topic}입니다`); //state값
setName('');//인풋데이터 초기화
setTopic('');//인풋데이터 초기화
}
//엔터키의 처리
const handlePress = (e) => {
// console.log(e); //enter를 눌렀을시 keyCode 확인.
if(e.keyCode === 13){
handleClick(); // 클릭이벤트 호출
}
}
return (
<>
<h3>리액트의 이벤트 핸들링 (인풋데이터)</h3>
{/* input 태그에 value를 넣는 이유는 클래스형 함수에서 이걸 안 넣어주면 텍스트 입력창에 값이 입력되는게 안보임. */}
<input type="text" name="name" onChange={handleName} value={name}/>
<div>체인지된결과: {name}</div>
<input type="text" name="topic" onChange={handleTopic} onKeyUp={handlePress} value={topic}/>
<div>체인지된결과: {topic}</div>
<button type="button" onClick={handleClick}>클릭미</button>
</>
)
}
export default EventComponent;
*실습
EventComponentQ.js
import { useState } from "react";
const EventComponentQ = () => {
const [food,setFood] = useState('메뉴를 선택하세요');
//셀렉트 태그에서는 option태그가 기본 value가 됩니다.
const foodSelect = (e) => {
// console.log(e.target.value);
setFood(e.target.value);
}
return (
<>
<hr/>
<h3>셀렉트 태그 핸들링(실습)</h3>
<p>셀렉트 태그가 체인지 될 때 선택한 결과를 아래에 출력</p>
<select onChange={foodSelect}>
<option>피자</option>
<option>치킨</option>
<option>햄버거</option>
<option>고기</option>
</select>
<h3>결과 : {food}</h3>
</>
)
}
export default EventComponentQ;
----------------------------------- 여기서부턴 useState를 객체로 해서 하나로 관리하는 내용 ---------------------------
useState를 하나로 관리하기(객체로 사용) 😊
const EventComponent2 = () => {
const [form, setForm] = useState({name: '', topic: ''}); //객체 state
let handleChange = (e) => {
const copy ={...form, [e.target.name]: e.target.value } //spread문법으로 복사 후 키 값 수정
setForm(copy); //state변경
}
let handleClick = () => {
alert(`결과: ${form.name} 님의 할일: ${form.topic}`)
setForm({name: '', topic: ''}) //state변경
}
return (
<div>
<h3>리액트 이벤트 핸들링(객체로 핸들링)</h3>
<input type="text" name="name" onChange={handleChange} value={form.name}/><br/>
<h3>체인지된 결과: </h3>
<input type="text" name="topic" onChange={handleChange} value={form.topic} /><br/>
<h3>체인지된 결과: </h3>
<button type="button" onClick={handleClick}>클릭미</button>
</div>
)
}
#수업시간 중 확인해본 내용.
*생소하고 헷갈렸던 부분.
//state를 객체로 관리
const [data, setData] = useState({name : '', topic : ''});
const handleChange = (e) => {
//객체안에서 key를 바꾸는 방법 ["키"] : 값
const copy = {...data, [e.target.name] : e.target.value }; //데이터복사 , 키값 변경
setData(copy); //state변경
console.log(copy);
}
state 값으로 지정해준 객체를 갖고와서 그 중에 특정한 키 값을 바꾸는 부분
//객체안에서 key를 바꾸는 방법 ["키"] : 값
const copy = {...data, [e.target.name] : e.target.value }; //데이터복사 , 키값 변경
setData(copy); //state변경
...data로 state 객체 값을 복사한 뒤에 , 찍고 뒤에서 data 객체안의 키 값을 변경해준다.
이 부분 유의해서 봐두도록 하자.
*태그의 name 속성에 state 의 키 값과 동일하게 값을 주어서 활용했던 점 잘 기억해두자.
*input 태그에 value를 넣는 이유는 클래스형 함수에서 이걸 안 넣어주면 텍스트 입력창에 값이 입력되는게 안보임
*EventComponent2.js
import { useState } from "react";
const EventComponent2 = () => {
//state를 객체로 관리
const [data, setData] = useState({name : '', topic : ''});
const handleChange = (e) => {
//객체안에서 key를 바꾸는 방법 ["키"] : 값
const copy = {...data, [e.target.name] : e.target.value }; //데이터복사 , 키값 변경
setData(copy); //state변경
console.log(copy);
}
const handleTopic = (e) => {
// console.log(e.target.name);
// const copy = {...data, ["topic"] : e.target.value}; //데이터복사
// setData(copy);
}
const handleClick = () => {
alert(`${data.name}님 할일: ${data.topic}`);
setData({name:'', topic:''}); //state초기화
}
return (
<>
<h3>리액트 이벤트 핸들링(객체로)</h3>
<input type="text" name="name" onChange={handleChange} value={data.name}/>
<h3>결과: {data.name}</h3>
<input type="text" name="topic" onChange={handleChange} value={data.topic}/>
<h3>결과: {data.topic}</h3>
<button type="button" onClick={handleClick}>클릭미</button>
</>
)
}
export default EventComponent2;
*EventComponentQ2.js (실습)
import { useState } from "react";
const EventComponentQ2 = () => {
const [data, setData] = useState({input:'',result:''});
const handleChange = (e) => {
// const copy = {...data , [e.target.name]:e.target.value}
// setData(copy);
setData({input: e.target.value , result: data.result});
//setState함수 특성상 내부적으로 비동기 방식으로 작동
// console.log(data); //이전값이 출력됩니다(정상)
}
const handleClick = (e) => {
// const copy = {...data, [e.target.name]: data.input, ["input"]:''}
// setData(copy);
setData({input: '', result: data.input})
}
return (
<>
<hr/>
<h3>인풋데이터 핸들링(실습)</h3>
<p>
클릭시 데이터는 공백으로 결과는 인풋이 입력한 값으로 처리<br/>
힌트는? 아마도 state는 두개가 필요할듯?
</p>
<input type="text" name="input" onChange={handleChange} value={data.input}/>
<button type="button" name="result" onClick={handleClick}>추가하기</button>
<h3>결과</h3>
<p>{data.result}</p>
</>
)
}
export default EventComponentQ2;
*책에서 이벤트 관련 내용
p.121
이벤트 핸들링
함수형이벤트 핸들링
'React.js' 카테고리의 다른 글
6. 리액트 기본훅 (0) | 2023.01.17 |
---|---|
5. 컴포넌트 반복 (0) | 2023.01.16 |
23-01-16 3. state (중요) ★★★ (0) | 2023.01.16 |
2. 리액트의 Components와 props (0) | 2023.01.13 |
23-01-13 리액트 시작 / 리액트란? , JSX의 문법 (0) | 2023.01.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 조건문
- nasted class
- 자바 api
- 박인욱 강사님
- 중앙정보처리학원
- input 스트림
- 자바#자바수강기록
- 알람 시계 문제
- 데이터베이스 수업
- 배열의 정렬
- 국비학원
- JS ES6 문법
- 강남 중앙정보처리학원
- 배열과 탐색
- 배열 삭제
- FOR문
- 국비지원 학원 수업 내용
- 자바
- 국비학원 수업
- api 활용
- 다중 반복문
- 내포 클래스
- output 스트림
- 자바수업
- 박문석 선생님
- 자바스크립트 ES6 문법
- interface #자바
- 가비지 콜렉팅
- 강남역 12번 춣구
- 오코노라멘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함