[포스코x코딩온] 웹개발자 풀스택 부트캠프8기
[포스코x코딩온] React - Component
항상 발전하는 개발자
2023. 9. 19. 13:45
728x90
https://ko.reactjs.org/docs/react-component.html
React.Component – React
A JavaScript library for building user interfaces
ko.legacy.reactjs.org
Component란?
- React의 꽃이라 불리는 React의 핵심
- MVC View를 독립적으로 구성해 재사용할 수 있고, 새로운 컴포넌트도 만들 수 있다.
- 데이터(props)를 입력 받아 View 상태(state)에 따라 DOM Node를 호출한다.
- UI를 재사용 가능한 개별적인 여러 조각으로 나누고, 각 조각을 개별적으로 나누어 코딩이 가능하다.
어떤 것이 컴포넌트가 되어야 할지 어떻게 알 수 있을까요? 우리가 새로운 함수나 객체를 만들 때처럼 만드시면 됩니다. 한 가지 테크닉은 단일 책임 원칙입니다. 이는 하나의 컴포넌트는 한 가지 일을 하는게 이상적이라는 원칙입니다. 하나의 컴포넌트가 커지게 된다면 이는 보다 작은 하위 컴포넌트로 분리되어야 합니다.
주로 JSON 데이터를 유저에게 보여주기 때문에, 데이터 모델이 적절하게 만들어졌다면, UI(컴포넌트 구조)가 잘 연결될 것입니다. 이는 UI와 데이터 모델이 같은 인포메이션 아키텍처(information architecture)를 가지는 경향이 있기 때문입니다. 각 컴포넌트가 데이터 모델의 한 조각을 나타내도록 분리해주세요.
다섯개의 컴포넌트로 이루어진 앱을 한번 봅시다. 각각의 컴포넌트에 들어간 데이터는 이탤릭체로 표기했습니다. 이미지의 숫자는 아래 숫자에 해당됩니다.
1. FilterableProductTable(노란색): 예시 전체를 포괄합니다.
2. SearchBar(파란색): 모든 유저의 입력(user input) 을 받습니다.
3. ProductTable(연두색): 유저의 입력(user input)을 기반으로 데이터 콜렉션(data collection)을 필터링 해서 보여줍니다.
4. ProductCategoryRow(하늘색): 각 카테고리(category)의 헤더를 보여줍니다.
5. ProductRow(빨강색): 각각의 제품(product)에 해당하는 행을 보여줍니다.
https://ko.legacy.reactjs.org/docs/thinking-in-react.html#step-1-break-the-ui-into-a-component-hierarchy
Component 트리 구조
Component 종류
- 함수형 Component
- 짧고 직관적
- Vanilla JS와 같은 기본적인 function 구조를 이용해 더 직관적이며 추상적
- 메모리 자원을 덜 사용한다.
- 클래스형 Component
- State와 라이프 사이클 기능 이용 가능
- Render 함수 필수
클래스형 Component
//1 방법 import { Component } from "react";
//2 방법 import React from "react";
//1 방법 class ClassComponent extends Component {}
//2 방법 class ClassComponent extends React.Component {}
class ClassComponent extends Component {
//클래스형 컴포넌트에서는 render 함수는 필수
render() {
const name = "dongho!";
return (
<>
<h1>Hello {name}</h1>
<p>여기는 클래스형 컴포넌트</p>
</>
);
}
}
export default ClassComponent;
- 클래스 컴포넌트는 Render()가 필수이다.
- 이렇게 컴포넌트를 만들고 상위 컴포넌트에서 아래 코드처럼 불러서 사용할 수 있다.
import ClassComponent from "./ClassComponent";
function App() {
return (
<>
<ClassComponent />
<ClassComponent></ClassComponent>
</>
);
}
export default App;
함수형 Component
//함수형 컴포넌트
//function 컴포넌트명
//const 컴포넌트명 = () => {}
function FunctionComponent() {
const myClass = "kdt8";
return (
<>
<div>반갑습니다 {myClass}에 오신 것을 환영합니다.</div>
</>
);
}
export default FunctionComponent;
- 상위 컴포넌트에서 불러오는 것은 똑같다.
import FunctionComponent from "./FunctionComponent";
function App() {
return (
<>
<FunctionComponent></FunctionComponent>
</>
);
}
export default App;
- export에서 default를 사용하게 되면 하나의 component만 export할 수 있다. 만약 여러개의 component가 있다면 default를 빼고 export만 사용하면 된다.
※ 잠깐! 복습※
컴포넌트를 사용하게 되면 파일을 다 분리해서 만들고 하나의 파일에서 다 불러와서 사용하기에 편리하다.
import ClassComponent from "./ClassComponent";
import FunctionComponent from "./FunctionComponent";
import CircleComponet from "./CircleComponent";
import TestComponent from "./test";
import Test2Component from "./test2";
import ClassPropsComponent from "./ClassPropsComponent";
import FunctionPropsComponent from "./FunctionPropsComponent";
function App() {
return (
<>
<CircleComponet></CircleComponet>
<br></br>
<br></br>
<h1>컴포넌트</h1>
<ClassComponent />
<FunctionComponent></FunctionComponent>
<ClassComponent></ClassComponent>
<test2Component></test2Component>
<br></br>
<TestComponent />
<Test2Component />
<ClassComponent></ClassComponent>
<ClassComponent name="dongho"></ClassComponent>
<FunctionComponent name="부모입니다." age={12}>
안녕
</FunctionComponent>
<FunctionComponent></FunctionComponent>
<ClassPropsComponent food="사과"></ClassPropsComponent>
<ClassPropsComponent></ClassPropsComponent>
<FunctionPropsComponent
title="나의 하루는 4시 40분에 시작된다."
author="김유진"
price="13,500원"
type="자기계발서"
></FunctionPropsComponent>
</>
);
}
export default App;
- 이렇게 App.js에 필요한 component만 불러와서 사용할 수 있다.
- 코드가 간결해지는게 보인다. (만약 똑같은 부분이 있다면 코드가 엄청 길어질텐데 한줄에 다 끝낼 수 있다.)
- 물론 그러기 위해서는 다음 글에 나오는 props를 알아야 한다. 그래야 데이터을 넘기고 받고 할 수 있다.
728x90