๐ ์ด๋ฒคํธ ( Event )
- ํน์ ์ฌ๊ฑด์ ์๋ฏธํ๋ค. ( ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ ๊ฒ๋ ํ๋์ ์ด๋ฒคํธ )
DOM์ Event
<button onclick="activate()">
Activate
</button>
DOM์์๋ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ํจ์๋ฅผ onClick์ ํตํด ์ ๋ฌํ๋ค.
๋ฆฌ์กํธ์ Event
<button onClick={activate}>
Activate
</button>
๋์ผํ ๊ธฐ๋ฅ์ธ ๋ฆฌ์กํธ ์ฝ๋์ด๋ค.
๋จผ์ onClick์์ ์นด๋ฉํ๊ธฐ๋ฒ์ผ๋ก ์ฐ์ฌ ์๋ค.
DOM์์๋ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ ํจ์๋ฅผ ๋ฌธ์์ด๋ก ์ ๋ฌํ์ง๋ง, ๋ฆฌ์กํธ๋ ํจ์ ๊ทธ๋๋ก ์ ๋ฌํ๋ค.
๋ ์ฌ์ด์๋ ์ด๋ฒคํธ ์ด๋ฆ์ ํ๊ธฐ๋ฒ๊ณผ ํจ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ค.
๐ค Event Handler
์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํด๋น ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์๊ฐ ์๋ค.
์ด๊ฒ์ Event Handler ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด๊ฒ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๊ณ์ ๋ฃ๊ณ ์๋ค๋ ์๋ฏธ๋ก Event Listener ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
โ Arguments ์ ๋ฌํ๊ธฐ
Argument | ํจ์์ ์ฃผ์ฅํ ๋ด์ฉ ํจ์์ ์ ๋ฌํ ๋ฐ์ดํฐ |
๐ฑ๐ป ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌํ๊ธฐ
create react app์ผ๋ก ๋ง๋ ํ๋ก์ ํธ๋ฅผ ์ฐ๋ค.
ConfirmButton.jsx
//ComfirmButton ์ด๋ฆ์ ํด๋์ค ์ปดํฌ๋ํธ ์์ฑ.
import React from "react";
//ํ์ธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด,
class ConfirmButton extends React.Component{
constructor(props){
super(props);
//state์ isConfirmed ๋ณ์๋ฅผ ๊ฐ๊ณ ์๋ค.
this.state = {
isConfirmed: false, //์ด๊ธฐ๊ฐ์ false.
};
this.handleConfirm = this.handleConfirm.bind(this);
}
//๋ฒํผ์ onClick ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด,
//์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก handleConfirm ํจ์ ์์ฑ.
handleConfirm(){
this.setState((prevState) => ({
isConfirmed: !prevState.isConfirmed,
}));
}
render(){
return(
<button
onClick={this.handleConfirm}
disabled={this.state.isConfirmed}
>
{this.state.isConfirmed ? "ํ์ธ๋จ" : "ํ์ธํ๊ธฐ"}
</button>
);
}
}
export default ConfirmButton;
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
ConfirmButton ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ๋ ๋๋งํ๊ธฐ ์ํด index.js๋ฅผ ์์ ํ๋ค.
npm start๋ฅผ ์ ๋ ฅํ๋ฉด...
ํ์ธ๋ฒํผ์ ๋๋ฅด๋ฉด, ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก ์ ๋ฌ๋๊ณ isConfirmed ๊ฐ์ด true๋ก ๋ฐ๋๋ฉด์ ์์ ๊ฐ์ด ํ์ธ๋จ ( ๋ฒํผ ๋นํ์ฑํ ) ์ผ๋ก ๋ฐ๋๋ค.
๐ฑ๐ป Class fields syntax ์ฌ์ฉํ๊ธฐ
์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ Class fiedls syntax๋ก ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝํ๊ฒ ๋ค.
//ComfirmButton ์ด๋ฆ์ ํด๋์ค ์ปดํฌ๋ํธ ์์ฑ.
import React from "react";
//ํ์ธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด,
class ConfirmButton extends React.Component{
constructor(props){
super(props);
//state์ isConfirmed ๋ณ์๋ฅผ ๊ฐ๊ณ ์๋ค.
this.state = {
isConfirmed: false, //์ด๊ธฐ๊ฐ์ false.
};
//1.bind ์ฝ๋ ์ ๊ฑฐ.
//this.handleConfirm = this.handleConfirm.bind(this);
}
//2.Arrow function์ผ๋ก ๋ณ๊ฒฝ.
//๋ฒํผ์ onClick ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด,
//์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก handleConfirm ํจ์ ์์ฑ.
handleConfirm = () => {
this.setState((prevState) => ({
isConfirmed: !prevState.isConfirmed,
}));
}
render(){
return(
<button
onClick={this.handleConfirm}
disabled={this.state.isConfirmed}
>
{this.state.isConfirmed ? "ํ์ธ๋จ" : "ํ์ธํ๊ธฐ"}
</button>
);
}
}
export default ConfirmButton;
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
๋จผ์ bind ์ฝ๋๋ฅผ ์ญ์ ํ๊ณ , handleConfirm ํจ์๋ฅผ Arrow finction์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
๐ฑ๐ป ํจ์ ์ปดํฌ๋ํธ๋ก ๋ฐ๊พธ๊ธฐ
ConfirmButton ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ํจ์ ์ปดํฌ๋ํธ๋ก ๋ฐ๊ฟ๋ณด๊ฒ ๋ค.
ํด๋์ค ์ปดํฌ๋ํธ๋ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์์, ํจ์ ์ปดํฌ๋ํธ์ ํํ๋ฅผ ์ ๊ธฐ์ตํด์ผ ํ๋ค.
//ComfirmButton ์ด๋ฆ์ ํด๋์ค ์ปดํฌ๋ํธ ์์ฑ.
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;
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ