redux-tutorial/03_simple reducer

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

Tutorial 03 - simple reducer

์–ด๋–ป๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•  Redux ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š”์ง€ ๋ฐฐ์› ๋‹ค. ์ด์ œ ์ด ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋“ค์— ์ง‘์ค‘ํ•ด๋ณด์ž.

reducer VS store:

์•Œ์•„์ฐจ๋ ธ์„ ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์ฒ˜์Œ ์†Œ๊ฐœํ•  ๋•Œ ๋ณด์—ฌ์ค€ flux ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ Redux์˜ โ€œReducerโ€๊ฐ€ ์•„๋‹Œ โ€œStoreโ€ ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด ๋‘๊ฐœ๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฑธ๊นŒ? ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ๋‹ค: Store๋Š” Reducer ์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ flux์—์„œ Store๋Š” ์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ์ง€๋งŒ Redux์—์„œ๋Š” ๋งค๋ฒˆ reduce๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์ƒํƒœ๊ฐ€ ๊ฐฑ์‹ ๋˜์–ด์•ผํ•  ๋•Œ๋งˆ๋‹ค reduce์— ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ, Redux์˜ ์ƒํƒœ๋Š” ์ƒํƒœ๊ฐ€ ์—†๋Š” store(stateless store)๊ฐ€ ๋˜๊ณ  ์ด๊ฑธ reducer ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ด์ „์— ๋งํ•œ๋Œ€๋กœ, Redux ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ reducer ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค.

import { createStore } from 'redux'

var store_0 = createStore(() => {})

โ€ฆ ์ด๋ ‡๊ฒŒ Redux๋Š” ์•ก์…˜์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ์—๋Œ€ํ•ด ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋œ๋‹ค. reducer๋ฅผ createStore์— ์ „๋‹ฌํ•˜๋Š” ๊ฒŒ 01_simple-action-creator.md ์—์„œ ๋งํ–ˆ์—ˆ๋˜ Redux์—์„œ ์•ก์…˜ โ€œํ•ธ๋“ค๋Ÿฌโ€๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

reducer ์— ๋กœ๊ทธ๋ฅผ ์‹ฌ์–ด๋ณด์ž.

var reducer = function (...args) {
    console.log('Reducer was called with args', args)
}

var store_1 = createStore(reducer)

// Output: Reducer was called with args [ undefined, { type: '@@redux/INIT' } ]

์–ด๋–ค๊ฐ€? ์šฐ๋ฆฌ๊ฐ€ ์•„๋ฌด๋Ÿฐ ์•ก์…˜์„ dispatchํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ๋„ reducer๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋‹คโ€ฆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค, ์‚ฌ์‹ค Redux๋Š” ์ดˆ๊ธฐ ์•ก์…˜์„ dispatch ํ•œ๋‹ค. ({ type: '@@redux/INIT' })

ํ˜ธ์ถœ๋˜๊ฒŒ๋˜๋ฉด, reducer๋Š” ์ด๋Ÿฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๊ฒŒ๋˜๋Š”๋ฐ: (state, action) ์ด๊ฑด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐํ™”์—์„œ ๋งค์šฐ ๋…ผ๋ฆฌ์ ์ด๋‹ค. ์ƒํƒœ๋Š” ์•„์ง ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— โ€œundefinedโ€ ์ด๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ Redux๊ฐ€ โ€œinitโ€ ์•ก์…˜์„ ๋ณด๋‚ด๊ณ  ๋‚˜์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋Š” ๋ฌด์—‡์ด๋ ๊นŒ?

๋‹ค์Œ: 04_get-state.md