React

Event Handling

growdeveloper 2023. 2. 1. 14:37

HTML DOM에 클릭하면 이벤트가 발생하고, 발생하면 그에 맞는 변경이 일어나도록 해야합니다.

JSX에 이벤트를 설정할 수 있습니다.

 

Class Comp extends React.Component {
	render() {
    	return (
        	<div>
            	<button onClick={() => {
                	console.log('clicked');
                }}>클릭</button>
            </div>
        )
    }
}

 

Event Hadling

  • camelCase 로만 사용할 수 있습니다.
    • onClick, onMouseEnter
  • 이벤트에 연결된 자바스크립트 코드는 함수입니다.
    • 이벤트 = {함수} 와 같이 씁니다.
  • 실제 DOM 요소들에만 사용 가능합니다.
    • 리액트 컴포넌트에 사용하면, 그냥 props로 전달합니다.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
 
  <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
  <div id="root1"></div>
  <div id="root2"></div>
  <div id="root3"></div>
</body>
<script type="text/babel">

  //function을 이용한 컴포넌트
  // function Component() {
  //   return (
  //         <div>
  //           <button onClick={() => {
  //             console.log("click");
  //           }}>클릭</button>
  //         </div>
  //   );
  // }


  //생성자를 이용한 방식
  class Component1 extends React.Component {
    state = {
      count : 0,
    };

    constructor(props){
      super(props);
     this.click = this.click.bind(this);
    }
    render() {
     return (
            <div>
              <p>{this.state.count}</p>
              <button onClick={this.click}>클릭</button>
            </div>
          );
    }

    click() {
      console.log("click");
      this.setState((state)=> ({...state, count: state.count+1,}));
    }
  }

  //함수에서 해결하는 방식
  class Component2 extends React.Component {
    state = {
      count : 0,
    };
    render() {
     return (
            <div>
              <p>{this.state.count}</p>
              <button onClick={this.click}>클릭</button>
            </div>
          );
    }

    click = () => {
      console.log("click");
      this.setState((state)=> ({...state, count: state.count+1,}));
    }
  }

  ReactDOM.render(<Component1/>,document.querySelector("#root1"));
  ReactDOM.render(<Component2/>,document.querySelector("#root2"));



</script>
</html>