์๋ ํ์ธ์.
๋ค์๊ณผ ๊ฐ์ ๊ฐ์๊ธฐ ํ์ผ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
export function something1 (state={}, action) {
switch (action.type) {
...
}
}
export function something2 (state={}, action) {
switch (action.type) {
...
}
}
์ฌ๋ฌ ๋ด๋ณด๋ด๊ธฐ๊ฐ์๋ 3 ๊ฐ์ ๋ค๋ฅธ ์ ์ฌํ ๊ฐ์๊ธฐ ํ์ผ๋ ์์ต๋๋ค.
๋ฌธ์๋ ๋จ์ง ํ๋์ ํ์ผ๊ณผ ์ฌ๋ฌ ๊ฐ์ ๋ด๋ณด๋ด๊ธฐ๊ฐ์๋ CombineReducers๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ ๋ฅผ ์ ๊ณตํ์ง๋ง -combineReducers |
๊ทธ๋ ๋ค๋ฉด ์ด์ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ ธ ์ค๊ธฐ์์ ํด๋น ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ฌ์ฉํฉ๋๊น?
import * as reducers1 from './reducer1';
import * as reducers2 from './reducer2';
...
const reducer = combineReducers(???); // What argument to write. How to turn imports to object?
๊ฐ์ฌ!
_are_ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋ ๊ฐ์ฒด๋ฅผ ๋ณํฉํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
import * as reducers1 from './reducer1';
import * as reducers2 from './reducer2';
const allReducers = Object.assign({}, reducers1, reducers2);
const reducer = combineReducers(allReducers);
๋น ๋ฅธ ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ES6๊ฐ ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ๊ฒ์ ์์ง ๋ชปํ์ต๋๋ค. : +1 :
redux ๋ฌธ์์ ๊ทธ๋ฐ ๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ถ๊ตฌํ๋ค๋ฉด ๊ฐ์น๊ฐ ์์์ง ๊ถ๊ธํฉ๋๋ค.
์๋ ํ์ธ์.
์ฐ๋ฆฌ๋ ์ค์ ๋ก ๋ฌธ์์์ import *
๋ฅผ ์ ๊ฑฐํ๊ณ ๋ง์ ์ฌ๋๋ค์ ํผ๋์ค๋ฝ๊ฒํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋๋ผ ์์ ๋ง ๋ณด์ฌ์ค ๊ฒ์
๋๋ค. https://github.com/rackt/redux/pull/590์ ์ฐธ์กฐ
๋น ๋ฅธ ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ES6๊ฐ ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ๊ฒ์ ์์ง ๋ชปํ์ต๋๋ค.
ํด๋ฆฌ ํ์ ํฌํจํ์ง ์๊ณ ์ด๋ฏธ Lodash ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด Lodash์ assign
์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ์ฒด๋ฅผ ๋ณํฉํ๋ ๊ฒ๋ฟ์
๋๋ค. ๋ง๋ฒ์ด ์๋๋๋ค. :-)
@gaearon import *
์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ํ ์ฒ์ ์ฌ์ฉํ ๋ ๋น ๊ตฌ์กฐํ ๋ฌธ๊ณผ ์คํ๋ ๋ ์ฐ์ฐ์๊ฐ ์ฃผ์์ ํฌํจ๋์ด ์๋์ง ์ธ๊ธํ๋ ๊ฒ๋ ์ข์ต๋๋ค.
combineReducers
๋ค์ค ํตํ๊ฐ ๊ฐ๋ฅํฉ๋๊น?
๋ณ๋์ ํ์ผ์์ combineReducers
๋ฅผ ์ฌ์ฉํ๊ณ ๊ฐ์๊ธฐ๋ฅผ ํ๋ ๋ ์ฒจ๋ถํ๊ณ ์ถ๋ค๋ฉด (์ค์ ๋ก routerReducer
์์ react-router-redux
) ํ ์ ์์ต๋๊น?
์คํ๋ ๋ ์ฐ์ฐ์ ( ...reducers, routing: routerReducer
)๋ฅผ ์ฌ์ฉํ ์์๋ ์ฃผ์ ๋ฌธ์ ๋ ์คํ
์ด์ง ๋ ES6 ๊ธฐ๋ฅ ๋ง ์์ต๋๋ค.
ํ์ฐ ์ฐ์ฐ์ (... reducers, routing : routerReducer)๋ฅผ ์ฌ์ฉํ ์์๋ ์ฃผ์ ๋ฌธ์ ๋ ์คํ ์ด์ง ๋ ES6 ๊ธฐ๋ฅ ๋ง ์์ต๋๋ค.
๊ทธ๊ฒ์ ๋จ์ง Object.assign({}, reducers, { routing: routerReducer })
desugars๋ฉ๋๋ค. Object.assign()
๋ ES6์ ์ผ๋ถ์ด๋ฉฐ์ด๋ฅผ ์ํด ํด๋ฆฌ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ผ๋ก ํฉ๋ฆฌ์ ์ธ ๊ทผ์ฌ๊ฐ์ ์์ฑํ ์๋ ์์ต๋๋ค.
let finalReducers = {}
Object.keys(reducers).forEach(key => finalReducers[key] = reducers[key])
finalReducers.routing = routerReducer
const reducer = combineReducer(finalReducers)
๊ทธ๊ฒ์ ๋ชจ๋ ๋จ์ง JavaScript์ ๋๋ค!
๋น ๋ฅธ ์๋ต์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์ด ์ง๋ฌธ์ํ๊ธฐ ์ ์ Object.assign()
์ ์ธ์ ์ฌ์ฉํ๋ ค๊ณ ํ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๊ฒฐํฉํ๊ธฐ ์ ์ rootReducer
๊ฐ์ฒด์ default: function combination()
์์ฑ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ต๋๋ค. ๊ทธ๋ฌ๋ var reducer = Object.assign({}, rootReducer, { routing: routerReducer })
์ฌ์ฉ ํ ๋ด ๋ณ์ reducer
์๋ routing: function routerReducer()
์์ฑ
combineReducer(finalReducers)
ํ ๋ผ์ฐํ
์ด ์์ง๋ง ๋ด ์ฑ ๊ฐ์๊ธฐ๊ฐ์๋ ํจ์๋ฅผ ๋ฐํํ์ต๋๋ค.
๋ด๊ฐ ๋ญ๊ฐ ์๋ชปํ ๊ฒ ๊ฐ์ง๋ง ์ ํํ ๋ฌด์์ธ์ง ์ดํดํ ์ ์๋ค.
ํ์ง๋ง Object.keys
์ฌ์ฉ์ ๋ํ ์ ๊ทผ ๋ฐฉ์์ ๋ํด ๋๋จํ ๊ฐ์ฌํฉ๋๋ค.
default
์ด ํ์๋๋ฉด CommonJS require
๋ก ES ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ ์์์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ค์์
๋๋ค. ์ด์ ๋ํ ์ ๋ณด๋ https://medium.com/@kentcdodds/misunderstanding -es6-modules-upgrading-babel-tears-and-a-solution-ad2d5ab93ce0๋ฅผ ํ์ธํ์ญ์์ค.
์ด๊ฒ์ ์ฌํ ํ ํ๋ก์ ํธ๋ฅผ ๊ฒ์ ํ ์ ์๋ค๋ฉด ๊ธฐ๊บผ์ด ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
๋๋ ์ด๊ฒ์ ์ด๋ ๊ฒํ๋ค :
mainReducer.js
import {combineReducers} from 'redux'
import {routerReducer} from 'react-router-redux'
// list of reducers
import registerReducer from 'registerReducer'
import homeReducer from 'homeReducer'
import aboutReducer from 'aboutReducer'
import contactUsReducer from 'contactUsReducer'
export const mapStateToProps = (state) => {
return {
register: state.register,
home: state.home,
about: state.about,
contact:state.contact
}
}
export default combineReducers({
routing: routerReducer,
register: registerReducer,
home: homeReducer,
about: aboutReducer,
contact: contactUsReducer
})
๊ฑฐ๊ธฐ์ mapStateToProps ํจ์๊ฐ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ๋ค๋ฅธ ํ์ผ์ ๋ฃ์ ๋ mapStateToProps ํจ์์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ข ์ข ์์ ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋์ ๋๋ ๊ทธ๊ฒ์ ๋์ ์ฃผ์ ๊ฐ์๊ธฐ๋ก ๊ฐ์ ธ์ค๊ณ ์ฝ๊ฒ ์ ๊ทผ ํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ํ์ผ์ ์ด์ด ์กฐ์น๋ฅผ ์ทจํ๊ณ ๊ฐ์๊ธฐ๋ ์ ๋ง ๊ณ ํต ์ค๋ฝ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
_are_ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋ ๊ฐ์ฒด๋ฅผ ๋ณํฉํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.