Component
- MVC View를 독립적으로 구성해 재사용할 수 있고, 새로운 컴포넌트도 만들 수 있음
 
- 데이터 (props) 를 입력받아 View 상태 (state) 에 따라 DOM Node 호출
 
- UI를 재사용 가능한 개별적인 여러 조각으로 나누고, 각 조각을 개별적으로 나누어 코딩 ⭕
 
- 컴포넌트명은 대문자로 시작
 
Component 트리 구조

Component 종류
함수형 Component
- 짧고 직관적
 
- Vanilla JS와 같은 기본적인 function 구조를 이용해 더 직관적 & 추상적
 
- 메모리 자원을 적게 사용
 
- 최근 사용 多 (Next.js는 거의 함수형만 사용하라고 할 정도)
 
function FuncComponent() {
  const class = "kdt8";
  
  return (
    <>
    	<div>{ class == "kdt8" ? "반가워요" : "누구..?" }</div>
    </>
  );
}
export default FuncComponent;
클래스형 Component
- state와 라이프 사이클 기능 이용 ⭕
 
- render( ) 필수
 
import { Component } from "react";
class ClassComponent extends Component {
  render() {
    const class = "kdt8";
    
    return (
    	<>
    		<div>{ class == "kdt8" ? "반가워요" : "누구..?" }</div>
    	</>
  	)
  }
}
export default ClassComponent;
export vs export default
4주차 (2) 게시글 참고
props
- properties를 줄인 표현
 
- 컴포넌트 속성을 설정할 때 사용하는 요소
 
- props는 컴포넌트끼리 값을 전달하는 수단
 
- 상위 컴포넌트 → 하위 컴포넌트 (단방향 데이터 흐름)
 
함수형 component props
- 부모 컴포넌트에서 전달한 props는 함수형 컴포넌트에서 함수의 파라미터로 전달받음
 
defaultProps
- 부모 컴포넌트에서 props가 전달되지 않았을 때, 기본값으로 보여줄 props 설정
 
props.children
- 부모 컴포넌트에서 자식 컴포넌트를 호출할 때, 태그 사이에 작성한 문자열
 
propTypes
- 컴포넌트의 필수 props를 지정하거나 props의 타입을 지정할 때 사용
 
- JavaScript의 '유연한 특성'을 해결하기 위해 권장되는 기능
 
- 오류가 발생해도 실행 ⭕ (But, console에서 오류가 났음을 알려줌)
 
<FuncComponent name="코딩온">children 내용</FuncComponent>
import PropTypes from "prop-types";
import { Component } from "react";
class ClassComponent extends Component {
  render() {
    return (
    	<>
    		<div>{ this.props.name }</div>
      		<div>{ this.props.children }</div>
    	</>
  	)
  }
}
ClassComponent.defaultProps = {
  name: "홍길동"
}
ClassComponent.propTypes = {
  name: PropTypes.string
}
export default FuncComponent;
클래스형 component props
<ClassComponent name="코딩온">children 내용</ClassComponent>
import PropTypes from "prop-types";
const FuncComponent = (props) => {
  return (
    <>
    	<div>{ props.name }</div>
   		<div>{ props.children }</div>
    </>
  );
}
FuncComponent.defaultProps = {
  name: "홍길동"
}
FuncComponent.propTypes = {
  name: PropTypes.string
}
export default FuncComponent;