🚧React 기초(μˆ˜μ •μ€‘)πŸ”§

: ) YOUNGΒ·2021λ…„ 5μ›” 11일
2

React 기초

λͺ©λ‘ 보기
1/4
post-thumbnail

κΆκΈˆν•˜μ‹  μ μ΄λ‚˜ κ³ μΉ  뢀뢄이 μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ λŒ“κΈ€ λ‚¨κ²¨μ£Όμ„Έμš”!

πŸ”₯ν΄λž˜μŠ€ν˜•κ³Ό ν•¨μˆ˜ν˜• μ°¨μ΄πŸ’§

react μ»΄ν¬λ„ŒνŠΈ μ„ μ–Έν•˜λŠ” 2κ°€μ§€ 방식
<ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ/ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ>
ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλ₯Ό 많이 μ‚¬μš©ν•˜λ„λ‘ ꢌμž₯ν•˜κ³  μžˆμ§€λ§Œ,
기초λ₯Ό μœ„ν•΄μ„œλŠ” ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈλ„ μ•Œκ³ μžˆμ–΄μ•Όν•œλ‹€.

VScodeλ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

VScode ν™•μž₯ν”„λ‘œκ·Έλž¨
ES7 React/Redux/GraphQL/React-Native snippets을 λ‹€μš΄λ‘œλ“œν•œλ’€
ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ jsνŒŒμΌμ„ λ§Œλ“ λ’€ rceλ₯Ό μž…λ ₯ν•˜λ©΄ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ μ½”λ“œκ°€ μžλ™μœΌλ‘œ μž‘μ„±λ©λ‹ˆλ‹€.
ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλŠ” rfceλ₯Ό μž…λ ₯ν•˜λ©΄λ©λ‹ˆλ‹€.

ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ

import React, {Component} from 'react';

class App extends Component {
  render() {
    const name = 'react';
    return <div className="react">{name}</div>
  }
}

export default App;

ν΄λž˜μŠ€ν˜•μ—μ„œλŠ” κΌ­ ν•„μš”ν•œ ν‚€μ›Œλ“œκ°€ μžˆλ‹€.

  • class ν‚€μ›Œλ“œ ν•„μš”
  • Component 상속
  • render() λ©”μ†Œλ“œ

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

import React from 'react';
import './App.css';

function App() {
  const name = 'react';
  return <div className = "react">{name}</div>
}

export default App;

useStateμ‚¬μš©πŸ’»

λ¨Όμ € useStateλ₯Ό μ‚¬μš©ν•˜κΈ°μ „μ— ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή μ΄λž€κ±Έ μ•Œμ•„λ³΄μž.

μš°λ¦¬κ°€ κ°μ²΄λ‚˜ 배열을 λ§Œλ“€μ—ˆλ‹€κ³  μƒκ°ν•΄λ³΄μž. 이것을 λ§κ·ΈλŒ€λ‘œ λΆ„ν•΄, ν• λ‹Ή ν•˜λŠ” 방법이닀.

//객체 생성
const obj = { a: 1, b: 2, c: 3 };
//λ°°μ—΄ 생성
const array = [5, 6, 7, 8]; 

console.log(array[1]); //6좜λ ₯
console.log(obj.a); //1좜λ ₯

μ΄λ ‡κ²Œ 객체와 배열이 μƒμ„±λ˜μ—ˆλ‹€κ³  보자. μš°λ¦¬κ°€ 자주보던 λͺ¨μŠ΅μ΄λ‹€.
κ·Έλ ‡λ‹€λ©΄ μ—¬κΈ°μ„œ, μ½”λ“œλ₯Ό 쑰금 μˆ˜μ •ν•΄λ³΄μž

//객체 생성
const obj = { a: 1, b: 2, c: 3 };
//λ°°μ—΄ 생성
const array = [5, 6, 7, 8];

const [apple, bus, car] = array;

console.log(apple, bus, car);

λ§Œμ•½ μ½”λ“œκ°€ μ΄λ ‡κ²Œ μˆ˜μ •λœλ‹€λ©΄ console.logμ—μ„œ μ–΄λ–€ 값이 λ‚˜μ˜€κ²Œ 될까?
닡은

5 6 7

이 λ‚˜μ˜€κ²Œ λœλ‹€.

μ‰½κ²Œ λ§ν•΄μ„œ μ§„μ§œ λ§Œλ“€μ–΄μ§„ 배열을 λΆ„ν•΄ν•΄μ„œ λ‹€λ₯Έ κ°’μœΌλ‘œ ν• λ‹Ήν•΄μ€€λ‹€ μ΄λŸ°λœ»λœλ‹€. useStateμ—μ„œ μ™œ 이 ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή μ–˜κΈ°κ°€ λ‚˜μ˜€κ²Œ 됬냐 함은 그것은 λ°”λ‘œ,
useStateν˜•μ‹μ΄ const[state, setState] = useState(A,B); μ΄λ ‡κ²Œ λ˜κΈ°λ•Œλ¬Έμ΄λ‹€.
useStateμ—μ„œ 첫 번째 μš”μ†Œκ°€ state(μƒνƒœκ°’), λ‘λ²ˆμ§ΈλŠ” setState(λ³€ν™˜)을 μ˜λ―Έν•œλ‹€.

μ»΄ν¬λ„ŒνŠΈμ˜ 라이프사이클

λΌμ΄ν”„μ‚¬μ΄ν΄μ˜ λ©”μ†Œλ“œλŠ” 총 9개
Will 접두사가 뢙은 λ©”μ„œλ“œλŠ” μž‘μ—…μ„ μž‘λ™ν•˜κΈ° 전에 μ‹€ν–‰λ˜λŠ” λ©”μ†Œλ“œ,
Did 접두사가 뢙은 λ©”μ†Œλ“œλŠ” μž‘μ—…μ„ μž‘λ™ν•œ 후에 μ‹€ν–‰λ˜λŠ” λ©”μ†Œλ“œ 이닀.

λΌμ΄ν”„μ‚¬μ΄ν΄μ˜ 단계

  • 마운트
  • μ—…λ°μ΄νŠΈ
  • μ–Έλ§ˆμš΄νŠΈ

마운트(Mount)

DOM이 μƒμ„±λ˜κ³  μ›Ή λΈŒλΌμš°μ €μƒμ— λ‚˜νƒ€λ‚˜λŠ” 것을 마운트라고 함

  • constructor: μ»΄ν¬λ„ŒνŠΈλ₯Ό μƒˆλ‘œ λ§Œλ“€λ•Œλ§ˆλ‹€ ν˜ΈμΆœλ˜λŠ” 클래슀 μƒμ„±μž λ©”μ†Œλ“œ
  • getDerivedStateFromProps: props에 μžˆλŠ” 값을 state에 넣을 λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œ
  • render: μš°λ¦¬κ°€ μ€€λΉ„ν•œ UIλ₯Ό λ Œλ”λ§ν•˜λŠ” λ©”μ†Œλ“œ
  • componentDidMount: μ»΄ν¬λ„ŒνŠΈκ°€ μ›Ή λΈŒλΌμš°μ €μƒμ— λ‚˜νƒ€λ‚œ ν›„ ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œ

μ—…λ°μ΄νŠΈ(Update)

propsκ°€ λ°”λ€” λ•Œ, stateκ°€ λ°”λ€” λ•Œ, λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§λ  λ•Œ, this.forceUpdate둜 κ°•μ œλ‘œ λ Œλ”λ§μ„ νŠΈλ¦¬κ±°ν•  λ•Œ

  • getDerivedStateFromProps: 마운트 κ³Όμ •μ—μ„œλ„ 호좜됨, μ—…λ°μ΄νŠΈκ°€ μ‹œμž‘ν•˜κΈ° 전에도 호좜, props의 변화에 따라 state값에도 λ³€ν™”λ₯Ό μ£Όκ³  싢을 λ•Œ μ‚¬μš©ν•œλ‹€.
  • shouldComponentUpdate: μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§ ν•΄μ•Ό ν• μ§€ 말아야 ν• μ§€λ₯Ό κ²°μ •ν•˜λŠ” λ©”μ†Œλ“œ
  • render: μ»΄ν¬λ„ŒνŠΈ λ¦¬λ Œλ”λ§
  • getSnapShotBeforeUpdate: μ»΄ν¬λ„ŒνŠΈ λ³€ν™”λ₯Ό DOM에 λ°˜μ˜ν•˜κΈ° λ°”λ‘œ 직전에 ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œ
  • componentDidUpdate: μ»΄ν¬λ„ŒνŠΈμ˜ μ—…λ°μ΄νŠΈ μž‘μ—…μ΄ λλ‚œ ν›„ ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œ

μ–Έλ§ˆμš΄νŠΈ(Unmount)

  • componentWillUnmount: μ»΄ν¬λ„ŒνŠΈκ°€ μ›Ή λΈŒλΌμš°μ €μƒμ—μ„œ 사라지기 전에 ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œ

Hooks

useEffect

  • useEffectλŠ” λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§λ  λ•Œλ§ˆλ‹€ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€μ •ν•  수 μžˆλŠ” Hook이닀. ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ componentDidMount와 componentDidUpdateλ₯Ό ν•©μΉœ ν˜•νƒœλ‘œ 보아도 λ¬΄λ°©ν•˜λ‹€.

useReducer

  • useReducerλŠ” useState보닀 더 λ‹€μ–‘ν•œ μ»΄ν¬λ„ŒνŠΈ 상황에 따라 λ‹€μ–‘ν•œ μƒνƒœλ₯Ό λ‹€λ₯Έ κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈν•΄ μ£Όκ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” Hook이닀.

reducer

  • reducerλŠ” ν˜„μž¬ μƒνƒœ, 그리고 μ—…λ°μ΄νŠΈλ₯Ό μœ„ν•΄ ν•„μš”ν•œ 정보λ₯Ό 담은 μ•‘μ…˜(action) 값을 전달받아 μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.
  • reducer ν•¨μˆ˜μ—μ„œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€ λ•ŒλŠ” λ°˜λ“œμ‹œ λΆˆλ³€μ„±μ„ μ§€μΌœ μ£Όμ–΄μ•Ό ν•œλ‹€.

useMemo

  • useMemoλŠ” ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ λ°œμƒν•˜λŠ” 연산을 μ΅œμ ν™”ν•  수 μžˆλ‹€.
  • λ Œλ”λ§ λ λ•Œ λ§ˆλ‹€ μ‹€ν–‰λ˜λŠ” λ‚­λΉ„λ₯Ό 쀄여쀀닀.(μ΅œμ ν™”)
  • λ Œλ”λ§ κ³Όμ •μ—μ„œ νŠΉμ • 값이 λ°”λ€Œμ—ˆμ„ λ•Œλ§Œ 연산을 μ‹€ν–‰ν•˜κ³ , μ›ν•˜λŠ” 값이 λ°”λ€Œμ§€ μ•Šμ•˜λ‹€λ©΄ 이전에 μ—°μ‚°ν–ˆλ˜ κ²°κ³Όλ₯Ό λ‹€μ‹œ μ΄μš©ν•˜λŠ” 방식이닀.

useCallback

  • useCallback은 useMemo와 λΉ„μŠ·ν•˜λ‹€(μ΅œμ ν™”μ— μ‚¬μš©)
  • useCallback을 μ‚¬μš©ν•˜λ©΄ λ§Œλ“€μ–΄ λ’€λ˜ ν•¨μˆ˜λ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλ‹€

비동기 μž‘μ—…

Promise

  • promiseλŠ” callback μ§€μ˜₯같은 μ½”λ“œκ°€ ν˜•μ„±λ˜μ§€ μ•Šκ²Œ ν•˜λŠ” λ°©μ•ˆμž…λ‹ˆλ‹€.
  • μ—¬λŸ¬ μž‘μ—…μ„ 연달아 μ²˜λ¦¬ν•œλ‹€κ³  ν•΄μ„œ ν•¨μˆ˜λ₯Ό μ—¬λŸ¬ 번 κ°μ‹ΈλŠ” 것이 μ•„λ‹ˆλΌ.
    .then을 μ‚¬μš©ν•΄μ„œ κ·Έ λ‹€μŒ μž‘μ—…μ„ μ„€μ •ν•˜κΈ° λ•Œλ¬Έμ— callbackμ§€μ˜₯이 ν˜•μ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

async/await

  • Promiseλ₯Ό μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄ μ£ΌλŠ” 문법이닀.
  • ν•¨μˆ˜μ˜ μ•žλΆ€λΆ„μ— async ν‚€μ›Œλ“œλ₯Ό μΆ”κ°€ν•˜κ³ , ν•΄λ‹Ή ν•¨μˆ˜λ‚΄λΆ€μ—μ„œ Promise의 μ•žλΆ€λΆ„μ— await ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ Promiseκ°€ λλ‚ λ•ŒκΉŒμ§€ 기닀리고, κ²°κ³Ό 값을 νŠΉμ • λ³€μˆ˜μ— 담을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν™”μ‚΄ν‘œ ν•¨μˆ˜μ— async/await은 async () => {} ν˜•μ‹μœΌλ‘œ 적용

0개의 λŒ“κΈ€