redux-tutorial/06_dispatch action

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

Tutorial 06 - dispatch action

μš°λ¦¬λŠ” μ§€κΈˆκΉŒμ§€ λ¦¬λ“€μ„œλ₯Ό λ§Œλ“€μ–΄ λ³΄μ•˜κ³  아직 μ•‘μ…˜μ„ dispatch 해보지 μ•Šμ•˜λ‹€. 이전 νŠœν† λ¦¬μ–Όμ—μ„œ 썼던 같은 λ¦¬λ“€μ„œλ‘œ λͺ‡κ°€μ§€ μ•‘μ…˜λ“€μ„ λ‹€λ£¨μ–΄λ³΄μž.

var userReducer = function (state = {}, action) {
    console.log('userReducer 이 전달받은 μƒνƒœ', state, '와 μ•‘μ…˜', action)

    switch (action.type) {
        case 'SET_NAME':
            return {
                ...state,
                name: action.name
            }
        default:
            return state;
    }
}
var itemsReducer = function (state = [], action) {
    console.log('itemsReducer 이 전달받은 μƒνƒœ', state, '와 μ•‘μ…˜', action)

    switch (action.type) {
        case 'ADD_ITEM':
            return [
                ...state,
                action.item
            ]
        default:
            return state;
    }
}
import { createStore, combineReducers } from 'redux'

var reducer = combineReducers({
    user: userReducer,
    items: itemsReducer
})
var store_0 = createStore(reducer)


console.log("\n", '### It starts here')
console.log('μ΄ˆκΈ°ν™” 이후 store_0 의 μƒνƒœ:', store_0.getState())
// Output:
// μ΄ˆκΈ°ν™” 이후 store_0 의 μƒνƒœ: { user: {}, items: [] }

첫번째 μ•‘μ…˜μ„ dispatch ν•΄λ³΄μžβ€¦ 01_simple-action-creator.md μ—μ„œ λ§ν–ˆλ˜λŒ€λ‘œ β€œaction을 dispatch ν•˜κΈ°μœ„ν•΄μ„œλŠ”β€¦ dispatch ν•¨μˆ˜κ°€ ν•„μš”ν•˜λ‹€.”

μš°λ¦¬κ°€ μ°Ύκ³ μžˆλŠ” dispatch ν•¨μˆ˜λŠ” Reduxκ°€ μ œκ³΅ν•˜κ³  λͺ¨λ“  reducer듀에 μ•‘μ…˜μ„ 보낼거닀! dispatch ν•¨μˆ˜λŠ” Redux μΈμŠ€ν„΄νŠΈ 속성 β€œdispatchβ€λ‘œ μ ‘κ·Όκ°€λŠ₯ν•˜λ‹€.

μ•‘μ…˜μ„ dispatch ν•˜κΈ°μœ„ν•΄μ„ , κ°„λ‹¨νžˆ ν˜ΈμΆœν•˜λ©΄λœλ‹€

store_0.dispatch({
    type: 'AN_ACTION'
})
// Output:
// userReducer 이 전달받은 μƒνƒœ {} 와 μ•‘μ…˜ { type: 'AN_ACTION' }
// itemsReducer 이 전달받은 μƒνƒœ [] 와 μ•‘μ…˜ { type: 'AN_ACTION' }

각 λ¦¬λ“€μ„œκ°€ 효율적으둜 ν˜Έμ΄λ˜μ—ˆμ§€λ§Œ 이 μ•‘μ…˜ νƒ€μž…μ„ λ°›λŠ” λ¦¬λ“€μ„œλŠ” μ—†κΈ°λ•Œλ¬Έμ— μƒνƒœλŠ” λ³€κ²½λ˜μ§€ μ•Šμ•˜λ‹€.

console.log('AN_ACTION μ•‘μ…˜ 이후 store_0 μƒνƒœ:', store_0.getState())
// Output: AN_ACTION μ•‘μ…˜ 이후 store_0 μƒνƒœ: { user: {}, items: [] }

그런데 잠깐! μ•‘μ…˜μ„ 보내기 μœ„ν•΄ action creatorλ₯Ό μ‚¬μš©ν•œλ‹€κ³  ν–ˆμ—ˆλ‹€. actionCreatorλ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ 그것은 μ•‘μ…˜μ„ λ¦¬ν„΄ν•˜λŠ”κ²Œ 전뢀이기 λ•Œλ¬Έμ— 이 μ˜ˆμ œμ— λ‹€λ₯Έ 무언가λ₯Ό 더 해주진λͺ»ν•œλ‹€. κ·Έλ ‡μ§€λ§Œ λ‚˜μ€‘μ—μžˆμ„ 어렀움을 λœκΈ°μœ„ν•΄ flux 이둠에 λ”°λ₯Έ μ˜¬λ°”λ₯Έ λ°©λ²•μœΌλ‘œ ν•΄λ³΄μž. 그리고 이 action creatorλ₯Ό λ§Œλ“€μ–΄μ„œ μ‹€μ œλ‘œ μ•‘μ…˜μ„ λ³΄λ‚΄λ³΄μž.

var setNameActionCreator = function (name) {
    return {
        type: 'SET_NAME',
        name: name
    }
}

store_0.dispatch(setNameActionCreator('bob'))
// Output:
// userReducer 이 전달받은 μƒνƒœ {} 와 μ•‘μ…˜ { type: 'SET_NAME', name: 'bob' }
// itemsReducer 이 전달받은 μƒνƒœ [] 와 μ•‘μ…˜ { type: 'SET_NAME', name: 'bob' }

console.log('SET_NAME μ•‘μ…˜ 이후 store_0 μƒνƒœ:', store_0.getState())
// Output:
// SET_NAME μ•‘μ…˜ 이후 store_0 μƒνƒœ: { user: { name: 'bob' }, items: [] }

μš°λ¦¬λŠ” 첫번째 μ•‘μ…˜μ„ 닀루어 λ³΄μ•˜κ³  우리 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœλ₯Ό λ³€κ²½μ‹œμΌ°λ‹€.

그치만 이건 λ„ˆλ¬΄ κ°„λ‹¨ν•˜κ³  μ‹€μ œ μ‚¬μš©μ˜ˆμ œλ‘œ μΆ©λΆ„ν•˜μ§€ μ•Šλ‹€. 예λ₯Ό λ“€μ–΄, μ•‘μ…˜μ„ dispatch ν•˜κΈ° 전에 action creator μ—μ„œ 비동기 μž‘μ—…μ„ ν•œλ‹€λ©΄? 이것을 λ‹€μŒ νŠœν† λ¦¬μ–Όμ—μ„œ μ–˜κΈ°ν•΄ λ³Ό 것이닀.

μ—¬κΈ°κΉŒμ§€κ°€ 우리 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 흐름이닀. ActionCreator -> Action -> dispatcher -> reducer

λ‹€μŒ: 07_dispatch-async-action-1.md