λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

FE/React

[React] React μ»΄ν¬λ„ŒνŠΈλž€? React 앱을 κ΅¬μ„±ν•˜λŠ” μš”μ†Œ

πŸ“Œ μ»΄ν¬λ„ŒνŠΈ (Component)λž€?

λ¦¬μ•‘νŠΈλŠ” ν™”λ©΄μ—μ„œ UI μš”μ†Œλ₯Ό ꡬ뢄할 λ•Œ 'μ»΄ν¬λ„ŒνŠΈ'λΌλŠ” λ‹¨μœ„λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ‰½κ²Œ λ§ν•˜λ©΄ λ¦¬μ•‘νŠΈμ—μ„œ 앱을 μ΄λ£¨λŠ” κ°€μž₯ μž‘μ€ 쑰각이라고 ν•  수 있고, 레고 λΈ”λ‘μœΌλ‘œ 집을 μŒ“κ²Œ 된 경우 ν•˜λ‚˜μ˜ 블둝이 'μ»΄ν¬λ„ŒνŠΈ'라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ»΄ν¬λ„ŒνŠΈλŠ” μƒˆλ‘œμš΄ μ»΄ν¬λ„ŒνŠΈλ₯Ό 생성할 수 도 있고, MVC 의 λ·°λ₯Ό λ…λ¦½μ μœΌλ‘œ κ΅¬μ„±ν•˜μ—¬ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ˜ μ€‘μš”ν•œ 핡심인 'μ»΄ν¬λ„ŒνŠΈ'μ—λŠ” ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈ, 클래슀 μ»΄ν¬λ„ŒνŠΈ 2가지가 μžˆμŠ΅λ‹ˆλ‹€. 

 

μ»΄ν¬λ„ŒνŠΈ ꡬ성 μš”μ†Œ 

1) property(props) 

- λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μžμ‹ μ»΄ν¬λ„ŒνŠΈμ— μ „λ‹¬λ˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€. ν”„λ‘œνΌν‹°κ°’μ€ μžμ‹ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μˆ˜μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 

2) state

- μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  μˆ˜μ • κ°€λŠ₯ν•œ λ°μ΄ν„°μž…λ‹ˆλ‹€. 

3) context 

- λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒμ„±ν•˜μ—¬ λͺ¨λ“  μžμ‹ μ»΄ν¬λ„ŒνŠΈμ—κ²Œ μ „λ‹¬ν•˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€. 

 

βš‘ν•¨μˆ˜(Function) μ»΄ν¬λ„ŒνŠΈ

ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈλž€? 

ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλŠ” 말 κ·ΈλŒ€λ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ "ν•¨μˆ˜(function)" 기반 μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λ“―μ΄ function 으둜 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ •μ˜ν•˜κ³ , return 문에 JSX μ½”λ“œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

function MyComponent() {
  return (
    <div>
      Hello React!
    </div>
  );
}

 

λ˜ν•œ ν™”μ‚΄ν‘œ λ¬Έλ²•μœΌλ‘œλ„ λ‚˜νƒ€λ‚Ό 수 μžˆμ–΄μš”. 

const function =  (param1, param2, … ) => { statements }

const MyComponent = () => {
    return (
        <div>
            Hello React!
        </div>
    );
};

 

μ»΄ν¬λ„ŒνŠΈλŠ” Visual Studio Code ν™˜κ²½μ—μ„œ "Reactjs Code snippet" 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄ νŽΈν•˜κ²Œ 생성 κ°€λŠ₯ν•©λ‹ˆλ‹€. rscλ₯Ό μž…λ ₯ν•˜λ©΄ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈκ°€ μžλ™μ™„μ„±λ˜λŠ”λ°μš”. MyComponent.js νŒŒμΌμ—μ„œ Hello React!λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ½”λ“œμž…λ‹ˆλ‹€. 

 

 ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” 이유 

1) Hooks

κ³Όκ±°μ—λŠ” ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈκ°€ state, 라이프사이클을 μ§€μ›ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈλ₯Ό 많이 μ‚¬μš©ν–ˆμ§€λ§Œ, React v16 이후뢀터 Hooksλ₯Ό ν†΅ν•œ state 및 LifeCycle 관리가 κ°€λŠ₯ν•΄μ Έ λ¦¬μ•‘νŠΈμ—μ„œ κ³΅μ‹μ μœΌλ‘œ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€. Hook의 useStateλ₯Ό μ‚¬μš©ν•΄ state λ₯Ό 관리할 수 있고, useEffect λ₯Ό μ‚¬μš©ν•΄ LifeCycle 을 관리할 수 μžˆμ–΄μš”. 

2) 직관적인 μ½”λ“œ   

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜(function) μ„ μ–Έ, ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•΄ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš© κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— κ°œλ°œμžμ—κ²Œ μ§κ΄€μ μž…λ‹ˆλ‹€. 

3) λ©”λͺ¨λ¦¬ μžμ› 효율 

ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ— λΉ„ν•΄ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈκ°€ 비ꡐ적 λ©”λͺ¨λ¦¬ μžμ›μ„ 적게 μ‚¬μš©ν•©λ‹ˆλ‹€. 

 

 

⚑ 클래슀(Class) μ»΄ν¬λ„ŒνŠΈ

• 클래슀 μ»΄ν¬λ„ŒνŠΈλž€? 

클래슀 μ»΄ν¬λ„ŒνŠΈλŠ”  μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ "클래슀" 기반 μ»΄ν¬λ„ŒνŠΈλ‘œ, class둜 μ •μ˜ν•˜κ³  render() ν•¨μˆ˜μ—μ„œ jsx μ½”λ“œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 

 

• 클래슀 μ»΄ν¬λ„ŒνŠΈ νŠΉμ§• 

1) class ν‚€μ›Œλ“œλ‘œ 클래슀 μ»΄ν¬λ„ŒνŠΈ 생성
2) React.Component 상속

React의 ComponentClassλ₯Ό 상속받아  Component 상속이 ν•„μš”ν•΄μš”. 

3) render () λ©”μ„œλ“œ ν•„μˆ˜λ‘œ μ‚¬μš©  

 ν΄λž˜μŠ€ μ»΄ν¬λ„ŒνŠΈ μ•ˆμ— render() λ©”μ„œλ“œκ°€ κΌ­ ν•„μš”ν•˜κ³  λ©”μ„œλ“œ μ•ˆμ— JSX λ₯Ό λ¦¬ν„΄ν•©λ‹ˆλ‹€. 

4) this ν‚€μ›Œλ“œ μ‚¬μš©ν•˜κΈ° 

state, props, refs,μ»΄ν¬λ„ŒνŠΈ λ©”μ„œλ“œ, 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ this 둜 ν”„λ‘œνΌν‹°λ₯Ό μ°Έμ‘°ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€. 

 

• 클래슀 μ»΄ν¬λ„ŒνŠΈ μƒμ„±ν•˜κΈ° 

클래슀 μ»΄ν¬λ„ŒνŠΈλŠ” React의 ComponentClassλ₯Ό 상속받아 κ΅¬ν˜„λ˜κΈ° λ•Œλ¬Έμ— λ°˜λ“œμ‹œ {Component}λ₯Ό import ν•˜κ³  React.Component λ₯Ό μƒμ†λ°›μ•„μ•Όν•©λ‹ˆλ‹€

import React, { Component } from 'react';

 

μ•„λž˜λŠ” ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ μ½”λ“œ κ΅¬μ‘°μž…λ‹ˆλ‹€.

Component λ₯Ό 상속받고, render() λ©”μ„œλ“œλ₯Ό 톡해 return λ¬Έ μ•ˆμ— μžˆλŠ” JSX μ½”λ“œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 

class MyComponent2 extends Component {
    render() {
        return (
            <div>
                Hello React!
            </div>
        );
    }
}

 

"Reactjs Code snippet" λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ„€μΉ˜λ˜μ–΄ μžˆλ‹€λ©΄, rcc λ₯Ό μž…λ ₯ν•˜λ©΄ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈκ°€ μžλ™μ™„μ„±λ˜λŠ”λ°μš”.

μ•„λž˜λŠ” MyComponent2.js νŒŒμΌμ—μ„œ Hello React!λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ½”λ“œμž…λ‹ˆλ‹€.