본문 바로가기

카테고리 없음

[리액트를 다루는 기술] 4. 이벤트 핸들링

728x90

* 김민준 저자님의 <리액트를 다루는 기술> 책을 보고 정리해 놓은 글입니다. 가볍게 일독을 마친 상태이고 모르는 부분 위주로 정리하고 구글링을 해서 도움이 되는 자료를 정리하겠습니다.


1. 이벤트

- 사용자가 웹브라우저에서 DOM 요소들과 상호작용을 하는 것

-> form 요소는 값이 바뀔때 onchange 이벤트를 실행


2. 규칙

1) 이벤트 이름은 carmel case로 한다.: 낙타모양의 명명규칙

2)이벤트 실행할 자바스크립트 코드 전달이 아니고 함수 형태의 값을 전달

3) DOM 요소에만 이벤트 설정 할 수 있음

- div, button, input, form , sapn 등


3. 이벤트 실행

- <MyComponent onClick={doSomething}/>

->doSomething 함수를실행하는 것이 아니라 그냥 이름이 onClick인 props를 전달 받음

-> <div onClick={this.props.onClick}>


4. 실습순서

1) 컴포넌트 불러오기

2) onChange 이벤트 핸들링

3) 임의 매서드 만들기

4) input 여러개 다루기

5) onKeyPress 이벤트 핸들링하기




5. onChange 이벤트 설정

<input 

onChange={ (e) => { console.log(e);}} />

- e 객체는 syntheticEvent(synthetic:인조) 웹브라우저의 네이티브 이벤트를 감싸는 객체

- 네이티브 이벤트와 인터페이스가 같음. 

- e.target.value : 앞으로 변할 인풋값



6. state에 인풋값 담기

- construtor 생성자 매서드에서 state 초기값을 설정

- 이벤트 핸들링 함수 내부에서 this.state 매서드를 호출하여 state를 업데이트

- state = { message: '' }

- value = {this.state.message}

- (e) => { this.setState({message: e.target.value})


* 이렇게 하니 message라는 alias를 생기게 할 수 있음


- 메시지를 띄운후 comment 값을 공백으로 변경

- alert(this.state.message)
-this.setState({message:''})



7. 임의 매서드 만들기

- 이벤트에 실행할 자바스크립트 코드를 전달하는 것이 아니라 함수 형태를 전달

- 랜더링을 하는 동시에 함수를 만들어서 전달

- 함수를 미리 만들어서 전달하는 방법도 있음


- 생성자를 하는 이유가 props의 값을 세팅?

- handleChange(e) {

this.setState({ message: e.target.value})

- onChange = {this.handleChange}


- 컴포넌트에 임의매서드를 만들면 this로 접근이 안됨

-> 각 매서드를 this와 바인딩을 해주어야 함



8. property initializer syntax 사용한 매서드 작성

- 매서드 바인딩은 constructor 생성자에서 하는것이 정석

- 하지만 Arrow 함수 형태로 하게 되면 이부분이 해결된다.

- handleChange = (e) => {this.setState({ e.target.value}); }

-> Arrow 함수를 이용하게 되면 생성자 함수를 통해서 바인딩을 하지 않아도 됨


9. input 여러개 핸들링
- event 객체를 활용

- handleChange = (e) =>{this.setState({ [e.target.name]:e.target.value});}





가우넷 구름 USB 충전식 양면 대용량 보조배터리 손난로, 단일 상품, 화이트



"파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음"