Redux: `combineReducers` рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдп рдХрд╛ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИ

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

рдирдпрд╛ CombReducers doc рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрд╕ рд░рд╛рдЬреНрдп рдХреА рдкрд╛рд░реНрдЯреА рдХреЗ рд░реВрдк рдореЗрдВ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реИред

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐

рдХрдиреНрд╡реЗрдВрд╢рди рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдЪ рдирд╣реАрдВ рд╣реИред

рд╣рдореЗрдВ рд╢рд╛рдпрдж рдбреЙрдХреНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ import * рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдкреАрдЖрдИ рдХрд╛ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИ рдЬрдм рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ ES6 export рдФрд░ import * as рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореИрдВ рдЕрднреА рднреА рдкрд░реЗрд╢рд╛рди рд╣реВрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рдЙрдк-рднрд╛рдЧ рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХреНрдпрд╛ рдореБрдЭреЗ рдХреИрдорд▓рдХреЗрд╕ рдЙрдирдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреБрдЫ рдФрд░? рд░рд╛рдЬреНрдп = {рдорд╛рд▓рд┐рдХ: {рдирд╛рдо: 'рдЬреЙрди'}} тЖТ рдирд┐рд░реНрдпрд╛рдд рд╕рдорд╛рд░реЛрд╣ рд╕реНрд╡рд╛рдореА рдирд╛рдо (рд░рд╛рдЬреНрдп = [], рдХреНрд░рд┐рдпрд╛)?

рдирд╣реАрдВ :-)ред рдпрд╣ рдПрдХ рдЬрд╛рджреБрдИ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИред combineReducers(object) рдХрдИ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд░рд╛рдЬреНрдп рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЗрд╕рдХреЗ рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрддрд░ рдЧрд╣рд░рд╛ рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ "рдмрд┐рд▓реНрдб рдЯреНрд░реА рдореИрдЬрд┐рдХ" рдирд╣реАрдВ рд╣реИред рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ:

// Function names don't matter!
function processA(state, action) { ... }
function doSomethingWithB(state, action) { ... }

function reducer(state = {}, action) {
  return {
    // Because you call them!
    a: processA(state.a, action),
    b: doSomethingWithB(state.b, action)
  };
}

// Not using combineReducers
let store = createStore(reducer);

рдпрджрд┐ рдЖрдк combineReducers рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рд╡реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдЬрдм рддрдХ рдЖрдк рд╕реНрд╡рдпрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ :

// Function names don't matter!
function processA(state, action) { ... }
function doSomethingWithB(state, action) { ... }

/*
function reducer(state = {}, action) {
  return {
    a: processA(state.a, action),
    b: doSomethingWithB(state.b, action)
  };
}
*/
let reducer = combineReducers({
  a: processA,
  b: doSomethingWithB
});

let store = createStore(reducer);

рдРрд╕рд╛ рдЖрдк рдХрдИ рдмрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ:

// Function names don't matter!
function processSomePartOfA(state, action) { ... }
function doSomethingWithOtherPartOfA(state, action) { ... }

function processA(state, action) {
  return {
    // Because you call them!
    somePart: processSomePartOfA(state.somePart),
    otherPart: doSomethingWithOtherPartOfA(state.otherPart)
  }
}
function doSomethingWithB(state, action) { ... }

function reducer(state = {}, action) {
  return {
    // Because you call them!
    a: processA(state.a, action),
    b: doSomethingWithB(state.b, action)
  };
}

// Not using the helper
let store = createStore(reducer);

рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рд╕рд┐рд░реНрдл рдлрдВрдХреНрд╢рди рдХреЙрд▓рд┐рдВрдЧ рдлрдВрдХреНрд╢рди рд╣реИред рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ "рдЧрд╣рд░реА рдЪреАрдЬреЗрдВ"ред
рдФрд░ рдЖрдк combineReducers рднреА рдХрдИ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

// Function names don't matter!
function processSomePartOfA(state, action) { ... }
function doSomethingWithOtherPartOfA(state, action) { ... }

/*
function processA(state, action) {
  return {
    somePart: processSomePartOfA(state.somePart),
    otherPart: doSomethingWithOtherPartOfA(state.otherPart)
  }
}
*/
let processA = combineReducers({
  somePart: processSomePartOfA,
  otherPart: doSomethingWithOtherPartOfA
});

function processA(state, action) { ... }
function doSomethingWithB(state, action) { ... }

/*
function reducer(state = {}, action) {
  return {
    a: processA(state.a, action),
    b: doSomethingWithB(state.b, action)
  };
}
*/
let reducer = combineReducers({
  a: processA,
  b: doSomethingWithB
});

let store = createStore(reducer);

рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдЬрдм рдЖрдк export + import * as рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╡рд╕реНрддреБ рдХреЛ "рдкреНрд░рд╛рдкреНрдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк combineReducers рдХреНрдпреЛрдВрдХрд┐ _рдпрд╣ рд╕рд┐рд░реНрдл import * рд╣реИ_ ! рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдЙрдирдХреА рдирд┐рд░реНрдпрд╛рдд рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╕реНрддреБ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореЗрд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЧрд▓рддреА рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред

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

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдереЛрдбрд╝реЗ рд╣реА рдХрд╣рддрд╛ рд╣реИ:

рдкрд░рд┐рдгрд╛рдореА рд░реЗрдбреНрдпреВрд╕рд░ рдкреНрд░рддреНрдпреЗрдХ рдмрдЪреНрдЪреЗ рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╣рддрд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рд╣реА рд░рд╛рдЬреНрдп рд╡рд╕реНрддреБ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рд░рд┐рдбреНрдпреВрд╕рд░ рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдореБрдЦ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдЗрд╕ рд╡рд╛рдХреНрдп рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ #399 рд╕реЗ рдмрджрд▓рд╛рд╡ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗ?

рдореИрдВ рдХрдо рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рдареАрдХ рдмрд╛рдж рдЗрд╕ рд╕рдореНрдореЗрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдиреЛрдЯ:

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ todos рдФрд░ counter -- рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЬреИрд╕реЗ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд░рд╛рдЬреНрдп рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВред

рд░рд╛рдЬреНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Redux _convention_ рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ - рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рдареАрдХ рдЙрд╕реА рд░рд╛рдЬреНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ #399 рдЕрдЪреНрдЫрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ _Flux рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ_ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИред рдореИрдВ рдирд╛рд╡ рдХреЗ рдирдП рд╕рд┐рд░реЗ рд╕реЗ Redux рдЖ рд░рд╣рд╛ рд╣реВрдБред рдореЗрд░реЗ рдкрд╛рда рдХрд╛ рдХреБрдЫ рд░реВрдк рдЖрдХрд╕реНрдорд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░ рд╣реИ: рдХрдиреНрд╡реЗрдВрд╢рди рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ ред рдпрд╣ createRedux , createDispatcher рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп API рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдПрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореИрдВ рдЕрднреА рднреА рдкрд░реЗрд╢рд╛рди рд╣реВрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рдЙрдк-рднрд╛рдЧ рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХреНрдпрд╛ рдореБрдЭреЗ рдХреИрдорд▓рдХреЗрд╕ рдЙрдирдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреБрдЫ рдФрд░? state={owner: {name: 'John'} } тЖТ export function ownerName(state = [], action) ?

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реИред

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐

рдХрдиреНрд╡реЗрдВрд╢рди рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдЪ рдирд╣реАрдВ рд╣реИред

рд╣рдореЗрдВ рд╢рд╛рдпрдж рдбреЙрдХреНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ import * рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдкреАрдЖрдИ рдХрд╛ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИ рдЬрдм рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ ES6 export рдФрд░ import * as рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореИрдВ рдЕрднреА рднреА рдкрд░реЗрд╢рд╛рди рд╣реВрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рдЙрдк-рднрд╛рдЧ рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХреНрдпрд╛ рдореБрдЭреЗ рдХреИрдорд▓рдХреЗрд╕ рдЙрдирдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреБрдЫ рдФрд░? рд░рд╛рдЬреНрдп = {рдорд╛рд▓рд┐рдХ: {рдирд╛рдо: 'рдЬреЙрди'}} тЖТ рдирд┐рд░реНрдпрд╛рдд рд╕рдорд╛рд░реЛрд╣ рд╕реНрд╡рд╛рдореА рдирд╛рдо (рд░рд╛рдЬреНрдп = [], рдХреНрд░рд┐рдпрд╛)?

рдирд╣реАрдВ :-)ред рдпрд╣ рдПрдХ рдЬрд╛рджреБрдИ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИред combineReducers(object) рдХрдИ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд░рд╛рдЬреНрдп рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЗрд╕рдХреЗ рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрддрд░ рдЧрд╣рд░рд╛ рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ "рдмрд┐рд▓реНрдб рдЯреНрд░реА рдореИрдЬрд┐рдХ" рдирд╣реАрдВ рд╣реИред рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ:

// Function names don't matter!
function processA(state, action) { ... }
function doSomethingWithB(state, action) { ... }

function reducer(state = {}, action) {
  return {
    // Because you call them!
    a: processA(state.a, action),
    b: doSomethingWithB(state.b, action)
  };
}

// Not using combineReducers
let store = createStore(reducer);

рдпрджрд┐ рдЖрдк combineReducers рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рд╡реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдЬрдм рддрдХ рдЖрдк рд╕реНрд╡рдпрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ :

// Function names don't matter!
function processA(state, action) { ... }
function doSomethingWithB(state, action) { ... }

/*
function reducer(state = {}, action) {
  return {
    a: processA(state.a, action),
    b: doSomethingWithB(state.b, action)
  };
}
*/
let reducer = combineReducers({
  a: processA,
  b: doSomethingWithB
});

let store = createStore(reducer);

рдРрд╕рд╛ рдЖрдк рдХрдИ рдмрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ:

// Function names don't matter!
function processSomePartOfA(state, action) { ... }
function doSomethingWithOtherPartOfA(state, action) { ... }

function processA(state, action) {
  return {
    // Because you call them!
    somePart: processSomePartOfA(state.somePart),
    otherPart: doSomethingWithOtherPartOfA(state.otherPart)
  }
}
function doSomethingWithB(state, action) { ... }

function reducer(state = {}, action) {
  return {
    // Because you call them!
    a: processA(state.a, action),
    b: doSomethingWithB(state.b, action)
  };
}

// Not using the helper
let store = createStore(reducer);

рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рд╕рд┐рд░реНрдл рдлрдВрдХреНрд╢рди рдХреЙрд▓рд┐рдВрдЧ рдлрдВрдХреНрд╢рди рд╣реИред рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ "рдЧрд╣рд░реА рдЪреАрдЬреЗрдВ"ред
рдФрд░ рдЖрдк combineReducers рднреА рдХрдИ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

// Function names don't matter!
function processSomePartOfA(state, action) { ... }
function doSomethingWithOtherPartOfA(state, action) { ... }

/*
function processA(state, action) {
  return {
    somePart: processSomePartOfA(state.somePart),
    otherPart: doSomethingWithOtherPartOfA(state.otherPart)
  }
}
*/
let processA = combineReducers({
  somePart: processSomePartOfA,
  otherPart: doSomethingWithOtherPartOfA
});

function processA(state, action) { ... }
function doSomethingWithB(state, action) { ... }

/*
function reducer(state = {}, action) {
  return {
    a: processA(state.a, action),
    b: doSomethingWithB(state.b, action)
  };
}
*/
let reducer = combineReducers({
  a: processA,
  b: doSomethingWithB
});

let store = createStore(reducer);

рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдЬрдм рдЖрдк export + import * as рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╡рд╕реНрддреБ рдХреЛ "рдкреНрд░рд╛рдкреНрдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк combineReducers рдХреНрдпреЛрдВрдХрд┐ _рдпрд╣ рд╕рд┐рд░реНрдл import * рд╣реИ_ ! рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдЙрдирдХреА рдирд┐рд░реНрдпрд╛рдд рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╕реНрддреБ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореЗрд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЧрд▓рддреА рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореЗрд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЧрд▓рддреА рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкрд╛рдардХ рдИрдПрд╕ 6 рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдпрд╣ рдПрдХ рдЦрд┐рдВрдЪрд╛рд╡ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣реА рдмрд╛рдд рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реАрдЦрдиреЗ рдФрд░ рдЗрди рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддреА рд╣реИред рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рдЬрдм рдкрдврд╝рдирд╛ рдкрд╛рдардХ рдХреЗ рдЬреНрдЮрд╛рди рдФрд░ рдЕрдиреБрднрд╡ рд╕реЗ рдЖрдЧреЗ рд╣реИред

рд╣рдо combineReducers рдХреЛ reducers/index рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ: https://github.com/gaearon/redux/pull/473

рдмрдВрдж рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред
рдФрд░ рд╣рдо рдЕрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ import * рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдирд┐рд╣рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреЛрдбрд┐рдВрдЧ рдЕрднреНрдпрд╛рд╕ рд╣реИ?

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдб рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ CombReducer рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрджрдо рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред

рдЬрдм рдЖрдк рдПрдХ рдврд╛рдВрдЪрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "рдЬрд╛рджреВ" рднрд╛рд╡рдирд╛ред

рдкреАрдПрд╕: рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реЗрдбрдХреНрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдЖрдпрд╛ рд╣реВрдВ: "рдпрд╣ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИ"

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

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

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

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

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

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

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