redux-tutorial/02_about state and meet redux

πŸ‘‰ https://github.com/happypoulp/redux-tutorial/wiki

Tutorial 02 - about state and meet redux

가끔 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ•‘μ…˜μ€ 무언가 λ°œμƒν–ˆλ‹€λŠ” 것을 μ•Œλ €μ£Όμ§€ μ•Šκ³  데이터 갱신이 ν•„μš”ν•˜λ‹€λŠ”κ²ƒλ„ 말해주지 μ•ŠλŠ”λ‹€.

이건 우리 μ•±μ—μ„œ κ½€ 큰 λ¬Έμ œλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ– μžˆλŠ” λ™μ•ˆ κ·Έ λ°μ΄ν„°λŠ” 어디에 λ³΄κ΄€ν•΄μ•Όν• κΉŒ? μ–΄λ–»κ²Œ 데이터λ₯Ό μˆ˜μ •ν• κΉŒ? μ–΄λ–»κ²Œ κ·Έ 변경사항듀을 λ‚΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 곳곳에 μ „νŒŒμ‹œν‚¬κΉŒ?

κ·Έλž˜μ„œ λ¦¬λ•μŠ€κ°€ λ‚˜μ˜€κ²Œ λ˜μ—ˆλ‹€.

λ¦¬λ•μŠ€λŠ” β€œμžλ°”μŠ€ν¬λ¦½νŠΈ μ•±μ—μ„œ μ˜ˆκ²¬ν•  수 μžˆλŠ” μƒνƒœ μ»¨ν…Œμ΄λ„ˆβ€ 이닀.

μœ„ λ¬Έμ œλ“€μ„ λ‹€μ‹œ μ‚΄νŽ΄λ³΄κ³  Redux의 μš©μ–΄λ‘œ μ–˜κΈ°ν•΄λ³΄μž. (flux μš©μ–΄λ„ 살짝 있음):

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ– μžˆλŠ” λ™μ•ˆ κ·Έ λ°μ΄ν„°λŠ” 어디에 λ³΄κ΄€ν•΄μ•Όν• κΉŒ?

  • μ›ν•˜λŠ” 곳에 μ €μž₯ν•œλ‹€ (μžλ°”μŠ€ν¬λ¦½νŠΈ object, array, Immutable structure, …).
  • λ°μ΄ν„°λŠ” μƒνƒœλΌκ³  λΆˆλ €μ§„λ‹€. 이건 우리 μ•± λ‚΄μ˜ 데이터듀이 μ‹œκ°„μ΄ 지남에 따라 μ§„ν™”ν•˜κΈ° λ•Œλ¬Έμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœλΌκ³  μ–˜κΈ°ν•΄λ„ λ¬΄λ°©ν•˜λ‹€.
  • 그런데 이걸 Redux에 λ„˜κΈΈκ±°λ‹€ (ReduxλŠ” β€œμƒνƒœ μ»¨ν…Œμ΄λ„ˆβ€ 라고 ν–ˆμ—ˆλ‹€).

μ–΄λ–»κ²Œ 데이터λ₯Ό μˆ˜μ •ν• κΉŒ?

  • λ¦¬λ“€μ„œλ₯Ό μ΄μš©ν•œλ‹€ (fluxμ—μ„œλŠ” β€œstores” 라고 λΆˆλ €μ§„λ‹€)
  • ν•˜λ‚˜μ˜ λ¦¬λ“€μ„œλŠ” μ•‘μ…˜λ“€μ„ κ΅¬λ…ν•œλ‹€.
  • ν•˜λ‚˜μ˜ λ¦¬λ“€μ„œλŠ” μ‰½κ²Œλ§ν•΄ μ§€κΈˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœμ™€ μ•‘μ…˜μ„ λ°›κ³  μƒˆλ‘­κ²Œ μˆ˜μ •λœ μƒνƒœλ₯Ό(μ•„λ‹ˆλ©΄ λ°›μ€λŒ€λ‘œ) λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜λ‹€.

μ–΄λ–»κ²Œ κ·Έ 변경사항듀을 λ‚΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 곳곳에 μ „νŒŒμ‹œν‚¬κΉŒ?

  • 변경사항듀을 κ΅¬λ…ν•˜κ³  μžˆλŠ” κ΅¬λ…μžλ₯Ό ν†΅ν•΄μ„œ.

Redux λŠ” 이 λͺ¨λ“ κ²Œ ν•˜λ‚˜λ‘œ λ¬Άμ—¬μžˆλ‹€. μš”μ•½ν•˜μžλ©΄, ReduxλŠ”:

  1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλ₯Ό μ €μž₯ν•˜κ³ 
  2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλ₯Ό μˆ˜μ •ν•  수 μžˆλ„λ‘ μ•‘μ…˜μ„ λ³΄λ‚΄λŠ” λ¦¬λ“€μ„œλΌλŠ” 것과
  3. μƒνƒœ 갱신을 κ΅¬λ…ν•˜λŠ” μž₯치λ₯Ό μ œκ³΅ν•œλ‹€.

Redux μΈμŠ€ν„΄μŠ€λŠ” μƒνƒœλΌκ³  λΆˆλ €μ§€κ³  μ΄λ ‡κ²Œ μƒμ„±ν•œλ‹€.

import { createStore } from 'redux'
var store = createStore()

μœ„ μ½”λ“œλ₯Ό 싀행해보면, 이런 μ—λŸ¬κ°€ λ°œμƒν•˜λŠ”λ°:

Error: Invariant Violation: Expected the reducer to be a function.

createStore에 μƒνƒœλ₯Ό reduceν•  ν•¨μˆ˜λ₯Ό μ „λ‹¬ν•΄μ•Όν•œλ‹€.

λ‹€μ‹œ 해보면

import { createStore } from 'redux'
var store = createStore(() => {})

이제 잘 λ™μž‘ν•œλ‹€β€¦

λ‹€μŒ: 03_simple-reducer.md