본문 바로가기

리액트

이벤트 핸들링

사용자가 웹 브라우저에서 DOM요소들과 상호 작용하는 것을 이벤트라고 한다.

(HTML의 onchange등을 사용했다면 익숙할 것이다)

 

리액트의 이벤트 시스템도 HTML의 이벤트와 동일하다.

다만 몇 가지 주의사항이 있다.

 

이벤트를 사용할 때의 주의사항은 다음과 같다.

 

1. 이벤트 이름은 카멜 표기법으로 작성한다. (예: onclick을 onClick으로 작성하기)

2.이벤트에 실행할 자바스크립트의 코드를 전달하는 것이 아니라 함수 형태의 값을 전달한다. 

3.DOM요소에만 이벤트를 설정할 수 있다.

: div, button, input, form, span등의 DOM요소에는 이벤트를 설정할 수 있지만, 우리가 직접 만든 컴포넌트에는 이벤트를 자체적으로 설정할 수 없다. 

예를 들어 <MyComponent onClick={doSomething}/> 이라는 컴포넌트에 onClick값을 설정한다면, doSomething을 실행하는 것이 아니라, 그냥 이름이 onClick인 props를 MyComponent에 전달해 줄 뿐이다.

컴포넌트에 자체적으로 이벤트를 설정할 수는 없다. 하지만 전달받은 props를 컴포넌트 내부의 DOM 이벤트로 설정할 수는 있다. 

 


//새 컴포넌트 생성

 

import React, { Component } from "react";

 

class EventPractice extends Component {

  render() {

    return (

      <div>

        <h1>이벤트 연습</h1>

        <input

          type="text"

          name="message"

          placeholder="아무말이나 입력해보세요"

          onChange={(e=> {

            console.log(e);

          }}

        />

      </div>

    );

  }

}

 

export default EventPractice;



//App.js

 

import React from "react";

import EventPractice from "./EventPractice";

 

const App = () => {

  return <EventPractice />;

};

 

export default App;

 

이벤트 객체가 콘솔에 나타나는 것을 볼 수 있다.

콘솔에 기록되는 e객체는 SyntheticEvent로 웹 브라우저의 네이티브 이벤트를 감싸는 객체이다. 

네이티브 이벤트와 인터페이스가 같으므로 순수 자바스크립트에서 HTML 이벤트를 다룰 때와 똑같이 사용하면 된다.

SyntheticEvent 및 네이티브 이벤트와 달리 이벤트가 끝나고 나면 이벤트가 초기화되므로 정보를 참조할 수 엉ㅄ다. 

0.5초 뒤에 e객체를 참조하면 e 객체 내부의 모든 값이 비워지게 된다.

 

비동기적으로 이벤트 객체를 참조할 일이 있다면 e.persist()함수를 호출해 주어야 한다.

 

import React, { Component } from "react";

 

class EventPractice extends Component {

  render() {

    return (

      <div>

        <h1>이벤트 연습</h1>

        <input

          type="text"

          name="message"

          placeholder="아무말이나 입력해보세요"

          onChange={(e=> {

            console.log(e.target.value);

          }}

        />

      </div>

    );

  }

}

 

export default EventPractice;

 

값이 바뀔 때 마다 기록되는 것을 볼 수 있다.

 

 

 

 

 

'리액트' 카테고리의 다른 글

[이벤트 핸들링] input 여러개 다루기  (0) 2021.08.07
state를 이용한 이벤트 핸들링  (0) 2021.08.04
Hooks  (0) 2021.07.30
State  (0) 2021.07.24
Props  (0) 2021.07.19