리액트를 사용하여 프론트 개발을 할 때 두 가지 방법으로 컴포넌트를 선언할 수가 있습니다. 과거에는 클래스형 컴포넌트를 주로 사용했지만, 2019년 v16.8 부터 함수형 컴포넌트에 리액트 훅(hook)을 지원해 주어서 현재는 공식 문서에서 함수형 컴포넌트와 훅을 함께 사용할 것을 권장하고 있습니다.
필요한 상황에 맞게 사용하는 것이 중요하므로 각각의 특징에 따라 잘 사용하는게 중요합니다.
컴포넌트는 단순한 템플릿 이상의 기능을 수행합니다. 데이터가 주어졌을 때 이에 맞추어 UI를 만들어 주는 기능을 하는 것은 물론, 라이프 사이클 API를 통해 컴포넌트가 화면에 나타날 때, 사라질 때, 변할 때 작업들을 수행할 수도 있습니다.
컴포넌트의 목적에 따라 프리젠테이션(presentational) 컴포넌트와 컨테이너(container) 컴포넌트로 나누어서 사용합니다.
import React from 'react';
function App() {
const name = '리액트';
return <div>{name}</div>;
}
export default App;
state, lifeCycle 관련 기능사용 불가능하다. [Hook을 통해 해결]
클래스형보다 메모지 자원을 덜 사용한다.
컴포넌트 선언이 편하다.
const + 함수 형태로 선언해야 한다.
요소에 적용할때 this가 필요없다.
props는 프로퍼티(properties)를 줄인 표현으로 컴포넌트 속성을 설정할 때 사용하는 표현입니다.
props 값은 해당 컴포넌트를 불러와 사용하는 부모 컴포넌트에서 설정할 수 있습니다. 그리고 경우에 따라서 propTypes 컴포넌트 속성을 통해 props의 타입을 지정해 줄 수도 있습니다.
타입스크립트를 사용한다면 굳이 propTypes를 사용하지 않아도 타입 체크를 할 수가 있습니다.
클래스형 컴포넌트의 경우 render 함수에서 this.props를 조회해서 사용할 수 있습니다.
import React, { Component } from 'react';
class App extends Component {
render() {
const name = '리액트';
return <div>{name}</div>;
}
}
export default App;
class 키워드 필요
Component로 상속을 받아야한다.
render() 메소드가 반드시 필요하다.
state, lifeCycle 관련 기능사용이 가능하다.
함수형보다 메모리 자원을 더 사용한다.
임의 메소드를 정의할 수 있다.
함수 선언시 화살표 함수로 바로 선언 가능하다.
요소에 적용할때 this.를 붙여줘야한다.
function BlackDog() {
this.name = '흰둥이';
return {
name: '검둥이',
bark: function() {
console.log(this.name + ': 멍멍!');
}
}
}
const blackDog = new Blackdog();
blackDog.bark(); // 검둥이: 멍멍!
function WhiteDog() {
this.name = '흰둥이';
return {
name: '검둥이',
bark: () => {
console.log(this.name + ': 멍멍!');
}
}
}
const whiteDog = new Whitedog();
whiteDog.bark(); // 흰둥이: 멍멍!
function()을 사용하면 검둥이가 나타나고, () => {} 를 사용하면 흰둥이가 나타납니다. 일반 함수는 자신이 종속된 객체를 this로 가리키며, 화살표 함수는 자신이 종속된 인스턴스를 가리킵니다.