우리는 React를 사용해, 사용자 인터페이스를 구축할 때 가장 먼저 구성 요소라는 조각으로 분리합니다.
그런 다음, 각 구성 요소의 다양한 시각적 상태를 설명합니다.
그리고 마지막으로는 데이터가 구성요소를 통해 흐르도록 구성요소를 함께 연결하죠.
<script>
[
{ category: "Fruits", price: "$1", stocked: true, name: "Apple" },
{ category: "Fruits", price: "$1", stocked: true, name: "Dragonfruit" },
{ category: "Fruits", price: "$2", stocked: false, name: "Passionfruit" },
{ category: "Vegetables", price: "$2", stocked: true, name: "Spinach" },
{ category: "Vegetables", price: "$4", stocked: false, name: "Pumpkin" },
{ category: "Vegetables", price: "$1", stocked: true, name: "Peas" }
]
</script>
먼저 React 공식에서 제공한 JSON API를 한 번 볼까요?
이걸 모형으로 변환시킨다면 아마 아래와 같은 모습이 나올 겁니다.

문자열이 이렇게 깔끔하게 정렬된다니...순서를 통해 한 번 알아봅시다.
먼저 우리는 모형의 모든 구성요소와 하위 구성요소 주위에서 상자를 그리고 그 이름을 지정하는 것부터 시작할 수 있습니다.
예를 든다면 밑의 그림과 같겠네요.

만약 디자이너와 함께 작업하신다면, 디자인 도구(ex:)Figma)에서 이러한 구성 요소의 이름을 이미 지정하셨을 수도 있습니다.
또한, 이러한 상자로 나누는 과정과 상자 이름을 정하는 것은 배경에 따라 다양한 방식으로 구성 요소를 분할 할 수 있습니다.
이렇듯 모형에서 구성요소를 식별했으므로, 이를 계층 구조로 정렬할 필요가 있습니다.
모형의 다른 구성요소 내에 나타내는 구성요소는 계층구조에서 하위로 표시되어야 합니다.
FilterableProductTable
SearchBar
ProductTableProductCategoryRow
ProductRow
이런 식으로 말이죠.
이제 구성요소 계층구조가 있으므로 앱을 구현할 차례입니다.
가장 간단한 접근 방식은 상호작용을 추가하지 않고, 데이터 모델에서 UI를 렌더링하는 버전을 구축하는 것입니다.
데이터 모델을 렌더링하는 정적 버전의 앱을 빌드하려면 다른 구성 요소를 재사용하고 props를 사용하여 데이터를 전달하는 구성 요소를 빌드해야 합니다 . Prop은 부모에서 자식으로 데이터를 전달하는 방법입니다. ( 상태 개념에 익숙하다면 이 정적 버전을 빌드하는 데 상태를 전혀 사용하지 마세요. 상태는 상호작용, 즉 시간이 지남에 따라 변경되는 데이터용으로만 예약되어 있습니다. 이는 앱의 정적 버전이므로 , 필요하지 않습니다.)
계층 구조에서 더 높은 구성 요소를 구축하는 것부터 시작하여 "하향식"으로 구축 FilterableProductTable하거나(예: ) 더 낮은 구성 요소부터 작업하여 "상향식"으로 구축할 수 있습니다 ProductRow. 간단한 예에서는 일반적으로 하향식으로 진행하는 것이 더 쉽고 대규모 프로젝트에서는 상향식으로 진행하는 것이 더 쉽습니다.
예시 스크립트는 너무 기니까...넘어가겠습니다.
UI를 대화형으로 만들려면 사용자가 기본 데이터 모델을 변경할 수 있도록 해야 합니다.
이를 위해 상태를 사용합니다 .
애플리케이션에 필요한 상태의 최소한의 표현을 파악하고 필요에 따라 다른 모든 것을 계산합니다.
예를 들어 쇼핑 목록을 작성하는 경우 항목을 상태 배열로 저장할 수 있습니다.
목록의 항목 수도 표시하려면 항목 수를 다른 상태 값으로 저장하지 말고, 대신 배열의 길이를 읽으십시오.
일단은 예제 어플리케이션의 모든 데이터 조각을 생각해 봅시다.
우리는 여기서 상태가 아닌 것을 식별해야 합니다.
다시 하나씩 살펴봐야할 것 같습니다.
Finally! 검색 텍스트와 체크박스의 값만 상태임을 의미합니다.
앱의 최소 상태 데이터를 식별한 후, 이 상태 변경을 담당하거나 상태를 소유하는 구성요소를 식별해야 합니다.
기억하세요! React는 단방향 데이터 흐름을 사용하여, 구성요소 계층구조를 따라 상위 구성요소에서 하위 구성요소로 데이터를 전달합니다.
우리는 어플리케이션의 각 상태에 대해 다음을 수행해야 합니다.
결론적으로 우리의 전략은 이렇습니다.
결정이 됐다면 Hook을 사용하여 구성요소에 상태를 추가 합니다. useState()죠.
Hook은 React와 연결 할 수 있게 해주는 기능입니다.
<script>
function FilterableProductTable({ products }) {
const [filterText, setFilterText] = useState('');
const [inStockOnly, setInStockOnly] = useState(false);
</script>
이런 식으로 말이죠.
그런 다음, FilterText 와 inStockOnly를 하위 컴포넌트 ProductTable, SearchBar로 전달합니다.
<script>
<div>
<SearchBar
filterText={filterText}
inStockOnly={inStockOnly} />
<ProductTable
products={products}
filterText={filterText}
inStockOnly={inStockOnly} />
</div>
</script>
이런 식으로 {}를 사용해 전달할 수 있습니다.
현재 이 예시 앱은 계층 아래로 흐르는 소품과 상태를 사용해, 올바르게 렌더링 됩니다.
그러나 사용자의 입력에 따라 상태를 변경하려면, 데이터가 다른 방향으로 흐르는 것도 지원해야 하죠.
리액트와 한 몸이 되어봅시다.