컴포넌트(Component)란?
리액트는 화면에서 UI 요소를 구분할 때 '컴포넌트'라는 단위를 사용한다. 쉽게 말하면 리액트에서 앱을 이루는 가장 작은 조각이라고 할 수 있다. 컴포넌트는 새로운 컴포넌트를 생성할 수도 있고, MVC의 뷰를 독립적으로 구성하여 재사용할 수 있다. 리액트의 중요한 핵심인 '컴포넌트'에는 함수 컴포넌트, 클래스 컴포넌트 2가지가 있다.
컴포넌트 구성 요소
- property(props) : 부모 컴포넌트에서 자식 컴포넌트에 전달되는 데이터이다. 프로퍼티 값은 자식 컴포넌트에서 수정할 수 있다.
- state : 컴포넌트의 상태를 저장하고 수정 가능한 데이터이다.
- context : 부모 컴포넌트에서 생성하여 모든 자식 컴포넌트에게 전달하는 데이터이다.
함수(Function) 컴포넌트 vs 클래스(Class) 컴포넌트
React 함수 컴포넌트와 클래스 컴포넌트는 동일한 작업을 수행할 수 있지만 구문과 특정 기능 사용 방법에서 차이가 있다. React 16.8에서 훅(Hooks)이 도입되면서 클래스를 작성하지 않고도 상태와 다른 React 기능을 사용할 수 있게 되었다.
함수형 컴포넌트란?
함수형 컴포넌트는 말 그대로 자바스크립트의 "함수(function)"기반 컴포넌트이다. 자바스크립트 함수를 선언하듯이 function으로 컴포넌트를 정의하고, return문에 JSX 코드를 반환한다.
function MyComponent() {
return (
<div>
Hello React!
</div>
);
}
또한, 화살표 문법으로도 나타낼 수 있다.
const MyComponent = () => {
return (
<div>
Hello React!
</div>
);
};
함수형 컴포넌트를 사용하는 이유
- Hooks
과거에는 함수형 컴포넌트가 state, lifecycle을 지원하지 않았기 때문에 클래스형 컴포넌트를 많이 사용했지만 React v16 이후부터는 Hooks를 통한 state 및 LifeCycle 관리가 가능해져 리액트에서 공식적으로 함수형 컴포넌트 사용을 권장한다. hook의 useState를 사용해 state를 관리할 수 있고, useEffect를 사용해 LifeCycle을 관리할 수 있다. - 직관적인 코드
자바스크립트의 함수(function) 선언, 화살표 함수를 그대로 사용해 컴포넌트를 사용 가능하기 때문에 직관적이다. - 메모리 자원 효율
클래스형 컴포넌트에 비해 함수형 컴포넌트가 비교적 메모리 자원을 적게 사용한다.
클래스(Class) 컴포넌트란?
클래스 컴포넌트란 자바스크립트의 "클래스"기반 컴포넌트로, class로 정의하고 render() 함수에서 jsx 코드를 반환한다.
클래스 컴포넌트 특징
- class 키워드로 클래스 컴포넌트 생성
- React.Component 상속 : React의 ComponentClass를 상속받아 Component상속 필요하다.
- render() 메서드 필수로 사용 :클래스 컴포넌트 안에 render() 메서드가 꼭 필요하고 메서드 안에 JSX를 리턴한다.
- this 키워드 사용하기 : state, props, refs, 컴포넌트 메서드, 생명주기 메서드를 사용할 때 this로 프로퍼티를 참조하여 사용한다.
클래스 컴포넌트 생성하기
클래스 컴포넌트는 React의 ComponentClass를 상속받아 구현되기 때문에 반드시 Component를 import 하고 React.Component를 상속받아야 한다.
import React, { Component} from 'react';
class MyComponent2 extends Component {
render() {
return (
<div>
Hello React!
</div>
);
}
}
Class Component 생명주기
마운트(mount)
컴포넌트의 인스턴스가 생성되고 DOM에 삽입될 때 시작된다. 이 단계에서 호출되는 메서드는 다음과 같다.
- static getDerivedStateFromProps()
- constructor()
- render()
- componentDidMount()
업데이트(updating)
props 또는 state의 변경으로 인해 다시 렌더링될 때 시작된다. 이 단계에서 호출되는 메서드는 다음과 같다.
- static getDerivedStateFromProps()
- shouldComponentUpdate()
- render()
- getSnapshotBeforeUpdate()
- componentDidUpdate()
언마운팅(Unmounting)
컴포넌트가 DOM에서 제거될 때 시작된다. 즉, 컴포넌트가 화면에서 사라지는 것을 의미한다. 이 단계에서 호출되는 메서드는 다음과 같다.
- componentWillUnmount()

Functional Component 생명주기
리액트에서 Hook은 함수형 컴포넌트에서 React state와 생명주기 기능을 연동할 수 있게 해주는 함수이다. Hook은 class안에서는 동작하지 않고, class없이 React를 사용할 수 있게 한다.
리액트 훅을 도입한 목적
- 기존의 라이프사이클 메서드 기반이 아닌 로직 기반으로 나눌 수 있어서 컴포넌트를 함수 단위로 잘게 쪼갤 수 있다는 이점이 있다.
- 라이프사이클 메서드에는 관련 없는 로직이 자주 섞여 들어가는데, 이로 인해 버그가 쉽게 발생하고, 무결성을 쉽게 해친다.
Hook 사용 규칙
- 최상위에서만 Hook을 호출해야 한다.
- 반복문, 조건문, 중첩된 함수 내에서 Hook을 실행하면 안된다.
- 이 규칙을 따르면 컴포넌트가 렌더링될 때마다 항상 동일한 순서로 Hook이 호출되는 것이 보장된다.
- 리액트 함수 컴포넌트에서만 Hook을 호출해야 한다.
- 일반 JS함수에서는 Hook을 호출해서는 안된다.
'React' 카테고리의 다른 글
| [React] UseState 알아보기 (0) | 2024.09.22 |
|---|