본문 바로가기
Library | Framework/React

[React] 컴포넌트 이벤트 만들기 복습/응용

by 나는김혜린 2022. 1. 5.

서론

저번엔 WEB을 클릭하면 state의 mode값을 welcome으로 바꿔 TOC 내용을 바꿔보았었다.

그래서 이번 글은 저번 글에서 배웠던 컴포넌트 이벤트를 복습하고, 응용하는 글이 되겠다.

 

목표

동영상처럼 이때까지 구현한 웹 페이지에서 HTML, CSS, JS 를 누르면

각각의 정보를 밑에 보여주는 것이 이번 글의 목표임 한 번 만들어봅세.

 

일단 state에 클릭된 content(html, css, js)가 무엇인지 알기 위해 일종의 id 역할을 하는 프로퍼티를 만든다.

selected_content_id와 contents의 id를 비교해서 그 id의 content를 보여주는 것이다.

 

 

 

그리고 TOC 컴포넌트에 data 속성을 만들어 state의 contents를 할당해준다.

또, onChangePage 속성을 추가해 id라는 인자를 가지는 함수를 만든다.

그리고 이 함수가 실행되면 state의 mode가 read로 바뀌고 seleted_content_id는 함수로 넘어온 id로 바꿔준다.

 

TOC.js

다음, TOC.js에서 App 컴포넌트에서 넘겨준 data를 또 다른 변수 'data'를 만든다.

data-id에 i번째의 id값을 할당한다. 여기서 data-id는 data-abc, data-hi 이런 식으로도 만들 수 있다.

그래서 클릭했을 때(onClick) 함수가 실행되면서 태그의 기본적인 동작을 못 하게 한다.

그리고 onChangePage로 dataset의 id 즉, data-id의 값을 보낸다.

 

다시 이 부분을 보면 TOC 컴포넌트에서 넘겨준 id값을 selected_content_id로 할당한다.

여기서 id를 문자열로 넘겨줬기 때문에 Number()를 이용해 숫자로 바꿔준다.

 

마지막으로 App 컴포넌트 render() 함수에 이 코드를 넣어준다.

저번이랑 if문은 같지만 else if문이 달라진다.

일단 계속 1씩 증가할 변수 i를 선언하고, this.state.contents.length까지 즉,

 

3까지 while문을 반복한다.

data 변수에 i번째 data를 넣고, data의 id와 selected_content_id와 같으면 data를 보여준다.

 

이렇게 하면 정상적으로 잘 작동될 거고, 오류나 고칠 부분이 있다면 부탁드립니당

댓글