일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- nlp
- redux
- git lfs
- react
- TIL
- Unity
- javascript
- 프로그래머스
- 합성곱 신경망
- 졸업프로젝트
- 딥러닝
- Watson Speech to Text
- speech to text
- JSX
- 리액트
- upper_bound
- 딥러닝의정석
- 카카오 블라인드 채용
- 코딩테스트
- 생활코딩
- 유니티 stt
- 백준
- AR
- 해커톤 후기
- 프로젝트 회고
- NLU
- lower_bound
- 리액트를 다루는 기술
- 유니티 음성인식
- Watson IBM
- Today
- Total
ISFP의 느리게 굴러가는 개발 블로그
[생활코딩] React 스터디 #4 이벤트 본문
동적인 웹페이지를 만들기 위한 이벤트
1. Event
props, state, event가 서로 상호작용을 하면서 역동적인 웹페이지를 만들어준다.
이번 강의에서는 onClick()을 이벤트를 사용해서 글자를 클릭했을 때 state값을 바꿔보도록 하였다.
이전에 작성했던 App Component에서 Subject태그의 부분을 잠깐 살짝 바꿔보도록 하자.
1
|
<a href="/" onClick={function(e){ onClick 함수가 실행됐을 때 할 행동 }</a>
|
cs |
*javascript에서는 onclick이지만 리액트에서는 CCase라고 두 단어가 연결되었을 때 앞 글자를 대문자로 쓰는 방법을 사용한다. onClick이니까 lowerCamelCase이다.
1) 이벤트가 발생했을 때 기본적인 동작 멈추게 하는 방법
e.preventDefault(); //이벤트가 발생했을 때 기본적인 동작 방법을 멈추게 함 |
*debugger을 사용하면 잠깐 실행을 멈추고 기다린다.
2) onClick 함수가 실행되었을 때 state를 바꿔보기
이런 에러가 뜬다.
이 event가 호출되었을 때 this는 component를 가리키는 게 아니고 아무것도 가리키지 않는다. 그래서 undefined 값을 읽는 것을 할 수 없다고 하는 것이다.
이 this가 component를 가리킬 수 있는 방법은 함수의 뒤에 .bind(this)를 붙이면 된다.
1
2
3
4
5
|
<a href="/" onClick={function(e){ //camel code
console.log(e);
e.preventDefault(); //이벤트가 발생했을 때 기본적인 동작 방법을 멈추게 함
this.state.mode='welcome'; //아무 값도 setting되어있지 않음
}.bind(this)}>
|
cs |
하지만 이 경우에도 아무일도 일어나지 않는다. 리액트에 전달하는 방법이 아니기 때문이다.
해결방법)
1
2
3
4
5
6
7
8
9
10
|
<header>
<h1><a href="/" onClick={function(e){ //camel code
console.log(e);
e.preventDefault(); //이벤트가 발생했을 때 기본적인 동작 방법을 멈추게 함
this.state.mode='welcome'; //아무 값도 setting되어있지 않음
this.setState({mode:'welcome'});
// debugger; //이 부분에서 실행을 멈추고 기다림
}.bind(this)}>{this.state.subject.title}</a></h1>
{this.state.subject.sub}
</header>
|
cs |
이렇게 setState함수를 사용해서 mode를 객체로 전달해주면 된다.
render 함수 안에서 this는 현재 component를 가리키는데 onClick 함수 안의 this는 아무 값이 없다. 여기서 원리가 뭐냐?! 해서 알려주실 줄 알았는데 모르신다고 해서.... 궁금증만 늘어났다.
이때 bind함수를 사용하면 그 함수 안에서 this가 객체를 되게끔 한다.
'웹 스터디 > react' 카테고리의 다른 글
[React] Redux(리덕스) 개념잡기 (2) | 2021.01.16 |
---|---|
[생활코딩] 리액트 스터디 #5 이벤트(2) (0) | 2020.11.24 |
[생활코딩] React 스터디 #3 State (3) | 2020.11.23 |
[생활코딩] React 스터디 #2 컴포넌트 만들기 (0) | 2020.11.22 |
[생활코딩] React 스터디 #1 샘플 웹앱 실행 (1) | 2020.11.15 |