로 사고하기

8109 단어 ReactReact

React로 사고하기

React는 JavaScript로 규모가 크고 빠른 웹 애플리케이션을 만드는 가장 좋은 방법이다.
React는 Facebook과 Instagram을 통해 확장성을 입증했다.

React의 가장 멋진 점 중 하나는 앱을 설계하는 방식이다.
이 문서를 통해 React로 상품들을 검색할 수 있는 데이터 테이블을 만드는 과정을 함께 생각해 보자.

목업으로 시작하기

JSON API와 목업을 디자이너로부터 받았다고 가정해 보자.
목업은 다음과 같을 것이다.

JSON API는 아래와 같은 데이터를 반환한다.

[
  {category: "Sporting Goods", price: "$49.99", stocked: true, name: "Football"},
  {category: "Sporting Goods", price: "$9.99", stocked: true, name: "Baseball"},
  {category: "Sporting Goods", price: "$29.99", stocked: false, name: "Basketball"},
  {category: "Electronics", price: "$99.99", stocked: true, name: "iPod Touch"},
  {category: "Electronics", price: "$399.99", stocked: false, name: "iPhone 5"},
  {category: "Electronics", price: "$199.99", stocked: true, name: "Nexus 7"}
];

1단계: UI를 컴포넌트 계층 구조로 나누기

우리가 할 첫 번째 일은 모든 컴포넌트(와 하위 컴포넌트)의 주변에 박스를 그리고 그 각각에 이름을 붙이는 것이다.
디자이너와 함께 일한다면, 이것들을 이미 정해두었을 수 있으니 한번 대화해보라!
디자이너의 Photoshop 레이어 이름이 React 컴포넌트의 이름이 될 수 있다.

하지만 어떤 것이 컴포넌트가 되어야 할지 어떻게 알 수 있을까?
우리가 새로운 함수나 객체를 만들 때처럼 만드시면 된다.
한 가지 테크닉은 단일 책임 원칙이다.
이는 하나의 컴포넌트는 한 가지 일을 하는게 이상적이라는 원칙이다.
하나의 컴포넌트가 커지게 된다면 이는 보다 작은 하위 컴포넌트로 분리되어야 한다.

주로 JSON 데이터를 유저에게 보여주기 때문에, 데이터 모델이 적절하게 만들어졌다면, UI(컴포넌트 구조)가 잘 연결될 것이다.
이는 UI와 데이터 모델이 같은 인포메이션 아키텍처(information architecture)를 가지는 경향이 있기 때문이다.
각 컴포넌트가 데이터 모델의 한 조각을 나타내도록 분리하라.

다섯개의 컴포넌트로 이루어진 앱을 한번 확인해보자.
각각의 컴포넌트에 들어간 데이터는 이탤릭체로 표기했다.

  1. FilterableProductTable(노란색): 예시 전체를 포괄한다.
  2. SearchBar(파란색): 모든 유저의 입력(user input) 을 받는다.
  3. ProductTable(연두색): 유저의 입력(user input)을 기반으로 데이터 콜렉션(data collection)을 필터링 해서 보여준다.
  4. ProductCategoryRow(하늘색): 각 카테고리(category)의 헤더를 보여준다.
  5. ProductRow(빨강색): 각각의 제품(product)에 해당하는 행을 보여준다.

ProductTable을 보면 “Name” 과 “Price” 레이블을 포함한 테이블 헤더만을 가진 컴포넌트는 없다.
이 같은 경우, 데이터를 위한 독립된 컴포넌트를 생성할지 생성하지 않을지는 선택이다.
이 예시에서는 ProductTable의 책임인 데이터 컬렉션(data collection)이 렌더링의 일부이기 때문에 ProductTable을 남겨두었다.
그러나 이 헤더가 복잡해지면 (즉 정렬을 위한 기능을 추가하는 등) ProductTableHeader컴포넌트를 만드는 것이 더 합리적일 것이다.

이제 목업에서 컴포넌트를 확인하였으므로 이를 계층 구조로 나열해보자.
모형의 다른 컴포넌트 내부에 나타나는 컴포넌트는 계층 구조의 자식으로 나타낸다.

FilterableProductTable

	SearchBar
	ProductTable

		ProductCategoryRow
		ProductRow

2단계: React로 정적인 버전 만들기