1. 이벤트 처리하기
DOM의 이벤트
- 클릭 이벤트를 처리할 함수를 onclick을 통해 전달
- 이벤트를 처리할 함수를 문자열로 전달
<button onclick="activate()">
Activate
</button>
리액트에서의 이벤트
- onClick으로 카멜 표기법 적용
- 이벤트를 처리할함수를 함수 그대로 전달
<button onClick={activate}>
Activate
</button>
이벤트 핸들러 추가
- 이벤트 핸들러 = 어떤 이벤트가 발생했을 때 해당 이벤트를 처리하는 함수
1) 클래스 컴포넌트
- handleClick() 함수를 constructor()에서 bind()를 이용하여 this.handleClick에 대입
- bind를 하는 이유는 자바스크립트에서는 기본적으로 클래스 함수들이 바운드(Bound)되지 않음
- bind를 하지 않으면 this.handleClick은 글로벌 스코프(global scope)에서 호출되는데 글로벌 스코프에서 this.handleClick은 undefined이므로 사용할 수가 없음
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {isToggleOn:true};
//callback에서 `this`를 사용하기 위해서는 바인딩을 필수적으로 해줘야 함
this.handleClick= this.handleClick.bind(this);
}
handleClick() {
this.setState(prevState => ({
isToggleOn:!prevState.isToggleOn
}));
}
render() {
return (
<button onClick={this.handleClick}>
{this.state.isToggleOn?'켜짐':'꺼짐'}
</button>
)
}
}
클래스 필드 문법 사용
class MyButton extends React.Component {
handleClick = () => {
console.log('this is:', this);
}
render() {
return (
<button onClick={this.handleClick}>
클릭
</button>
);
}
}
이벤트 핸들러를 넣는 곳에 arrow function 사용
class MyButton extends React.Component {
handleClick() {
console.log('this is:', this);
}
render() {
return (
<button onClick={()=>this.handleClick()}>
클릭
</button>
);
}
}
2) 함수 컴포넌트
- 함수 안에 다른 함수로 정의하는 방법과 arrow function을 사용하여 정의하는 방법 존재
function Toggle(props) {
const [isToggleOn, setIsToggleOn] = useState(true);
//방법 1. 함수 안에 함수로 정의
function handleClick() {
setIsToggleOn((isToggleOn)=>!isToggleOn);
}
//방법 2. arrow function을 사용하여 정의
const handleClick = () => {
setIsToggleOn((isToggleOn)=>!isToggle);
}
return (
<button onClick={handleClick}>
{isToggleOn? "켜짐" : "꺼짐"}
</button>
);
}
2. Arugments 전달하기
1) 클래스 컴포넌트
arrow function 사용
- 명시적으로 event를 두 번째 매개변수로 넣음
- event = 리액트의 이벤트 객체
<button onClick={(event) => this.deleteItem(id,event)}>삭제하기</button>
Function.prototype.bind 사용
- event가 자동으로 id 이후의 두 번째 매개변수로 전달됨
<button onClick={this.deleteItem.bind(this,id)}>삭제하기 </button>
2) 함수 컴포넌트
function MyButton(props) {
const handleDelete(id,event) => {
console.log(id, event.target);
};
return (
<button onClick={(event) => handleDelete(1,event)}>삭제하기</button>
);
}
3. 실습 - 클릭 이벤트 처리하기
- 확인 버튼 컴포넌트를 만들고 클릭 이벤트에 이벤트 핸들러를 연동
ConfirmButton.jsx
import React, { useState } from "react";
function ConfirmButton(props) {
const [isConfirmed, setIsConfirmed] = useState(false);
const handleConfirm = () => {
setIsConfirmed((prevIsConfirmed)=> !prevIsConfirmed);
};
return (
<button onClick={handleConfirm} disabled={isConfirmed}>
{isConfirmed ? "확인됨" : "확인하기"}
</button>
);
}
export default ConfirmButton;
'react' 카테고리의 다른 글
[소플] ch 10. 리스트와 키 (0) | 2023.10.28 |
---|---|
[소플] ch 9. 조건부 렌더링 (1) | 2023.10.28 |
[소플] ch 7. 훅 (0) | 2023.10.27 |
[소플] ch 6. state와 생명 주기 (0) | 2023.10.27 |
[소플] ch 5. 컴포넌트와 Props (0) | 2023.10.27 |