(1) 만들면서 알아보는 Hooks
프로젝트 구조
만들어볼 프로젝트의 구조는 아래와 같습니다.

프로젝트는 초기 세팅 상태로 진행되어집니다.
1) 레이아웃 구성
스타일링을 위해 styled-components 를 설치합니다.
먼저 왼쪽의 목록 컴포넌트부터 만들어보도록 하겠습니다. 목록 컴포넌트가 해주는 일은 간단합니다. 목록 데이터를 받아 그려줍니다. 목록의 메모를 클릭시 클릭된 메모를 오른쪽에 그려줍니다. 이번 예제에서는 Context API 를 이용하여 데이터의 상호작용이 이루어 질 수 있도록 합니다.
먼저 src 폴더 아래에 memos 폴더와 content 폴더를 만들고 내부에 index.js 들을 생성해주세요
혹시 styled-component 의 사용법을 잘 모르신다면 이전 예제들을 확인해주세요
만들어진 컴포넌트들을 App.js 에서 불러와서 간단한 레이아웃 구조를 생성해보겠습니다.
아래와 같이 나누어진 화면을 보실 수 있을거에요

2) useContext 를 이용하여 Context API 구성
왼쪽 목록의 컴포넌트에서는 선택된 메모의 값을 알아야하고 오른쪽 컴포넌트에서는 선택된 메모 값을 바탕으로 데이터를 그려줘야합니다. 이처럼 컴포넌트들 끼리의 상호작용이 일어날때 가장 간단한 방법은 두 컴포넌트를 감싸는 컴포넌트로 state 를 올려서 사용하는 방법이 있지만 이번에는 Context API 를 이용하여 데이터를 주고 받는 방법을 알아보려고합니다.
use-Context 라는 hook 을 이용하여 Context API 를 보다 손쉽게 사용하도록 할 수 있습니다.
다양한 Context 를 만들 수 있는 방법은 여기를 참고해주세요
src 아래에 application-context 라는 이름의 파일을 만들어주세요
여기서 잠깐, useState 란 ?
useState 는 이전에 보았던 class component 의 state = { // ... } 와 같습니다. 다른 점이 있다면 setState 로 변경했던 것과는 다르게 useState 는 해당 state 를 변경 할 수 있는 짝을 지원해 준다는 것입니다.
3) 만들어진 Context API 이용하기
Context API 는 말그대도 관련있는 Context 에서만 값을 이용할 수 있도록 만들어 줄 수 있습니다. 하지만 지금 우리는 Context 범위가 적기 때문에 두 컴포넌트를 감싸고 있는 App.js 에서 Provider 를 적용해주도록 하겠습니다.
이제 Provider 로 감싸져 있는 내부 요소들에서는 useApplicationContext 를 이용하여 Context 내부 값에 접근 할 수 있습니다.
4) Memos 컴포넌트에서 Context API 사용하기
Memos 컴포넌트를 작성하기전에 먼저 Context API의 memos에 dummy data 를 채워보고자합니다.
메모는 아래와 같은 데이터 구조를 갖습니다.
useState 는 인자로 default value 를 줄 수 있습니다. memos 의 default Value 로 dummy data 가 추가된 배열을 줍니다.
이제 memos 에서 context api 에 접근하여 memos 데이터가 잘 불러와지는지 확인해보겠습니다.

memos 데이터를 가지고 왼쪽 리스트를 구성해야하는데 레이아웃 그림에서 보신 것 처럼 같은 형식의 구조가 반복되어지고 있습니다.

이 컴포넌트를 리스트자체에서 그려주는 것 보다는 memo 라는 컴포넌트를 만들어 따로 그려주는것이 렌더링 이점과 사용 측면에서도 좋기 때문에 따로 분리를 하겠습니다.
memo 컴포넌트는 id, title, content 의 데이터를 props 로 받습니다.
만든 Memo 를 Memo 에서 사용하도록 추가합니다.
5) 공통 컴포넌트 만들기
다양한 텍스트를 표현하기 위해 공통적으로 사용할 Text 컴포넌트와 컴포넌트들을 감싸줄 Container 만들어보겠습니다. Text 의 경우 당장의 필요한 속성은 텍스트의 사이즈, 굵기, 말줄임, line-height 입니다. 앞으로 필요한 속성은 하나씩 추가하면서 살펴보겠습니다.
Container 는 float, margin, padding, display 가 필요합니다.
App 에 있는 Container 를 공통 Container 로 변경합니다.
6) Memo 구성해보기
위에서 만들어 놓은 text 를 이용하여 Memo 컴포넌트를 만들어보겠습니다.
content 부분은 너무 길어질 수 있기 때문에 말줄임을 적용합니다.

7) Content 컴포넌트 구성하기
Content 컴포넌트는 선택된 Memo 에 대한 내용을 보여줍니다.
Content 에서는 Context API 의 Memo State 를 사용하여 내용을 구성합니다. Context API 에 dummy data 를 추가하여 view 부터 구성해보겠습니다.
우리가 추가해놓았던 임시메모데이터라는 메모가 선택되어졌다고 가정하겠습니다.
Content 에서 Context API 의 memo 값을 가져옵니다. 이전에 만들어뒀던 Container 를 이용하여 간격을 조절하고 Text 를 이용하여 텍스트 스타일을 추가합니다

8) Content 컴포넌트 상태에 따른 버튼
Content 컴포넌트에선 선택된 Memo 의 내용을 수정 할 수 있습니다. Content 본문 윗 쪽에 수정 모드로 전환 할 수 있는 버튼을 추가합니다.
3 가지의 상태에 따라 버튼은 동작과 텍스트가 달라집니다.
1) 선택된 Memo 가 있고 수정 상태가 아니면 (새 글 작성 + 수정) 버튼을 노출 2) 선택된 Memo 가 있고 수정 상태이면 (수정 + 취소) 버튼을 노출 3) 수정 상태가 아니라면 (새 글 작성 노출)

Last updated
Was this helpful?