일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Watson IBM
- 졸업프로젝트
- 리액트
- TIL
- 유니티 음성인식
- 유니티 stt
- nlp
- 코딩테스트
- 딥러닝의정석
- 합성곱 신경망
- react
- NLU
- JSX
- Unity
- AR
- javascript
- 리액트를 다루는 기술
- 프로그래머스
- 생활코딩
- git lfs
- Watson Speech to Text
- upper_bound
- 카카오 블라인드 채용
- 백준
- speech to text
- 프로젝트 회고
- 해커톤 후기
- lower_bound
- redux
- 딥러닝
- Today
- Total
ISFP의 느리게 굴러가는 개발 블로그
[생활코딩] 리액트 스터디 #5 이벤트(2) 본문
전편에서 다룬 onClick 함수는 내장 함수지만 사용자 함수도 정의할 수 있다.
이번 강의에서는 사용자가 만든 Component 안에서 사용자 함수를 정의해서 여러 가지 event를 만들어볼 것이다.
1. onChangePage 함수
//App Component에서의 Subject 태그
1
2
3
4
5
6
7
8
|
<Subject
title={this.state.subject.title}
sub={this.state.subject.sub}
onChangePage={function(){
this.setState({mode:'welcome'}) //직접 만든 event
}.bind(this)}
>
</Subject>
|
cs |
여기서 onChangePage는 사용자가 직접 만든 함수이다.
//Subject.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import React, {Component} from 'react';
class Subject extends Component {
render(){
return (
<header> {/*최상위태그*/}
<h1><a href="/" onClick={function(e){
e.preventDefault();
this.props.onChangePage(); //onChangePage함수 호출
}.bind(this)}>{this.props.title
}</a></h1>
{this.props.sub}
</header>
);
}
}
export default Subject;
|
cs |
onClick 함수가 실행되었을 때 onChangePage가 호출되면서 mode를 'welcome'으로 바꿔준다.
이전에(#3 State 편) mode가 'welcome'이 되면 title과 desc를 바꿔주도록 했으므로 'WEB'을 클릭하면 welcome page가 뜬다.
이번에는 3개의 contents(HTML, CSS, JavaScript)중 클릭한 항목의 내용이 본문에 나오도록 해볼것이다.
우선 render 함수에서 mode가 'read'일 때 selected_content_id값을 받아와서 그 id값에 대응되는 title과 desc가 보여지게끔 한다.
//App.js의 render 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
render(){
var _title, _desc=null;
if (this.state.mode==='welcome'){
_title=this.state.welcome.title;
_desc=this.state.welcome.desc;
} else if (this.state.mode==='read'){
var i=0;
while(i<this.state.contents.length){
var data=this.state.contents[i];
if (data.id===this.state.selected_content_id){
_title=data.title;
_desc=data.desc;
}
i=i+1;
}
}
|
cs |
그리고 아래와 같이 TOC 태그에 onChangePage 함수를 선언해주고
//App Component의 TOC 태그
1
2
3
4
|
<TOC onChangePage={function(id){
this.setState({mode:'read', selected_content_id:Number(id)});
}.bind(this)}
data={this.state.contents}></TOC>
|
cs |
TOC.js의 li태그 안에 onClick 함수를 선언해준다.
1
2
3
4
5
6
7
8
|
<li><a href={"/content/"+data[i].id}
data-id={data[i].id}
onClick={function(e){
e.preventDefault();
this.props.onChangePage(e.target.dataset.id);
}.bind(this)}>
{data[i].title}</a>
</li>
|
cs |
여기서 살펴볼 것이 바로 this.props.onChangePage(e.target.dataset.id); 이다.
e.target을 하면 target을 a태그로 인식한다.
그리고 두 번째 줄의 'data-'라는 접두사로 시작되는 속성은 특수하게 dataset이라는 것으로 접근할 수 있다.
따라서 selected_content_id로 현재 클릭된 id값이 전달되면서 본문이 클릭된 값으로 바뀐다!
'웹 스터디 > react' 카테고리의 다른 글
[리액트를 다루는 기술] 2장 JSX (0) | 2021.02.17 |
---|---|
[React] Redux(리덕스) 개념잡기 (2) | 2021.01.16 |
[생활코딩] React 스터디 #4 이벤트 (0) | 2020.11.23 |
[생활코딩] React 스터디 #3 State (3) | 2020.11.23 |
[생활코딩] React 스터디 #2 컴포넌트 만들기 (0) | 2020.11.22 |