No Story, No Ecstasy

리액트를 다루는 기술 개정판 [Event, ref: DOM] 본문

Frontend Series

리액트를 다루는 기술 개정판 [Event, ref: DOM]

heave_17 2021. 1. 29. 23:12

4. 이벤트 핸들링

  . 리액트에서의 이벤트: 사용자가 웹 브라우저에서 DOM 요소들과 상호 작용하는 것

 

  . 주의사항 

    . 이벤트 이름은 카멜 표기법으로 작성한다.

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

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

 

  . 종류 (https://facebook.github.io/react/docs/events.html/ 참고)

    . Clipboard, Composition, Keyboard, Focus, Form, Mouse, Selection, Touch, UI, Wheel, Media

    . Image, Animation, Transition

 

  . onChange

  . SyntheticEvent

    . 웹 브라우저의 네이티브 이벤트를 감싸는 객체. 이벤트가 끝나고 나면 초기화됨

    . 비동기적으로 참조할 일이 있다면 e.target.value (e.persist())를 사용해야 한다.

  . state에 input 값 담기

    . state 선언 후, input의 onChange에서 setState를 활용하여 해당 값을 업데이트해준다.

 

  . 임의 메서드 만들기

    . 함수를 미리 준비하여 전달하면 가독성이 훨씬 높아진다.

    . 함수가 호출될 때 this는 호출부에 따라 결정되므로, 메서드를 this와 바인딩하는 작업이 필요하다.

    . 만약 바인딩하지 않는 경우라면 this가 undefined를 가리키게 된다.

    . 메서드 바인딩은 생성자에서 하는 것이 정석 -> Property Initializer Syntax를 사용하면 훨씬 간편해짐, p.132

 

  . input 여러개 다루기 

    . event 객체의 e.target.name 값 사용하기 

    . 객체 안에서 key를 [ ]로 감싸면 그 안에 넣은 레퍼런스가 가리키는 실제 값이 key 값으로 사용된다.

    . form, setForm으로 여러 개의 state를 한 번에 선언할 수도 있다.

 

  . onKeyPress 이벤트 핸들링

    . 특정 키보드 Key를 눌렀을 때 발생하는 이벤트를 정의. 예: if (e.key === 'Enter') {~~}

 

5. ref: DOM

  . 일반 HTML에서 DOM 요소에 이름을 달 때는 id를 사용한다.

  . 리액트 내부에서 DOM에 이름을 다는 방법이 바로 ref 개념이다.

  . id과 ref의 차이: ref는 컴포넌트 내부에서만 작동한다. (id는 중복 id 발급을 방지해야 한다)

 

  . ref의 사용 상황: DOM을 꼭 직접적으로 건드려야 할 때

    . 특정 input에 포커스 주기 

    . 스크롤 박스 조작하기 

    . Canvas 요소에 그림 그리기 등

 

  . 콜백 함수를 통한 ref 설정 

    . ref를 달고자 하는 요소에 ref라는 콜백 함수를 props로 전달해준다. 그리고 함수 내부에서 ref를 멤버 변수로 설정

    . <input ref={(ref) => {this.input=ref}} />

 

  . createRef를 통한 ref 설정 (v16.3부터 도입됨)

    . 컴포넌트 내부에 멤버 변수로 React.createRef()를 담고, 해당 변수를 ref를 달고자 하는 요소에 ref props로 넣어 준다.