[카운터] 앱 만들기

로이·2024년 4월 23일

프로젝트 준비하기

프로젝트를 구현하기에 앞서, 앱을 어떤 설계와 기능으로 구현할지 살펴보는 "요구사항 분석"이 선행되어야 함

요구사항 분석하기

이 프로젝트에서는, 현재의 카운트를 표시하는 영역을 뷰어(Viewer)라고 하고, 카운트를 제어하는 영역을 컨트롤러(Controller)라고 함

컴포넌트 단위로 생각하기

컴포넌트는 재사용이 가능한 수준에서 최대한 잘게 쪼개어 개발해야 함
! 하나의 컴포넌트는 단 하나의 역할만 수행한다

리액트 앱 만들기

> npx create-react-app .

사용하지 않는 파일과 코드 삭제

UI 구현하기

UI(User Interface)는 사용자 인터페이스라는 뜻으로, 웹 페이지에서 사용자와 상호작용하는 요소를 말함

Viewer 컴포넌트 만들기

...

Controller 컴포넌트 만들기

...

컴포넌트 스타일링하기

.App > section은 className=App 요소의 <section> 태그를 가리키는 CSS 문법
// App.css

body {
	padding: 20px;
}

.App {
	margin: 0 auto;
    width: 500px;
}

.App > section {
	padding: 20px;
    background-color: rgb(245, 245, 245);
    border: 1px solid rgb(240, 240, 240);
    border-radius: 5px;
    margin-bottom: 10px;
}

기능 구현하기

State를 이용해 카운터 기능 구현하기

버튼 클릭 이벤트가 발생했을 때 컴포넌트 값을 동적으로 렌더링하려면 리액트의 State를 사용해야 함

State는 어떤 컴포넌트에 만들까?

리액트는 State 값이나 set 함수를 여러 컴포넌트에서 사용하는 경우, 이들을 상위 컴포넌트에서 관리해야 하므로, 프로젝트에서는 App 컴포넌트에서 State를 만들어야 함 ( = State 끌어올리기 (State Lifting) )
// App.js

...
// component/Viewer.js

...
// component/Controller.js

const Controller = ({ handleSetCount }) => {
	return (
    	<div>
        	<button onClick={() => handleSetCount(-1)}>-1</button>
        	<button onClick={() => handleSetCount(-10)}>-10</button>
        	<button onClick={() => handleSetCount(-100)}>-100</button>
        	<button onClick={() => handleSetCount(+100)}>+100</button>
        	<button onClick={() => handleSetCount(+10)}>+10</button>
        	<button onClick={() => handleSetCount(+1)}>+1</button>
        </div>
    );
}
export default Controller;

리액트답게 설계하기

리액트 앱을 설계할 때는, Props를 사용하는 데이터는 부모에서 자식으로, State를 변경하는 이벤트는 자식에서 부모로 향하도록 설계되어야 함

0개의 댓글