Redux: рдореИрдВ createStore рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╕реНрдЯреЗрдЯ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдХреЙрдореНрдмрд┐рдиреЗрд╢рди рд░реЗрдбреНрдпреВрд╕рд░ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдореЗрд░рд╛ рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд▓реМрдЯрд╛ рд╣реИ

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

рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ:

const todoBlog = combineReducers({
  blogTypeVisibilityFilter,
  blogs
})

BlogTypeVisibilityFilter рдореЗрдВ:

const blogTypeVisibilityFilter = (state, action)=>{
  switch (action.type) {
    case 'BLOG_TYPE_VISIBILITY_FILTER':
      return action.filter
    default:
      return state
  }
}

export default blogTypeVisibilityFilter;

рдмреНрд▓реЙрдЧ рдореЗрдВ:

const blogs = (state,action)=>{
  return state
}

рдХреНрд░рд┐рдПрдЯрд╕реНрдЯреЛрд░ рдореЗрдВ:

const initialState = {
  blogTypeVisibilityFilter:'SHOW_ALL_BLOG',
  blogs:data.data,
}

const store = createStore(reducer,initialState,window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());

рдФрд░ рдлрд┐рд░ рдпрд╣ рдЧрд▓рдд рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

рд░реЗрдбреНрдпреВрд╕рд░ "blogTypeVisibilityFilter" рдкреНрд░рд╛рд░рдВрдн рдХреЗ рджреМрд░рд╛рди рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд▓реМрдЯрд╛ред рдпрджрд┐ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд░рд╛рдЬреНрдп рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рди рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рдмрдЬрд╛рдп рдЕрд╢рдХреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдмрд╕ рдмрджрд▓рддрд╛ рд╣реВрдБ

const todoBlog = combineReducers({
  blogTypeVisibilityFilter,
  blogs
})

рдкреНрд░рддрд┐

const todoBlog = (state={},action)=>{
  return{
    blogTypeVisibilityFilter:blogTypeVisibilityFilter(state.blogTypeVisibilityFilter,action),
    blogs:blogs(state.blogs,action)
  }
}

рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдЪрд▓рддрд╛ рд╣реИ

рдореИрдВ рдЧрдардмрдВрдзрди рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реВрдВ рдпрд╣ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?

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

рдпрд╣ рдПрдХ рдмрдЧ рдЯреНрд░реИрдХрд░ рд╣реИ, рд╕рдкреЛрд░реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдирд╣реАрдВред рдЙрдкрдпреЛрдЧ рд╕рдВрдмрдВрдзреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдпрд╛ рд░рд┐рдПрдХреНрдЯрд┐рдлреНрд▓рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдзрдиреНрдпрд╡рд╛рдж!

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

рдпрд╣ рдПрдХ рдмрдЧ рдЯреНрд░реИрдХрд░ рд╣реИ, рд╕рдкреЛрд░реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдирд╣реАрдВред рдЙрдкрдпреЛрдЧ рд╕рдВрдмрдВрдзреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдпрд╛ рд░рд┐рдПрдХреНрдЯрд┐рдлреНрд▓рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдХрджрдо:

  1. рдЫрд╡рд┐ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдЯреЛрд░ рдЖрдХрд╛рд░ { foo, bar } ред
  2. simpleReducer = state => state рдЬреИрд╕реЗ рд╕рд░рд▓ рд░реЗрдбреНрдпреВрд╕рд░ рдмрдирд╛рдПрдВред
  3. reducers = combineReducers({ foo: simpleReducer, bar: simpleReducer }) рдореЗрдВ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдорд┐рд▓рд╛рдПрдВред
  4. createState(reducers, { foo: Obj1, bar: Obj2 }) рд╕рд╛рде рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рдмрдирд╛рдПрдВред
  5. рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ Reducer "foo" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state

рдХрд╛рд░рдг assertReducerShape рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп рднрд╛рдЧреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рддрд┐ рд╡рд╛рд▓реЗ рд╕рднреА рд░реЗрдбреНрдпреВрд╕рд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ ред рдореЗрд░рд╛ рд╕рд░рд▓ рд░реЗрдбреНрдпреВрд╕рд░ рдЕрдкрдирд╛ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдХреНрдпреЛрдВ Obj1 рд╕реЗ createState рдХреЙрд▓ рдХреЛ рдлреВ-рдкрд╛рд░реНрдЯ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?

@timdorr рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

рд╕рдорд╛рдзрд╛рди simpleReducer = (state = null) => state ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рд╣реИ?

combineReducers , рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд▓рд╛рдЗрд╕ рд░реЗрдбреНрдпреВрд╕рд░ рд╕реЗ рд░рд╛рдЬреНрдп рдХреЗ рдЕрдкрдиреЗ рд╕реНрд▓рд╛рдЗрд╕ "рд╕реНрд╡рд╛рдорд┐рддреНрд╡" рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝рд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рдирд╛, рдФрд░ рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ combineReducers рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред

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

@Vittly : combineReducers рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ createStore рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред createStore рдмрд╕ рдЬреЛ рднреА рд░реВрдЯ рд░реЗрдбреНрдпреВрд╕рд░ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдиреЗ рджрд┐рдпрд╛ рд╣реИ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдмрдЪрд╛рддрд╛ рд╣реИред combineReducers рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ рдореЗрдВ рдЦрд░реАрдж рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрдпреБрдХреНрдд рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдк #191 рдФрд░ #1189 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ combineReducers рдХреЛ рдХреНрдпреЛрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдХреНрдпрд╛ рд░рд╛рдп рд╣реИред

рддреЛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ (рд╢реАрдШреНрд░ рд╣реА) "рдпрджрд┐ рдЖрдк рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░ рдЯреНрд░реА рдХреЛ рднреА рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдХреБрдЫ рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕реНрдЯреЛрд░ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ createStore 2nd arg рдореЗрдВ рдкреНрд░реАрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдЯреЛрд░ рдЯреНрд░реА рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП assertReducerShape"ред рдареАрдХ рд╣реИ, рд░реЗрдлрд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рдпрд╣рд╛рдВ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ред
рддреЛ рдореИрдВ createStore рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди reduct.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди assertReducerShape рд░реЗрдбрдХреНрд╕ undefined рд╕реНрдерд┐рддрд┐ рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред

рдЖрдИрдПрдордПрдЪрдУ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИред

@JoseFMP : рдореИрдВ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЧрд╛рд░рдВрдЯреА

рдЬрд╝рд░реВрд░ред рдореИрдВрдиреЗ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рджрд╛рдпрд░ рдХрд┐рдпрд╛:
https://stackoverflow.com/questions/53018766/why-redux-reducer-getting-undefined-instead-of-the-initial-state

рдорд╛рдорд▓рд╛ рдХрд╛рдлреА рд╕реАрдзрд╛ рд╣реИред рддреЛ рдЕрдЧрд░ рдореИрдВ рд╕реНрдЯреЛрд░ рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ ... рд░реЗрдбрдХреНрд╕ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди undefined рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп undefined рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдмрдХрд╡рд╛рд╕ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред
рддреЛ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ:

import { combineReducers, createStore } from 'redux';

const configReducer = (config: any, action: any): any =>{
        return config;
}

const customData = (customData: any, action: any): any =>  {
        return customData;
}
const reducers = combineReducers({config: configReducer, customData: customDataReducer})

const defaultConfig = "cool config";
const data = "yieaah some data";

var initialState = {config: defaultConfig, customData: data};
const store = createStore(reducers, initialState) // at this point redux calls all the reducers with 'undefined' state. Why?

@ рдЬреЛрд╕рдПрдлрдПрдордкреА :

рдЖрд╣, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдХрд┐ combineReducers() рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

combineReducers рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╕рднреА "рд╕реНрд▓рд╛рдЗрд╕ рд░реЗрдбреНрдпреВрд╕рд░" рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ _if_ рдЖрдкрдХреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ state === undefined рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, combineReducers() рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ (undefined, {type : "SOME_RANDOMIZED_ACTION_TYPE"}) рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдорд╛рди рджреЗрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдЖрдкрдХреЗ рд░реЗрдбреНрдпреВрд╕рд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ state рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рд╡реЗ _return_ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдВрдЧреЗред рддреЛ, combineReducers() рдЖрдкрдХреЛ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ рддреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╡рд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рдмрд╕ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ configReducer = (config = {}, action) , рдЖрджрд┐ рдЬреИрд╕реЗ рдХреБрдЫ рдореЗрдВ рдмрджрд▓реЗрдВ, рдФрд░ рдЗрд╕рд╕реЗ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред

рдлрд┐рд░ рд╕реЗ, рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП: рдпрд╣ _not_ рдПрдХ рдмрдЧ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рддреНрдпрд╛рдкрди рд╣реИред

рд╣реЗрдЬ @markerikson рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

1) рдирд╣реАрдВ, рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ combineReducers ред рдЕрдЧрд░ рдореИрдВ combineReducers рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рдФрд░ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд░реВрдЯ рд░реЗрдбреНрдпреВрд╕рд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛, рддреЛ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИред

2) рдпрд╣рд╛рдВ рдЕрд╕рдВрдЧрддрддрд╛ рдпрд╣ рд╣реИ рдХрд┐, Redux рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдЬреНрдЮрд╛рдд рдпрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдП рдорд╛рди рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛рдиреА ... рдЕрдЧрд░ рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ undefined рдпрд╣ рддреЛ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП undefined ред рд▓реЗрдХрд┐рди рдПрдХ рдЕрдиреНрдп рдирд┐рдпрдо рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдХрднреА рднреА undefined рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпреЗ рджреЛ рдирд┐рдпрдо, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд░реЗрдбрдХреНрд╕ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╣реИрдВ, рдЕрд╕рдВрдЧрдд рд╣реИрдВред рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрддред

@JoseFMP : рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдпрджрд┐ рдЖрдк рдПрдХ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВред (рд╕рд╛рде рд╣реА, рдХреГрдкрдпрд╛ рдЙрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдЕрд╕рдВрдЧрдд рд▓рдЧрддреЗ рд╣реИрдВред) рддрдм рддрдХ, рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕ рдЧрд▓рддрдлрд╣рдореА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ Redux рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @markerikson ред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
image

рддреЛ рдЕрдЧрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреНрдпрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рд╕реНрдЯреЛрд░ рдмрдирд╛рддреЗ рд╕рдордп, Redux рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдХреНрд░рд┐рдпрд╛ рдФрд░ рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ undefined рднреЗрдЬрдХрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдкрд┐рдЫрд▓рд╛ рд░рд╛рдЬреНрдп undefined , рддреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ undefined рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд░реЗрдбреНрдпреВрд╕рд░ undefined рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рд░реЗрдбрдХреНрд╕ рдРрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХреЗ рд▓рд┐рдП:

import { createStore } from 'redux';

const configReducer = (config: any, action: any): any =>{
        return config;
}

const customReducer = (customData: any, action: any): any =>  {
        return customData;
}

const reducers = (currentState: IAppState, action: any): IAppState => {

    var appStateToEvaluate: any;
    if (currentState) { //needs to add this to pass the `undefined` check of redux
        appStateToEvaluate = currentState;
    }
    else{
        //why redux is doing this ?!
        appStateToEvaluate = {}
    }
    const newState: IAppState = {
        cvConfig: configReducer(appStateToEvaluate.config, action),
        personalData: customReducer(appStateToEvaluate.customData, action)
    }

    return newState;
}

const defaultConfig = "cool config";
const data = "yieaah some data";

var initialState = {config: defaultConfig, customData: data};
const store = createStore(reducers, initialState) // at this point redux calls all the reducers with 'undefined' state. Why?

@JoseFMP : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдЦреЛ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд░реЗрдбреНрдпреВрд╕рд░ рдлрд╝рдВрдХреНрд╢рди рдиреЗ _already_ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ state undefined , ES6 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:

function todoApp(state = initialState, action) {

рддреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╕рд▓рд╛рд╣ рд╕рд╣реА рд╣реИ - рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ _рдЪрд╛рд╣рд┐рдП_ рд╣рдореЗрд╢рд╛ рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рддрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, _рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рдорд▓рд╛ рдкрд╣рд▓реЗ рд╣реА рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ_ред

@markerikson
рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдмрд╕ рдЧрд╛рдпрдм рд╣реИред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдкрд╕реА рдХрд╛ рдорд╛рдорд▓рд╛ рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рдЕрддрдГ рдЖрдкрдиреЗ рдЬреЛ рд╡рд╛рдХреНрдп рдЗрдЯреИрд▓рд┐рдХ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╕рд╣реА рд╣реИред рд╡рд╣ рд╣реИ рд╡рд╣ред рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЧрд╛рдпрдм рд╣реИред рдпрд╛ рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред

рдЕрдм, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░/рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдпрд╣ undefined рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИред рдЕрдм рдпрд╣ рдХреЛрдИ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдореЗрд░реА рд░рд╛рдп рд╣реИ: рдпрджрд┐ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд░реНрде рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╡реИрд╕реЗ рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВ (рдФрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛);)

рдЖрдкрдХреЗ рд╕рдорд░реНрдерди рдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдмрдбрд╝реЗ рдбреЙрдХреНрд╕ рд╕реБрдзрд╛рд░ (#2590 ) рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рд░реЗрдбрдХреНрд╕ рдХреЗ рдкреАрдЫреЗ рдореВрд▓ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдерд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ "рд╕реНрд▓рд╛рдЗрд╕ рд░реЗрдбреНрдпреВрд╕рд░" рд░рд╛рдЬреНрдп рдХреЗ рдЕрдкрдиреЗ рдЯреБрдХрдбрд╝реЗ "рд╕реНрд╡рд╛рдорд┐рддреНрд╡" рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛрдиреЛрдВ рдЕрдкрдбреЗрдЯ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЖрдк "рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдореИрдВ createStore рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ" рдХреЗ рдкрд╣рд▓реВ рдкрд░ рдЕрдЯрдХрд╛ рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдореНрдореАрджреЛрдВ рдХреЛ рдЫреВрдЯ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ Redux рдХреЛ рдпрд╣ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдЖрдк _aren't_ рдЕрд▓рдЧ рд╕реЗ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред

рдХреБрдЫ рд╣рдж рддрдХ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп рдкреГрд╖реНрда рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣реЗрдВред

@markerikson
рд╣рд╛рдБ рдЖрдк рд╕рд╣реА рд╣реИрдВред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬрд╛рдирддрд╛ рд╣реВрдВред рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ (рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд▓реЛрдЧ рднреА рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдереЗ) рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯреЛрд░ рдмрдирд╛рддреЗ рд╕рдордп "рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐" рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдФрд░ рдЕрднреА рднреА "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд┐рддрд┐" рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдХрд╛рдЙрдВрдЯрд░-рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд╣реИред рд╕реНрд▓рд╛рдЗрд╕ рд░рд┐рдбреНрдпреВрд╕рд░ (рдпрд╛ рд░реВрдЯ рд░рд┐рдбреНрдпреВрд╕рд░)ред рдпрд╛рдиреА рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдмрд╛рд░, рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╡реЗ рд╕рдорд╛рди рд╣реЛрдВ, рдпрд╛ рдмрд╣реБрдд рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдВ, рдЙрдиреНрд╣реЗрдВ рджреЛ рдмрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдЙрдВрдЯрд░-рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред рдПрдХ exapmple рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВ @ElonXun рдХреА рдкреЛрд╕реНрдЯ рдпрд╛ @Vittly рдЬреЛ рдореБрдЭреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ред рдпрд╛рдиреА рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА Redux рдХреА API рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдорд╛рдирд╡реАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ Redux рдХреЗ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░реЗрдбрдХреНрд╕ рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдорд╛рдирд╡реАрдп рднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдорд╢реАрдирд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреЗ рдХрд╛рд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдз рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рдПрдкреАрдЖрдИ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИред

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

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

рддреЛ рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╕ рдпрд╣реАред

рдореБрдЭреЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ combineReducers рдХреЛ assertReducerShape рдХреЙрд▓ рдХрд░рдирд╛ рдпрд╛рдж рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ undefined рдореЗрд░реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреА рдЕрдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ CombReducers рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдЗрд╕реЗ "рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдХреБрдЫ рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рд░реВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВред рдпрд╣ рдореЗрд░реА рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЖрдИрдПрдордУ, рдЕрдм рдпрд╣ рднреА рд░рд╛рдп рд╣реИред

рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдореЗрдВ рдХрдВрдмрд╛рдЗрди рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд▓рдЧрд╛ рдХрд┐ рдЧрдардмрдВрдзрди рд░реЗрдбреНрдпреВрд╕рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЯреБрдХрдбрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдерд╛ред assertReducerShape рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИред

@lukescott : рд╡рд╣ рдЪреЗрдХ рд╕рд┐рддрдВрдмрд░ 2015 рд╕реЗ рд╣реИ:

https://github.com/reduxjs/redux/commit/a1485f0e30ea0ea5e023a6d0f5947bd56edff7dd

рдФрд░ рд╣рд╛рдБ, combineReducers() _рдЬрд╛рдирдмреВрдЭрдХрд░_ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЙрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрди рдЪреЗрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЕрдкрдирд╛ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, Dan's Gist Redux рдХреЛ рдЪреЗрдХ рдХреЗ рдмрд┐рдирд╛ 100 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦреЗрдВред

рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ред рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдиреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд░рди рдкрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА (рдпрджрд┐ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ)ред рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд╛рд╕ рдХрд░рдирд╛ рдореЗрд░реЗ рдРрдк рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХреБрдЫ рд╕рдордп рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрдВрдмрд╛рдЗрди рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЕрднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рд░рд╣рд╛ рд╣реВрдВ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдПрдХ рд░реИрдкрд░ рдХреЗ рдЕрдВрджрд░ рд░рдЦрдХрд░ред

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рд░рд╛рдп рдереА "рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП" - рд╡рд╣ рдирд┐рдпрдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ "рд╣рдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реЗ рд╕реНрд╡рдпрдВ рд░рд╛рдЬреНрдп рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛"ред CombReducers рдЕрдм "рд╣рдореЗрд╢рд╛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рд╣реЛрддреА рд╣реИ" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рдЗрд╕рд╕реЗ 3 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдмрдиреЗ рдирд┐рдпрдореЛрдВ рдореЗрдВ рднрд╛рд░реА рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИред

рдореБрдЭреЗ рд╕рдЪ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд┐рдВрдЧ рд╕реНрдЯреЗрдЯ рдбреЙрдХреНрд╕ рдкреЗрдЬ preloadedState рддрд░реНрдХ рдХреЗ рдмреАрдЪ createStore , рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд▓рд┐рдП state = initialState рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдФрд░ combineReducers() рдмреАрдЪ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдЙрддреНрддрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬрд┐рд╕реЗ рдбреИрди рдиреЗ 2016 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рдЙрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рднреА рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рд╣реИред

@markerikson рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдкреАрдЫреЗ рдореБрдбрд╝рдХрд░ 2.0 рддрдХ рджреЗрдЦрд╛, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдиреЗ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

reducer(state: State, action: Action)

рдорддрд▓рдм рдХрд┐ рд░рд╛рдЬреНрдп рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ CombReducers рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдбреНрдпреВрд╕рд░ (рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдЖрдИрдПрдирдЖрдИрдЯреА) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ (рдЗрдирд┐рдЯрд╕реНрдЯреЗрдЯ, рдЖрдИрдПрдирдЖрдИрдЯреА) - рдЖрдИрдПрдирдЖрдИрдЯреА рдХреЛ рджреЛ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдирд╛)ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрдВрдмрд╛рдЗрди рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

reducer(state: State | undefined, action: Action)

рддреЛ рдореЗрд░рд╛ рдпрд╣ рджрд╛рд╡рд╛ рдЧрд▓рдд рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рдореБрджреНрджрд╛ рд╣реИ, рдФрд░ рдУрдкреА рдХреЗ рдкрд╛рд╕, рд╡рд╣реА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ: рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рдЗрд╕рд╕реЗ рдореЗрд░рд╛ рдХреЛрдб рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рддрд┐ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

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

рд╣рд╛рдВред рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреГрд╖реНрда рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЬрдм рдЖрдк combineReducers , рддреЛ рдЕрдкреЗрдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд▓рд╛рдЗрд╕ рд░реЗрдбреНрдпреВрд╕рд░ рдЕрдкрдиреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдЗрд╕реЗ sliceReducer(undefined, action) рдЬрд╡рд╛рдм рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред combineReducers рдХреЗ рдмрд┐рдВрджреБ рд╕реЗ, рдЖрдкрдХрд╛ рдХреЛрдб _is_ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЕрдиреБрдмрдВрдз рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдЧрд▓рдд рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

рдореИрдВ createStore рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЙрд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдореЗрд░реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ assertReducerShape рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ undefined рд╕рд╛рде рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж:

https://github.com/reduxjs/redux/blob/231f0b32641059caab3f98a3e04d3afad19a7d1/src/combineReducers.js#L68

рдореЗрд░рд╛ рдХреЛрдб рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЗрд╕рдореЗрдВ _never_ рдкрд╛рд░рд┐рдд рд╣реЛред рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред CombReducers рдмрд╕ рдЙрд╕ рдЕрдиреБрдмрдВрдз рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рд╕рдЦреНрддреА рд╕реЗ рд░рд┐рдбреНрдпреВрд╕рд░ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдХрдореНрдмрд╛рдЗрдирд░реЗрдбрд░реНрд╕ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣реА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рд▓реЗрдХрд┐рди рдЖрдИрдПрдордУ - рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рд╛рдЬреНрдп рдХреЛ рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдФрд░ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧрдардмрдВрдзрди рд░реЗрдбреНрдпреВрд╕рд░ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд╕рдЦреНрддреА рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ assertReducerShape рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣рд╛рдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ undefined рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ:

https://github.com/reduxjs/redux/blob/231f0b32641059caab3f98a3e04d3afaad19a7d1/src/combineReducers.js#L169

assertReducerShape рдПрдХ рддрд░рд╣ рд╕реЗ рдмреЗрдорд╛рдиреА рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рдХрд╛рд░ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ ... рд╡рд╣ рдХреМрди рд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ?

рддреЛ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдореБрджреНрджрд╛ рд╣реИ, рддреЛ?

рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдЕрдВрддрддрдГ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рд╣реИред

combineReducers() рдЬреЗрдПрд╕ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд░рдирдЯрд╛рдЗрдо рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЖрдк TS рдореЗрдВ рд╕реНрдерд┐рд░ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ рдШреЛрд╖рдгрд╛ combineReducers() рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЗрд╕рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреАред рддреЛ, рдЙрд╕ рдЕрд░реНрде рдореЗрдВ, рдЕрдкрдиреЗ рдЯреБрдХрдбрд╝рд╛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рдгрд╛ рдЧрд▓рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ _can_ рдФрд░ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛ _will_ undefined рдЬрдм рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ combineReducers() ред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХреА рдЧрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрди рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реА рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрд▓рд╛рдЗрд╕ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ undefined рдЬрдм рдПрдХ (рд╕рдВрднрд╡рддрдГ рд╕рд╛рд░реНрдердХ) рдореМрдЬреВрджрд╛ рд╕реНрдЯреЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ assertReducerShape() рдпрд╣ рдЬрд╛рдВрдЪ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ undefined рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм undefined рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп рдореВрд▓реНрдп рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рд░реЗрдбреНрдпреВрд╕рд░ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрд╡рдпрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдЬрдм рднреА рдЕрдЬреНрдЮрд╛рдд рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рд░реЗрдбреНрдпреВрд╕рд░ рд╣рдореЗрд╢рд╛ рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИ)ред

рдпрджрд┐ рдЖрдк рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдмрджрд▓реЗрдВ ... рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдореЗрд░рд╛ рд╕рд░реНрд╡рд░ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдХреНрд░рд┐рдп рд╕рддреНрд░ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЖрдХрд░реНрд╖рдг:

export default function itemReducer(state = initialState.items | undefined, action){ 
    switch(action.type) 
   { 
         case "LOAD_ITEMS_SUCCESS":
               if(action.items==undefined) { 
                        action.items=[]; 
               }
                return action.items

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

рдЪреАрдпрд░реНрд╕!

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

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

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

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

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

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

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