Skip to content

Latest commit

ย 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

##STUDY

React

React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

> workspace ํด๋”๋กœ ์ด๋™
  > npm install -g yarn
  > npm -v
     npm : ์ด ์‹œ์Šคํ…œ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ...
  > get-ExecutionPolicy
     Restricted : default์„ค์ •๊ฐ’์œผ๋กœ, ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Œ.
  > set-ExecutionPolicy RemoteSigned
  > npm install -g yarn
  > yarn -v
  > yarn global add create-react-app
        windows ๋ณด์•ˆ์—์„œ ๋žœ์„ฌ์›จ์–ด ์„ค์ • ๋„๊ธฐ
  > yarn create react-app app
  > cd app
  > git clone์„ ๋ฐ›์•˜๋‹ค๋ฉด yarn add react-scripts
  > yarn start

๋ฆฌ์•กํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด

  ํŽ˜์ด์ง€์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์ˆ˜์ •๋˜๊ณ , ์‚ฌ๋ผ์ง€๋Š” ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  React์—์„œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, 9๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด
  ์ž‘์—… ํ๋ฆ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  will ๋ฌธ๊ตฌ๊ฐ€ ํฌํ•จ๋œ ๋ฉ”์†Œ๋“œ๋Š” ์ž‘์—… ์ „์„ ์˜๋ฏธํ•˜๋ฉฐ,
  Did ๋ฌธ๊ตฌ๊ฐ€ ํฌํ•จ๋œ ๋ฉ”์†Œ๋“œ๋Š” ์ž‘์—… ํ›„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  ๋งˆ์šดํŠธ -> ์—…๋ฐ์ดํŠธ -> ์–ธ๋งˆ์šดํŠธ

๋งˆ์šดํŠธ(mount) ํŽ˜์ด์ง€์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ.

  constructor: ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰
     โ†“
  getDerivedStateFromProps: props๋ฅผ state์— ๋„ฃ์„ ๋•Œ ์‚ฌ์šฉ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ์™€ ์—…๋ฐ์ดํŠธ ๋  ๋•Œ ์‹คํ–‰
     โ†“
  render: ์ค€๋น„ํ•ด๋†“์€ UI๋ฅผ ๋žœ๋”๋งํ•  ๋•Œ ์‚ฌ์šฉ
     โ†“
  componentDidMount: ํŽ˜์ด์ง€์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚œ ํ›„ ์‹คํ–‰

์—…๋ฐ์ดํŠธ(update) 1. props ๊ฐ’์— ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ 2. state ๊ฐ’์— ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ 3. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋žœ๋”๋ง๋  ๋•Œ 4. forceUpdate()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ•์ œ๋กœ ๋žœ๋”๋ง์„ ํ•  ๋•Œ

  1. 2. 3. 4. ์— ๋”ฐ๋ฅธ ๋ณ€ํ™”
     โ†“
  getDerivedStateFromProps: props์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ state ๊ฐ’์—๋„ ๋ณ€ํ™”๋ฅผ ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
     โ†“
  shouldComponentUpdate: true ๋ฆฌํ„ด ์‹œ ๋‹ค์Œ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ ๊ณ„์† ์‹คํ–‰, false ๋ฆฌํ„ด ์‹œ ์ž‘์—… ์ค‘์ง€
     โ†“
  render: ์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋žœ๋”๋ง
     โ†“
  getSnapshotBeforeUpdate: ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ ์ง์ „์— ์‹คํ–‰
     โ†“
  componentDidUpdate: ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ ํ›„ ์‹คํ–‰

์–ธ๋งˆ์šดํŠธ(unmount) ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŽ˜์ด์ง€์—์„œ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ.

  componentWillUnmount: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŽ˜์ด์ง€์—์„œ ์‚ฌ๋ผ์ง€๊ธฐ ์ง์ „์— ์‹คํ–‰

โ–ถ ์ฐธ์กฐ ํˆฌ๋ช…์„ฑ

  ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ์ž…๋ ฅ๋ฐ›์€ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐ์— ํˆฌ๋ช…ํ•˜๋‹ค๊ณ  ํ•˜๋ฉฐ ์ˆœ์ˆ˜ ํ•จ์ˆ˜(pure function)๋ผ๊ณ  ํ•œ๋‹ค.
  ํ•˜์ง€๋งŒ ์ž…๋ ฅ์„ ๋ฐ›์•˜์„ ๋•Œ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋กœ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ํ•จ์ˆ˜์— ์˜ํ–ฅ์„ ๋ผ์น˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐ์— ๋ถˆํˆฌ๋ช…ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.
  ์ด๋ ‡๊ฒŒ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ํ•จ์ˆ˜์—์„œ Side-Effect๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  ๋ฆฌ์•กํŠธ๋Š” ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ ์œ ์ง€ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ข‹์•„์ง€๊ณ 
  ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ ๋ฐ ํ…Œ์ŠคํŠธ๋„ ์ข‹์•„์ง„๋‹ค.

  const Component({data}) {
     return <p>data</p>;
  }

โ–ถ Side-Effect

  ํ•จ์ˆ˜ ๋‚ด ํŠน์ • ๋™์ž‘์ด ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์˜ํ–ฅ์„ ๋ผ์ณ, ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ํ–‰์œ„.
  ์ด๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋ฉด ์ˆœ์ˆ˜ ํ•จ์ˆ˜ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  1. setTimeout, setInterval
     ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ํ•จ์ˆ˜ ์ข…๋ฃŒ ํ›„ ์‹œ์ ์—์„œ ์–ด๋–ค ์ž‘์—…์„ ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ

  2. ์„œ๋ฒ„ ํ†ต์‹ 
     ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ–ˆ์„ ๋•Œ ์ดํ›„ ๋˜๋Š” ์ง์ „์— ์–ด๋–ค ์ž‘์—…์„ ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ

โ–ถ useEffect

  Side-Effect๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ตœ๋Œ€ํ•œ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ•จ์ˆ˜
  useEffect()๋Š” ๋žœ๋”๋ง์ด ๋ชจ๋‘ ๋๋‚œ ๋‹ค์Œ์— ์‹คํ–‰๋œ๋‹ค.

  ๋žœ๋”๋ง ๋  ๋•Œ ๋งˆ๋‹ค ์‹คํ–‰
  useEffect(() => {})
  
  ์ตœ์ดˆ ๋žœ๋”๋ง(๋งˆ์šดํŠธ)ํ•  ๋•Œ๋งŒ ์‹คํ–‰
  useEffect(() => {}, [])   

  ํŠน์ • ์ปดํฌ๋„ŒํŠธ ๋ณ€๊ฒฝ ์‹œ ์‹คํ–‰
  useEffect(() => {}, [state])

โ–ถ Redux

  ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, ๋ฆฌ์•กํŠธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  JS์ฝ”๋“œ์—์„œ ์ž‘๋™๋œ๋‹ค.
  Flux ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ,
  ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋‹ค.

โ–ถ Flux ํŒจํ„ด

  Action์ด ๋ฐœ์ƒํ•˜๋ฉด Dispatcher๋ฅผ ํ†ตํ•ด Store์— ๋ณ€๊ฒฝ๋œ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
  View -> Action -> Dispatcher -> Store
    โ†‘_______________________________โ†“

Redux ํŒจํ„ด

  Flux์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•˜๋‚˜์˜ App์— ํ•˜๋‚˜์˜ Store๊ฐ€ ์กด์žฌํ•˜๊ณ , Flux ํŒจํ„ด์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  Components -> Action -> Reducer -> Store -> State
      โ†‘_________________________________________โ†“

  1. ์ปดํฌ๋„ŒํŠธ(Components)
     Action์ด ๋ฐœ์ƒํ•œ๋‹ค.
     ๋‚˜์ค‘์— ๋ณ€๊ฒฝ๋œ state๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ Store๊ฐ€ subscribe(๊ตฌ๋…)์„ ํ•ด๋†“๋Š”๋‹ค.

  2. ์•ก์…˜(Action)
     ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์‹ ํ˜ธ.
     dispatch()๋กœ ๊ฐ์‹ธ์„œ Reducer๋กœ ์ „๋‹ฌ๋œ๋‹ค.
     Action์—๋Š” type(๊ตฌ๋ถ„์ )์„ ํ•„์ˆ˜๋กœ ๋‹ด๊ณ  ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ(ํŒŒ๋ผ๋ฏธํ„ฐ)๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฐ™์ด ๋‹ด๊ธด๋‹ค.
     ์ดํ›„ ๋ฆฌ๋“€์„œ์— ์ „๋‹ฌ๋˜๊ธฐ ์ „์— Store์—์„œ state๋ฅผ ๊ฐ€์ ธ์™€ Action๊ณผ ํ•จ๊ป˜ ๋ฆฌ๋“€์„œ์— ์ „๋‹ฌ๋œ๋‹ค.

  3. ๋ฆฌ๋“€์„œ(Reducer)
     ์ „๋‹ฌ๋ฐ›์€ Action์—์„œ type์„ ๊ฐ€์ ธ์˜จ ๋’ค ๊ตฌ๋ถ„ํ•˜์—ฌ state๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋“ฑ
     ์•Œ๋งž๋Š” ๋กœ์ง(ํ•จ์ˆ˜)์ด ์‹คํ–‰๋˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ด๋‹ค.

  4. ์Šคํ† ์–ด(Store)
     state๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ์ด๋ฉฐ,
     subscribe ํ•ด๋†“์€ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ€์„œ ๋ณ€๊ฒฝ๋œ state ๊ฐ’์„ ์ „๋‹ฌํ•ด์ค€๋‹ค.

Redux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด, ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” state๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ ,
  ์ด๋ฅผ props๋กœ ๊ณ„์† ์ „๋‹ฌํ•˜๋‹ค๋ณด๋ฉด ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ์ „๋‹ฌ์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” props์˜ ๊ฐœ์ˆ˜๊ฐ€
  ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋˜ํ•œ props ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋ชจ๋“  props ์ด๋ฆ„์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ
  ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ์ฝ”๋“œ ๊ด€๋ฆฌ๊ฐ€ ์ข‹์ง€ ์•Š๋‹ค.
  ๋”ฐ๋ผ์„œ Redux ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ํ•˜๋‚˜์˜ store์— ๋ชจ๋“  state์™€ ๋กœ์ง์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
  ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋กœ์ง์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ถ„์—…์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
  ํ๋ฆ„์„ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ๋‹ค.
  ํ•˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์ผ ๊ฒฝ์šฐ ๊ตณ์ด Redux ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์œผ๋ฉฐ,
  ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์˜คํžˆ๋ ค ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,
  ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” state๋‚˜ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” state์ผ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

Redux ์›์น™

  1. 1๊ฐœ์˜ App์— 1๊ฐœ์˜ Store๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
     ์—ฌ๋Ÿฌ ๊ฐœ์˜ Stroe๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ค์›Œ์ง„๋‹ค.
     ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ reducer๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ Store๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฉฐ, ์กฐํ•ฉํ•  ๋•Œ์—๋Š”
     combineReducers()๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•˜๋‚˜์˜ store๋กœ ๋ฌถ์–ด์ค€๋‹ค.

  2. state๋Š” ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
     ๊ธฐ์กด์˜ state๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด์ฃผ์–ด์•ผ ๋ณ€๊ฒฝ์ด ๊ฐ์ง€๋œ๋‹ค.
     ๋˜ํ•œ ๋ผ์ดํ”„์‚ฌ์ดํด์—์„œ ์ด์ „ state ๊ฐ’์„ ๊ธฐ์–ต์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋„ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜์—ฌ
     ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ณ , ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ์ข‹์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด์„œ ๊นŠ์€ ํƒ์ƒ‰์ด ์•„๋‹Œ
     ์–•์€ ํƒ์ƒ‰์œผ๋กœ ๊ฒ€์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  3. ๋ฆฌ๋“€์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
     ์ž…๋ ฅ๊ฐ’๊ณผ ์ถœ๋ ฅ๊ฐ’์ด ๋˜‘๊ฐ™์•„์•ผ ํ•˜๋ฉฐ, state๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ๋ง๊ณ  action์„ ํ†ตํ•ด
     ๋ณ€๊ฒฝํ•œ ์ƒˆ๋กœ์šด state ๊ฐ์ฒด๋ฅผ ๋งŒ๋“  ๋’ค ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
     date, random(), fetch() ๋“ฑ๊ณผ ๊ฐ™์ด ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋‚˜ํƒ€๋‚˜๋Š” ์ž‘์—…์€
     ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜ ๋ฐ–์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
     ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ์ถ”ํ›„ ๋ฏธ๋“ค์›จ์–ด์—์„œ ์ž‘์—…ํ•˜๊ฒŒ ๋œ๋‹ค.

Middleware

  Redux์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅ์‹œ์ผœ์„œ Action์„ ์ „๋‹ฌ๋ฐ›์•„ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  Reducer๋กœ ๊ฐ€๊ธฐ ์ „์— API ํ˜ธ์ถœ ๋ฐ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ๋กœ์ง๋“ค์„ ์ฒ˜๋ฆฌํ•œ ๋’ค Reducer๋กœ Action์„ ์ „๋‹ฌํ•˜์—ฌ
  state๊ฐ€ update๋œ๋‹ค. ์ด๋กœ ์ธํ•ด Reducer๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  ์ฆ‰, Reducer๋กœ ๊ฐ€๊ธฐ ์ „์— ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ํ•ด์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ผ๋Š” ๋œป์ด๋‹ค.
           
              API
               โ†•
  Components -> Action -> Middleware -> Reducer -> Store -> State
      โ†‘_______________________________________________________โ†“


  1. ์ปดํฌ๋„ŒํŠธ(Components)
     Action์ด ๋ฐœ์ƒํ•œ๋‹ค.
     ๋‚˜์ค‘์— ๋ณ€๊ฒฝ๋œ state๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ Store๊ฐ€ subscribe(๊ตฌ๋…)์„ ํ•ด๋†“๋Š”๋‹ค.

  2. ์•ก์…˜(Action)
     ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์‹ ํ˜ธ.
     dispatch()๋กœ ๊ฐ์‹ธ์„œ Reducer๋กœ ์ „๋‹ฌ๋œ๋‹ค.
     Action์—๋Š” type(๊ตฌ๋ถ„์ )์„ ํ•„์ˆ˜๋กœ ๋‹ด๊ณ  ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ(ํŒŒ๋ผ๋ฏธํ„ฐ)๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฐ™์ด ๋‹ด๊ธด๋‹ค.
     ์ดํ›„ ๋ฆฌ๋“€์„œ์— ์ „๋‹ฌ๋˜๊ธฐ ์ „์— Store์—์„œ state๋ฅผ ๊ฐ€์ ธ์™€ Action๊ณผ ํ•จ๊ป˜ middleware๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.

  3. ๋ฏธ๋“ค์›จ์–ด(Middleware)
     Action๊ณผ state๋ฅผ ์ „๋‹ฌ๋ฐ›์•„์„œ Side Effect ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
     ์ดํ›„ Action๊ณผ state๋ฅผ ๋ฆฌ๋“€์„œ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

  4. ๋ฆฌ๋“€์„œ(Reducer)
     ์ „๋‹ฌ๋ฐ›์€ Action์—์„œ type์„ ๊ฐ€์ ธ์˜จ ๋’ค ๊ตฌ๋ถ„ํ•˜์—ฌ
     state๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋“ฑ ์•Œ๋งž๋Š” ๋กœ์ง(ํ•จ์ˆ˜)์ด ์‹คํ–‰๋œ๋‹ค.

  5. ์Šคํ† ์–ด(Store)
     state๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ์ด๋ฉฐ,
     subscribe ํ•ด๋†“์€ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ€์„œ ๋ณ€๊ฒฝ๋œ state ๊ฐ’์„ ์ „๋‹ฌํ•ด์ค€๋‹ค.

์ •๋ฆฌ

  Component์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ
  ํ•ด๋‹น ์•ก์…˜์ด ๋ฐœ์ƒํ•˜๊ณ 
  ์•ก์…˜์„ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ๊ฐ€๋กœ์ฑ„์„œ
  type์ด "๊ฐ€์ ธ์™€ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ!"์ผ ๋•Œ
  type์— ๋งž๋Š” saga ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ ,
  ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ์™€ type์„ reducer์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ๊ทธ ๋‹ค์Œ ์–ด๋–ค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ง€ ์•Œ๊ฒŒ ํ•˜๊ณ ,
  store์˜ state์— ๋ฏธ๋“ค์›จ์–ด์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ ,
  ๊ตฌ๋…ํ•œ Component์— state๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค.

Routing

  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ URL์„ ๋ถ„์„ํ•˜์—ฌ ์•Œ๋งž๋Š” ํŽ˜์ด์ง€๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ.
  ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ •๋ฆฌ

  ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŽ˜์ด์ง€๋กœ ์ด๋ฃจ์–ด์ง„ ํ™ˆํŽ˜์ด์ง€์ด๋‹ค.
  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„์—์„œ ๋žœ๋”๋งํ•œ ๋’ค ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ตํ•ด์ฃผ๋Š”
  SSR(Server Side Rendering) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  ๋งค๋ฒˆ ์ด๋™ ์‹œ ์ƒˆ๋กœ๊ณ ์นจ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊นœ๋นก์ž„ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

MPA(Multiple Page Application)

  Component์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ
  ํ•ด๋‹น ์•ก์…˜์ด ๋ฐœ์ƒํ•˜๊ณ 
  ์•ก์…˜์„ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ๊ฐ€๋กœ์ฑ„์„œ
  type์ด "๊ฐ€์ ธ์™€ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ!"์ผ ๋•Œ
  type์— ๋งž๋Š” saga ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ ,
  ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ์™€ type์„ reducer์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ๊ทธ ๋‹ค์Œ ์–ด๋–ค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ง€ ์•Œ๊ฒŒ ํ•˜๊ณ ,
  store์˜ state์— ๋ฏธ๋“ค์›จ์–ด์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ ,
  ๊ตฌ๋…ํ•œ Component์— state๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค.

SPA(Single Page Application)

  ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋กœ ์ด๋ฃจ์–ด์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜๋ฏธํ•˜๋ฉฐ,
  ํŽ˜์ด์ง€๋ฅผ ๋”ฑ ํ•œ ๊ฐœ๋งŒ ๋ฐ›์•„์˜จ ๋’ค ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์™€์„œ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ.
  ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ฒฝ๋กœ๊ฐ€ ๋ฐ”๋€Œ๋ฉฐ ํžˆ์Šคํ† ๋ฆฌ์—๋„ ๋‚จ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ๋Š”
  ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.
  ํ•˜์ง€๋งŒ ๊ฒฝ๋กœ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์ฃผ์†Œ์ฐฝ์˜ ๊ฒฝ๋กœ๋งŒ ๋ณ€๊ฒฝ๋˜๊ณ  ๊ธฐ์กด ํŽ˜์ด์ง€๋Š” ์œ ์ง€ํ•˜๋ฉฐ
  ๋‹ค๋ฅธ ํŽ˜์ด์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  CSR(Client Side Rendering) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  ํŽ˜์ด์ง€ ์ด๋™(๋ถˆ๋Ÿฌ์˜ค๊ธฐ)์— ๋Œ€ํ•œ ์†๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋น ๋ฅด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„์–ด ์žˆ๋Š” HTML๋ฌธ์„œ๊ฐ€ ๋จผ์ € ๋„์ฐฉํ•œ ๋’ค
  JS ์—ฐ์‚ฐ ๋ฐ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ์‹œ์ž‘๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋˜๋Š” ๊ฒ€์ƒ‰ ์—”์ง„ ์ ์šฉ์ด ์–ด๋ ต๋‹ค.

SPA ๊ตฌ์กฐ

  1. BrowserRouter๋กœ ๊ฐ์‹ธ๊ธฐ
  2. Routes๋กœ ๊ฐ์‹ธ๊ธฐ
  3. Route๋กœ ๊ฒฝ๋กœ ๋ฐ ์‹คํ–‰ํ•  ์ปดํฌ๋„ŒํŠธ ์„ค์ •ํ•˜๊ธฐ
  4. Link๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋™ํ•˜๊ธฐ

URL ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง

  - URL ํŒŒ๋ผ๋ฏธํ„ฐ(useParams())
     URL์— ๊ฒฝ๋กœ๋กœ ์ž‘์„ฑํ•˜์—ฌ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

  - ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง(useSearchParams())
     URL ๊ฒฝ๋กœ ๋’ค์— ?๋กœ ์‹œ์ž‘ํ•˜์—ฌ key=value ํ˜•์‹์œผ๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜
     ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ &๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

CSR,SSR

CSR(Client Side Rendering)

  • ์ฃผ์ฒด : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ Œ๋”๋ง์„ํ•œ๋‹ค โ†’ ํด๋ผ์ด์–ธํŠธ = ๋ธŒ๋ผ์šฐ์ €
  • ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„์— ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์Œ(๋ชจ๋“  ํŽ˜์ด์ง€)
  • ๋นˆํ™”๋ฉด โ†’ ๊ฐ€์ ธ์˜จ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง
  • ์ฒ˜์Œ ๋ Œ๋”๋ง ์‹œ์ ์— ๋นˆํ™”๋ฉด์€ ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”(SEO)์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ
  • ํŽ˜์ด์ง€์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋ถ€ ์‚ฌ์ „์— ๋ถˆ๋Ÿฌ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ํ˜„์žฌ URL์— ๋งž๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋žœ๋”๋ง ์ดํ›„ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค(์ฒ˜์Œ ์š”์ฒญ์‹œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์„œ๋ฒ„์— ๋‹ค๋ฅธ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์‘๋‹ต์ด ๋น ๋ฆ„)
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ† ๋Œ€๋กœ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ์—”๋“œ์™€ ๋ฐ์ดํ„ฐ ํ†ต์‹ ๋„ ์ง์ ‘ ํ•˜๋Š”๋ฐ ์ด ๋•Œ ๋ฐฑ์—”๋“œ์— ์•„์ง ์ „๋‹ฌ๋ฐ›์ง€ ๋ชปํ•œ ์‚ฌ์ง„๊ฐ™์€ ๋ถ€๋ถ„์€ ๋นˆ์ƒํƒœ๋กœ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ๊ทธ๋ ค์ง€๊ณ  ํ†ต์‹ ์ด ์™„๋ฃŒ๋˜๋ฉด ์‚ฌ์ง„์ด ๋ณด์—ฌ์ง€๊ฒŒ ๋˜๋Š”๊ฒƒ์ด๋‹ค.

SSR(Server Side Rendering)

  • ์ฃผ์ฒด : ์„œ๋ฒ„๊ฐ€ ๋ชจ๋“  ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ โ†’ ํด๋ผ์ด์–ธํŠธ ์ฒ˜์Œ ๋ Œ๋”๋ง์‹œ ๋ฐ”๋กœ ํ’€ํ™”๋ฉด
  • ํŽ˜์ด์ง€ ์ด๋™ ์š”์ฒญ ํ•˜๋‚˜๋งˆ๋‹ค ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ๋ฐฑ์—”๋“œ์„œ๋ฒ„๋ž‘ ํ†ต์‹ ํ•ด ํŽ˜์ด์ง€ ํ•˜๋‚˜๋ฅผ ์ƒˆ๋กœ ๊ทธ๋ ค์„œ ๋ณด๋‚ด๋ฏ€๋กœ ์ฒซ ํŽ˜์ด์ง€๋Š” ๋กœ๋”ฉ์ด ๋น ๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ํŽ˜์ด์ง€ ์ด๋™์‹œ ์†๋„๊ฐ€ CSR๋ณด๋‹ค ๋А๋ฆฌ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ๋ชจ๋“  ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด ์ •์ ์ธ ํŽ˜์ด์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ง„๊ฐ™์€๊ฒƒ์ด ๋‚˜์ค‘์— ๋ณด์—ฌ์งˆ ์ผ์ด ์—†๋‹ค. โ†’ ์™„์ „ํ•œ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์€ CSR๋ณด๋‹ค ๋น ๋ฅด๋‹ค.
  • SEO์— ์œ ๋ฆฌํ•˜๋‹ค
  • ์„œ๋ฒ„์—์„œ ๋žœ๋”๋ง์„ ๋ถ€๋‹ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋“œ์›จ์–ด์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์ด ์ƒ๊ธฐ๊ณ  SSR์„ ์œ„ํ•œ ์ฝ”๋“œ์ž‘์„ฑ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ƒ์‚ฐ ๋น„์šฉ์ด ์ฆ๊ฐ€๋œ๋‹ค.

keyPoint

  • ํŽ˜์ด์ง€๋ฅผ ์™„์„ฑํ•˜๋Š” ์ฃผ์ฒด (client, server)
  • ๋นˆํ™”๋ฉด, ์™„์„ฑ๋œ ํ™”๋ฉด
  • ์บ์‹ฑ, ์žฌ์š”์ฒญ

hooks

1.useState()

  • ๋ฆฌ์•กํŠธ์˜ ์ƒํƒœ๊ด€๋ฆฌ ํ•จ์ˆ˜
  • ๋ฆฌ์•กํŠธ๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ๋ณ€๊ฒฝ๊ฐ์ง€๋ฅผ ์ธ์‹ํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋žœ๋”ํ•œ๋‹ค.(๋น„๋™๊ธฐ)
  • ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ตœ์ดˆ ํ•œ๋ฒˆ ์‹คํ–‰ํ›„ ์ƒํƒœ๊ฐ’์„ ์บ์‹ฑํ•ด ๋†“๋Š”๋‹ค.
  • ๋ฐ˜ํ™˜๊ฐ’์€ ๋ฐฐ์—ด์ธ๋ฐ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋Š” ์ „๋‹ฌํ•œ ์ดˆ๊ธฐ๊ฐ’์ด๊ณ  ๋‘๋ฒˆ์งธ ํ•จ์ˆ˜๋Š” ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” setterํ•จ์ˆ˜์ด๋‹ค.
  • setterํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ๊ฐ’ ๋˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜ ๋˜๋Š” ๋‘˜๋‹ค ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฐ’๋งŒ ์ „๋‹ฌํ•˜๋ฉด ์ด์ „์— ์บ์‹ฑํ•ด๋†“์€ ์ƒํƒœ๊ฐ’๊ณผ ๋น„๊ตํ•ด ๋ณ€๊ฒฝ์ด ์žˆ์„๊ฒฝ์šฐ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋žœ๋”ํ•œ๋‹ค. ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์ธ์ž๋กœ ์ตœ๊ทผ ์ƒํƒœ๊ฐ’์„ ๋ฐ›๊ณ  ๋ฆฌํ„ด๊ฐ’์„ ์ตœ๊ทผ ์ƒํƒœ๊ฐ’์œผ๋กœ ์ €์žฅํ•œํ›„ ๋ฆฌ๋žœ๋”ํ•œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋žœ๋”๋˜๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธํ•จ์ˆ˜์™€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜๋“ค์„ ์žฌ์‹คํ–‰ํ•œ๋‹ค.
  • ์ฃผ์˜
    • ํ•œ ์ด๋ฒคํŠธ ๋‚ด์—์„œ ๋‘๊ฐœ์ด์ƒ์˜ setํ•จ์ˆ˜ ์‚ฌ์šฉ์‹œ ๋งˆ์ง€๋ง‰ set๋งŒ ์ž‘์šฉ
      • ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด ์ด์ „๊ฐ’์„ ๋ฐ›๋Š” setํ•จ์ˆ˜๋Š” ๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•จ โ†’ํ•ด๊ฒฐ
    • setํ•จ์ˆ˜๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜๊ธฐ์ „์— ๋ฐ‘์— ๋™๊ธฐ์  ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ด ๋œปํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ
      • useEffect๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์ˆ˜ํ–‰ํ•  ๋กœ์ง ์ˆ˜ํ–‰ โ†’ ํ•ด๊ฒฐ

2.useRef()

  • ๋ฆฌ์•กํŠธ์˜ ์ปดํฌ๋„ŒํŠธ ์†์„ฑ๊ด€๋ฆฌ ํ•จ์ˆ˜
  • ๋ฆฌ์•กํŠธ์˜ ๋ฆฌ๋žœ๋”์— ์˜ํ–ฅ์„ ๋ฐ›์ง€์•Š๋Š” ์†์„ฑ์„ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด ์ €์žฅํ•˜๋”๋ผ๋„ ๋ฆฌ๋žœ๋”ํ•˜์ง€ ์•Š๊ณ  ๋ฆฌ๋žœ๋” ๋˜๋”๋ผ๋„ ๊ฐ’์ด ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ref์†์„ฑ์„ํ†ตํ•ด ๋”์š”์†Œ๋ฅผ ๋‹ด์•„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ „๋‹ฌ๋ฐ›์€ ์ดˆ๊ธฐ๊ฐ’์„ current ์†์„ฑ์— ๋‹ด์•„ ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜

3.useMemo()

  • ๋ฆฌ์•กํŠธ์˜ ํŠน์ • ๊ฐ’ ์บ์‹ฑ ๊ด€๋ฆฌ ํ•จ์ˆ˜
  • ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ๊ฐ€ mount๋  ๋•Œ ์ฒ˜์Œ ์—ฐ์‚ฐ ์ง„ํ–‰ํ•˜๊ณ ๋ฆฌํ„ด๊ฐ’์„ ์บ์‹ฑํ•œ ํ›„ ๋ Œ๋”๋ง๋˜์—ˆ์„๋•Œ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜์ง€์•Š๊ณ  ์บ์‹ฑํ•œ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋“ค๊ณ ์žˆ์Œ
  • ๋‘๋ฒˆ์งธ ์ „๋‹ฌํ•˜๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์žฌ์—ฐ์‚ฐ ์ดํ›„ ๋ฆฌํ„ด๊ฐ’์„ ์žฌํ• ๋‹น
  • ์บ์‹ฑ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฝ”์ŠคํŠธ๋ฅผ ๋จน๊ธฐ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ์—ฐ์‚ฐ ์ฝ”์ŠคํŠธ์™€ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ์ฝ”์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•ด ๊ณ ๋ฏผํ•ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Œ.
  • ๋ณดํ†ต 5์˜ n์ œ๊ณฑ์ •๋„์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ์—ฐ์‚ฐ์ด๋ผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Œ

4.useCallback()

  • ๋ฆฌ์•กํŠธ์˜ ํŠน์ • ํ•จ์ˆ˜ ์บ์‹ฑ ๊ด€๋ฆฌ ํ•จ์ˆ˜
  • ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ๊ฐ€ mount๋  ๋•Œ ์ฒ˜์Œ ์„ ์–ธํ•ด ์บ์‹ฑํ•œ ํ›„ ๋žœ๋”๋ง ๋˜์–ด๋„ ์žฌ ์„ ์–ธํ•˜์ง€ ์•Š์Œ
  • ๋‘๋ฒˆ์งธ ์ „๋‹ฌํ•˜๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ•จ์ˆ˜๋ฅผ ์žฌ์„ ์–ธํ•ด ์žฌ์บ์‹ฑํ•จ
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์บ์‹ฑ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฝ”์ŠคํŠธ๋ฅผ ๋จน๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋ฅผ ์žฌ์„ ์–ธํ•˜๋Š” ์—ฐ์‚ฐ ์ฝ”์ŠคํŠธ์™€ ์บ์‹ฑํ•ด๋†“๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฝ”์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•ด ์‚ฌ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผํ•จ.

5.useEffect()

  • ๋ฆฌ์•กํŠธ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ ์ดํ›„ ๋‹ค๋ฃจ๋Š” ๋ถ€์ˆ˜ํšจ๊ณผ(side Effect)๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜
  • ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์• ์ฃผ๊ธฐ(๋ผ์ดํ”„์‚ฌ์ดํด)๋„ ๊ด€๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜
  • useEffect์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ 
    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ mount(์ƒ์„ฑ)๋˜์—ˆ์„๋•Œ ์‹คํ–‰๋˜๋ฉฐ ์ฃผ๋กœ ์ „๋‹ฌ๋ฐ›์€ props๋กœ์ปฌ ๋ณ€์ˆ˜๋กœ ์ดˆ๊ธฐํ™”, setInterval ์‹คํ–‰ ๋“ฑ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์ž๋งˆ์ž ํ•„์š”ํ•œ ๋กœ์ง์„ ์ˆ˜ํ–‰
    • ์˜์กด์„ฑ ๋ฐฐ์—ด์— ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋กœ์ง์„ ์ˆ˜ํ–‰
    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ unmount(์ œ๊ฑฐ)๋˜์—ˆ์„๋•Œ return๋ฌธ ์‹คํ–‰ ์ฃผ๋กœ clearInterval,๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธ์Šคํ„ด์Šค ์ œ๊ฑฐ๋“ฑ์˜ ๋กœ์ง์„ ์ž‘์„ฑํ•œ๋‹ค.

deps(์˜์กด์„ฑ ๋ฐฐ์—ด)

  • ํŠน์ • hookํ•จ์ˆ˜์˜ ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฐ์—ด
  • ํ•ด๋‹น ํ›…ํ•จ์ˆ˜๊ฐ€ ๋ฆฌ์•กํŠธ ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ฆฌ๋ Œ๋”๋งํ•  ๋•Œ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅ
  • ์˜์กด์„ฑ ๋ฐฐ์—ด์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์ƒํƒœ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ํ•ด๋‹น ํ›…ํ•จ์ˆ˜๊ฐ€ ์žฌ์‹คํ–‰
  • ๋ Œ๋”๋ง์— ๊ด€๋ จ๋œ ๊ฐ’์ด ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ๊ฐ’์ด๋ฉฐ ์ด ๊ฐ’๋งŒ deps์— ๋“ค์–ด๊ฐ€๋Š”๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฐ’์ด๋‹ค.

6.customHooks

  • ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์„ ์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ›…ํ•จ์ˆ˜
  • useState,ย useEffect,ย useReducer,ย useCallbackย ๋“ฑ Hooks ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์ฃผ๊ณ , ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฐ’๋“ค์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“ฌ

7.react์˜ state

  • react์—์„œ state๊ฐ€ ๋ฐ”๋€Œ๋Š” ์กฐ๊ฑด์€ state์˜ ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ณ€ํ•ด์•ผ ํ•˜๋Š”๋ฐ state๊ฐ€ ๊ฐ์ฒด์ผ ๊ฒฝ์šฐ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๊ฐ’๋งŒ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด react์ž์ฒด ๋‚ด์—์„œ deep equal์„ ํ†ตํ•ด ํ‚ค๊ฐ’์— ๋ฐธ๋ฅ˜๊ฐ’ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋น„๊ตํ›„ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋ฉด state๊ฐ€ ๋ณ€๊ฒฝ๋œ๊ฑธ๋กœ ๊ฐ„์ฃผํ•ด ๋ฆฌ๋žœ๋”๋ง์„ ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๋Š” ๋ถˆํ•„์š”ํ•œ ์„ฑ๋Šฅ์ €ํ•˜๋ฅผ ๋ถˆ์–ด์ผ์œผํ‚ค๊ณ  ๋˜ํ•œ ํ•˜๋‚˜์˜ state๋Š” ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ์„ ๊ฐ€๋Šฅ์„œ์ž‰ ์žˆ๋Š”๋ฐ ์ฐธ์กฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ํ˜„์žฌ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด state์— ๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ์ฃผ๊ธฐ ์œ„ํ•˜์—ฌ ํ•ญ์ƒ setter์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ๊ฐ์ฒด์— ๊ฐ’์„ ๋‹ด์•„ ๋ฆฌํ„ดํ•˜๊ฒŒํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

(back to top)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages