๐Ÿ“–[React]Handling Events

ํ˜ฑยท2022๋…„ 7์›” 11์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
11/28

๐Ÿ’— Event?

โœ ํŠน์ • ์‚ฌ๊ฑด์„ ์˜๋ฏธ

ex) ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ ํด๋ฆญ = ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ

โœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ = ์ด๋ฒคํŠธ๋ฅผ ํ•ธ๋“ค๋งํ•œ๋‹ค

DOM EVENT

<button onclick = "activate()">
  Activate
</button>

DOM์—์„œ๋Š” ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ DOM CLICK์„ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌ

React Event

<button onClick={activate}>
  Activate
</button>

onClick(์นด๋ฉœ ์ผ€์ด์Šค)์œผ๋กœ ๋‚˜ํƒ€๋‚˜๊ณ , ํ•จ์ˆ˜ ๊ทธ๋Œ€๋กœ ์ฒ˜๋ฆฌ

๐Ÿ’— Event Handler

๐Ÿ”ธ Class Component์—์„œ Event ์ฒ˜๋ฆฌ

1. Bind ์‚ฌ์šฉ ๋ฐฉ์‹

class Toggle extends React.Component {
  constructor(props){
    super(props);
    
    this.state = {isToggleOn: true };
    
    //callback์—์„œ 'this'๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ”์ธ๋“œ๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ํ•ด์ค˜์•ผ ํ•จ
    this.handleClick = this.handleClick.bind(this);
  }
  
  handleClick() {
    this.setStateprevState => ({
      isToogleOn: !prevState.isToggleOn
    }));
  }
  
  render(){
    return(
      <button onClick = {this.handleClick}>
        {this.state.isToggleOn ? '์ผœ์ง' : '๊บผ์ง' }
      </button>
      );
  }
}

bind => JS์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Class ํ•จ์ˆ˜๋“ค์ด ๋ฐ”์ธ๋“œ ๋˜์ง€ ์•Š์•„์„œ, this๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ bind๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด global scope์—์„œ ํ˜ธ์ถœ์ด ๋จ.
๊ทธ๋Ÿฌ๋‚˜, global scope์—์„œ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ undefinded๋กœ ๋‚˜ํƒ€๋‚จ
์ฆ‰, ํ•จ์ˆ˜์˜ ์ด๋ฆ„ ๋’ค์— ๊ด„ํ˜ธ ์—†์ด ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฌด์กฐ๊ฑด bind!

2. Bind ๋Œ€์‹  Class fields syntax ์‚ฌ์šฉ

class MyButton extends React.Component {
  handeClick= () => {
    console.log('this is:', this);
  }
  
  render() {
    return(
      <button onClick={this.handleClick}>
        ํด๋ฆญ
      </button>
      );
  }
              

3. Bind, Class field ์‚ฌ์šฉ ๋Œ€์‹  Arrow Function ์‚ฌ์šฉ

class myButton extends React.Component {
  handleClick() {
    console.log('this is', this);
  }
  
  render(){
    return(
      <button onClick={()=> this.handleClick()}>
        ํด๋ฆญ
      </button>
      );
  }

์„ฑ๋Šฅ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ 1,2๋ฒˆ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์ง

๐Ÿ”ธ Function Component์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

1. ํ•จ์ˆ˜ ์•ˆ์— ๋˜๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ์ •์˜

function Toggle(props){
  const [isToggleOn, setIsToggleOn] = useState(true);
  
  function handleClick() {
    setIsToggleOn((isToggleOn) => !isToggleOn));
  }
  
   return(
      <button onClick = {handleClick}>
        {this.state.isToggleOn ? '์ผœ์ง' : '๊บผ์ง' }
      </button>
      );
}

2. arrow function์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜

function Toggle(props){
  const [isToggleOn, setIsToggleOn] = useState(true);
  
 const handelClick=() => {
   setIsToggleOn((isToggleOn) => !isToggleOn);
 }
  
   return(
      <button onClick = {handleClick}>
        {this.state.isToggleOn ? '์ผœ์ง' : '๊บผ์ง' }
      </button>
      );
}

์ด๋•Œ๋Š” onClick์— this๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ณง๋ฐ”๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์คŒ!

๐Ÿ’— Argument

โœ ํ•จ์ˆ˜์— ์ฃผ์žฅํ•  ๋‚ด์šฉ = ํ•จ์ˆ˜์— ์ €์žฅํ•  ๋ฐ์ดํ„ฐ = Event Handler์— ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ

๐Ÿ’— Parameter

โœ ๋งค๊ฐœ๋ณ€์ˆ˜

๐Ÿ”ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ event handler์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

1. ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ

<button onClick ={(event) => this.deleteItem(id, event)}>์‚ญ์ œํ•˜๊ธฐ<button>
  //arrow function
  
  <button onClick={this.deleteItem.bind(this, id)}>์‚ญ์ œํ•˜๊ธฐ</button>
  //bind ์‚ฌ์šฉ

2. ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ

funciton MyButton(props){
  const handleDelete = (id, event) => {
    console.log(id, event.target);
  };
  
  return(
    <button onClick={(event) => handleDelete(1, event)}>
      ์‚ญ์ œํ•˜๊ธฐ
    </button>
    );
}

๐Ÿ”ธ ์˜ˆ์‹œ ์ฝ”๋“œ

import React, {useState} from "react";

function ConfirmButton(props){
  const [isConfirmed, setIsConfirmed] = useState(false);

  const handleConfirm = () => {
    setIsConfirmed((prevIsConfirmed) => !prevIsConfirmed);
  };
// prev๋Š” ์ƒํƒœ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ!! 


  return (
    <button onClick={handleConfirm} disabled={isConfirmed}>
      {isConfirmed ? "ํ™•์ธ๋จ" : "ํ™•์ธํ•˜๊ธฐ"}
    </button>
  )
};

export default ConfirmButton;
profile
new blog: https://hae0-02ni.tistory.com/

0๊ฐœ์˜ ๋Œ“๊ธ€