Redux: рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдХрдИ reducer рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдЧрдардмрдВрдзрди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдЕрдЧре░ 2015  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: reduxjs/redux

рдирдорд╕реНрддреЗред

рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдПрдХ reducer рдлрд╝рд╛рдЗрд▓ рд╣реИ:

export function something1 (state={}, action) {
  switch (action.type) {
    ...
  }
}

export function something2 (state={}, action) {
  switch (action.type) {
    ...
  }
}

рдХрдИ рдЕрдиреНрдп рдирд┐рд░реНрдпрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде 3 рдЕрдиреНрдп рд╕рдорд╛рди reducer рдлрд╛рдЗрд▓реЗрдВ рднреА рд╣реИрдВред

рдЬрдмрдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ 1 рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХреЙрдореНрдмрд┐рдиреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - CombReducers

рдлрд┐рд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдИ рдЖрдпрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

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);

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдпрд╛рдд _are_ рд╡рд╕реНрддреБред рдЬреИрд╕реЗ рдЖрдк рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд▓рдп рдХрд░рддреЗ рд╣реИрдВ:

import * as reducers1 from './reducer1';
import * as reducers2 from './reducer2';

const allReducers = Object.assign({}, reducers1, reducers2);
const reducer = combineReducers(allReducers);

рдРрд╕реЗ рддреЗрдЬрд╝ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж; рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдХрд┐ ES6 рдиреЗ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рд╛ рд╣реИред : +1:
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрдердХ рд╣реЛрдЧрд╛ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЕрдиреНрдп рдХреА рддрд▓рд╛рд╢ рд╣реЛрдЧреА?

@TheDeveloperXYZ

рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ import * рдирд┐рдХрд╛рд▓рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╡реЗрдирд┐рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИред Https://github.com/rackt/redux/pull/590 рджреЗрдЦреЗрдВ

рдРрд╕реЗ рддреЗрдЬрд╝ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж; рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдХрд┐ ES6 рдиреЗ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓реЙрдбрд╢ рдХреЗ assign рдЬреИрд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЙрдбрд╢ рдпрд╛ рдХреБрдЫ рд╕рдорд╛рди рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд▓рдп рд╣реИ; рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рджреВред :-)

@gaearon import * рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореИрдВ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдмрдпрд╛рди рдФрд░ рдкреНрд░рд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░ рдХреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ combineReducers рдХреЛ рдПрдХрд╛рдзрд┐рдХ рдХреЙрд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдЕрдЧрд░ рдореИрдВ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ combineReducers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдореИрдВ рдПрдХ рдФрд░ reducer рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ routerReducer react-router-redux ) рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдореБрдЦреНрдп рдореБрджреНрджрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкреНрд░рд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░ ( ...reducers, routing: routerReducer ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреЗрд╡рд▓ ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдордВрдЪрди рдХрд┐рдпрд╛ред

рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдЬрд┐рд╕реЗ рдореИрдВ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ (... рд░рд┐рдбреНрдпреВрд╕рд░, рд░реВрдЯрд┐рдВрдЧ: рд░рд╛рдЙрдЯрд░рд░реЗрдбрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреЗрд╡рд▓ ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдордВрдЪрди рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рд╕рд┐рд░реНрдл Object.assign({}, reducers, { routing: routerReducer }) рд▓рд┐рдП рдЙрддрд░рддрд╛ рд╣реИред Object.assign() ES6 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрд▓реАрдлрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреБрдо рднреА рд╣рд╛рде рд╕реЗ рдПрдХ рдЙрдЪрд┐рдд рдЕрдиреБрдорд╛рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

let finalReducers = {}
Object.keys(reducers).forEach(key => finalReducers[key] = reducers[key])
finalReducers.routing = routerReducer

const reducer = combineReducer(finalReducers)

рдпрд╣ рд╕рдм рд╕рд┐рд░реНрдл рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ!

рддреЗрдЬреА рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рдкреВрдЫрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Object.assign() рдШреЛрд╖рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдпреЛрдЬрди рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░реЗ рдкрд╛рд╕ rootReducer рд╡рд╕реНрддреБ default: function combination() рдЬрд┐рд╕рдиреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди var reducer = Object.assign({}, rootReducer, { routing: routerReducer }) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрд░реЗ рдЪрд░ reducer рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдкрддреНрддрд┐ routing: function routerReducer() рдирд┐рд╣рд┐рдд
combineReducer(finalReducers) рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдРрдк рдХреЗ рдмрд┐рдирд╛ рд░рд┐рдбреНрдпреВрд╕рд░ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХреБрдЫ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИред

рд▓реЗрдХрд┐рди Object.keys рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж

рдпрджрд┐ рдЖрдк default рдЕрд░реНрде рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдПрдХ рдХреЙрдордирдЬреЗрд╕ require рд╕рд╛рде ES рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЧрд▓рддреА рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП https://medium.com/@kentcdodds/misunderstanding -es6-рдореЙрдбреНрдпреВрд▓-рдЙрдиреНрдирдпрди-рдмреЗрдмрд▓-рдЖрдБрд╕реВ рдФрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди-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 рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдореБрдЦреНрдп reducer, рдФрд░ рдЖрд╕рд╛рди рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП рд▓рд╛рддрд╛ рд╣реВрдБред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ reducer рдЕрд╕рд▓реА рджрд░реНрдж рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jimbolla picture jimbolla  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

parallelthought picture parallelthought  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vslinko picture vslinko  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cloudfroster picture cloudfroster  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rui-ktei picture rui-ktei  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ