Redux: рдЬрдм рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрдИ reducers рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рддреЛ CombReducer рдкрд░ рдПрдХ рдЪрд┐рдВрддрд╛

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

рдореИрдВ React.js рдФрд░ рдлреНрд▓рдХреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд┐рдд рдПрдХ рдЪреИрдЯ рдРрдк рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ Redux рдХреЗ рдбреЙрдХреНрд╕ рдХреЛ combineReducer рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрдврд╝рд╛ рд╣реИ, рдпрд╣ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рддреАрди рд╕реНрдЯреЛрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ messageStore , unreadStore , threadStore ред рдФрд░ рд╡рд╣рд╛рдБ NEW_MESSAGE рдирд╛рдордХ рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╣реИред рд╕рднреА рддреАрди рд╕реНрдЯреЛрд░ рдирдП рд╕рдВрджреЗрд╢реЛрдВ рдкрд░ рдЕрдкрдбреЗрдЯ рд╣реЛрдВрдЧреЗред Redux рдореЗрдВ, рднрдВрдбрд╛рд░ рдХреЛ combineReducer рдЬреИрд╕реЗ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

message = (state=[], action) ->
  switch action.type
    when NEW_MESSAGE
      state # new state
unread = (state=[], action) ->
  switch action.type
    when NEW_MESSAGE
      state # new state
thread = (state=[], action) ->
  switch action.type
    when NEW_MESSAGE
      state # new state

combineReducer {message, unread, thread}

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

initialState = Immutable.fromJS
  message: []
  unread: []
  thread: []

allStore = (store=initialState, action) ->
  switch action.type
    when NEW_MESSAGE
        initialState
        .updateIn ['message'], (messages) -> messages # updated
        .updateIn ['urnead'], (urneads) -> unreads # updated
        .updateIn ['thread'], (threads) -> threads # updated

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

рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕реЗ рдХрдИ рд░реАрдбреНрдпреВрд╕рд░ (рдпрд╛ рдореЗрд░реЗ рдРрдк рдХреЗ рдмрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдлрд╛рдЗрд▓реЗрдВ) рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 5 рд╕реНрдЯреЛрд░реЛрдВ рдХреЛ рдПрдХ рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реБрдП рджреЗрдЦрд╛ рдерд╛, рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИред

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

рд▓реЗрдХрд┐рди рдЖрдк рд╕рд╣реА рд╣реИрдВ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рд╡реЗ рдЕрдХреНрд╕рд░ рдПрдХ рдЙрдк-рд░рд╛рдЬреНрдпреАрдп рдореЙрдбрд▓ рдХреЗ рд▓рдХреНрд╖рдг рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рд░рд┐рдбреНрдпреВрд╕рд░ рджреВрд╕рд░реЗ рд╕реЗ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреЛ рдЕрдкрдард┐рдд рд╕реЗ рд╕рдВрджреЗрд╢ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдпрд╛ рд╕рдВрджреЗрд╢ рд╕реЗ рдзрд╛рдЧреЗ рддрдХ рдПрдХ рдирдП рд╕реВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪрд╛рд░ рдХрд░рдирд╛)

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд▓рдХреНрд╖рдг рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рдЕрдВрджрд░ рд╕рд╛рдорд╛рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд░рд╛рдЬреНрдп рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред { readMessages, unreadMessages } рдмрдЬрд╛рдп рдЖрдкрдХреЗ рдкрд╛рд╕ { messagesById, threadsById, messageIdsByThreadIds } ред рд╕рдВрджреЗрд╢ рдкрдврд╝рд╛? рдареАрдХ рд╣реИ, рдЯреЙрдЧрд▓ state.messagesById[id].isRead ред рдПрдХ рд╕реВрддреНрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? state.threadsById[threadId].messageIds рдкрдХрдбрд╝реЛ, рдлрд┐рд░ messageIds.map(id => state.messagesById[id]) ред

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

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

рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ combineReducers рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рдирд╣реАрдВ рд╣реИ? рджрд░рдЕрд╕рд▓, рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреИрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА reducer рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдФрд░ рдлрд┐рд░ UI рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп reducers, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрдпрдирд┐рдд рдЖрдЗрдЯрдо, рдЖрджрд┐)ред

рдпрд╣ рд╕рднреА рджреЗрдЦреЗрдВ:

https://github.com/rackt/redux/tree/master/examples/real-world/reducers
https://github.com/rackt/redux/blob/master/examples/async/reducers

рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд▓рд┐рдПред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рдЫреВрдЯ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, requestType рджреЛрдиреЛрдВ reducers рдореЗрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
https://github.com/rackt/redux/blob/master/examples/real-world/reducers/paginate.js#L28

рдмрдВрдЯрд╡рд╛рд░реЗ рд╡рд╛рд▓реЗ reducers рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рджреЛ reducers рдХреЛ earch рджреВрд╕рд░реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рд╡реЗ рдПрдХ рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕реМрдВрдк рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ:

  • рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕реЗ рдХрдИ рд░реАрдбреНрдпреВрд╕рд░ (рдпрд╛ рдореЗрд░реЗ рдРрдк рдХреЗ рдмрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдлрд╛рдЗрд▓реЗрдВ) рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 5 рд╕реНрдЯреЛрд░реЛрдВ рдХреЛ рдПрдХ рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реБрдП рджреЗрдЦрд╛ рдерд╛, рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИред
  • рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рдХрдо рдХрд░рдиреЗ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдЪрд▓рддреА рдХреА рддрд░рд╣ рджреВрд╕рд░реЗ рд╕реЗ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ ( unread рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП message , рдпрд╛ рдпрд╣рд╛рдБ рддрдХ рд╕реЗ рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ message рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП thread )ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдм рдХрд┐рд╕реА рдЕрдиреНрдп reducer рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореИрдВ рдЗрди рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдЗрди рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд╡реЗ рдЯреНрд░реЗрдбрдСрдл рдХреА рддрд░рд╣ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕реЗ рдХрдИ рд░реАрдбреНрдпреВрд╕рд░ (рдпрд╛ рдореЗрд░реЗ рдРрдк рдХреЗ рдмрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдлрд╛рдЗрд▓реЗрдВ) рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 5 рд╕реНрдЯреЛрд░реЛрдВ рдХреЛ рдПрдХ рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реБрдП рджреЗрдЦрд╛ рдерд╛, рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИред

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

рд▓реЗрдХрд┐рди рдЖрдк рд╕рд╣реА рд╣реИрдВ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рд╡реЗ рдЕрдХреНрд╕рд░ рдПрдХ рдЙрдк-рд░рд╛рдЬреНрдпреАрдп рдореЙрдбрд▓ рдХреЗ рд▓рдХреНрд╖рдг рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рд░рд┐рдбреНрдпреВрд╕рд░ рджреВрд╕рд░реЗ рд╕реЗ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреЛ рдЕрдкрдард┐рдд рд╕реЗ рд╕рдВрджреЗрд╢ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдпрд╛ рд╕рдВрджреЗрд╢ рд╕реЗ рдзрд╛рдЧреЗ рддрдХ рдПрдХ рдирдП рд╕реВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪрд╛рд░ рдХрд░рдирд╛)

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд▓рдХреНрд╖рдг рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рдЕрдВрджрд░ рд╕рд╛рдорд╛рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд░рд╛рдЬреНрдп рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред { readMessages, unreadMessages } рдмрдЬрд╛рдп рдЖрдкрдХреЗ рдкрд╛рд╕ { messagesById, threadsById, messageIdsByThreadIds } ред рд╕рдВрджреЗрд╢ рдкрдврд╝рд╛? рдареАрдХ рд╣реИ, рдЯреЙрдЧрд▓ state.messagesById[id].isRead ред рдПрдХ рд╕реВрддреНрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? state.threadsById[threadId].messageIds рдкрдХрдбрд╝реЛ, рдлрд┐рд░ messageIds.map(id => state.messagesById[id]) ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

@jiyinyiyong рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди combineReducers рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╣рд╛рдпрдХ рд╣реИред рдПрдХ рд╕рдорд╛рди рд╕рд╣рд╛рдпрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ

рдореИрдВрдиреЗ рдЕрдкрдиреЗ combineReducers() рд╕рд╣рд╛рдпрдХ рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ Immutable.js рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд reducers рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд░реВрдЯ reducers рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
https://github.com/jokeyrhyme/wow-healer-bootcamp/blob/master/utils/combineReducers.js

рдкрд╣рд▓рд╛ рддрд░реНрдХ рдЖрдкрдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд┐рд▓рд╛рди рд╡рд╛рд▓реЗ рдЙрдк-рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЙрдк-рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИред

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

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

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

function a (state, action) { /* only sees within a */ return state; }
function b (state, action) { /* only sees within b */ return state; }
function c (state, action) { /* only sees within c */ return state; }

function ab (state, action) { /* partial state containing a and b */ return state; }
function bc (state, action) { /* partial state containing b and c */ return state; }

let rootReducer = combineReducers(
  { a, b, c },
  [ 'a', 'b', ab ],
  [ 'b', 'c', bc ]
);

рдХреНрдпрд╛ рдпрд╣ рдЖрдВрд╢рд┐рдХ reducers рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдЯ reducers рдХреЗ рд▓рд┐рдП PR рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдпрд╛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

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

рдореИрдВрдиреЗ рдЗрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рднреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдкрд╛рдпрд╛ рд╣реИред рдмрд╕ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ / рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдБ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

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

рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдорд┐рд▓рд╛:

export default store => next => action => {
  next({ ...action, getState: store.getState });
}

рддрд╛рдХрд┐ рд╣рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ action.getState() рдорд╛рдзреНрдпрдо рд╕реЗ рд░реВрдЯ рд╕реНрдЯреЛрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗред

@ rhys-vdw рдЙрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдорд┐рдбрд▓рд╡реЗрдпрд░ :)

@ rhys-vdw рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЖрдк рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ / рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдЕрдЦрдВрдбрддрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рдПрдХ рдЗрдХрд╛рдИ рдХреЛ рджреЛ (рдпрд╛ рдЕрдзрд┐рдХ) рдЕрдиреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЧреИрд░-рдореМрдЬреВрджрд╛ рд░рд┐рдХреЙрд░реНрдб рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╕ рдЗрд╕ рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВред
@gaearon Redux рдореЗрдВ рдПрдХ рдкреНрд░рд▓реЗрдЦрд┐рдд рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдЕрдЦрдВрдбрддрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП?

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

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

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрдХреНрдХрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ Redux рдХреЛ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдерд╛ - рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдЗрдХрд╛рдЗрдпрд╛рдВред рдФрд░ рдХреЛрдИ рдРрд╕реА рд░рдгрдиреАрддрд┐ рдЪреБрди рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдВрдмреЗрдбреЗрдб рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХреЗ рд▓рд┐рдП nested reducers рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ Redux рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рд╣реИред

рдореБрдЭреЗ рдПрдХ reducer рдореЗрдВ рд╕реНрдЯреЛрд░ рд░рд╛рдЬреНрдп рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрд╛ред рдпрд╣ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдиреЗрд╕реНрдЯреЗрдб Combedededers рдмрдирд╛рддрд╛ рд╣реИред рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдмрд╛рдХреА рд░рд╛рдЬреНрдп рдореЗрдВ .parent() рдпрд╛ .root() рдпрд╛ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрдВред

рдПрдХ reducer рдореЗрдВ рдЕрдиреНрдп reducers рдХреЗ рд░рд╛рдЬреНрдп рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕рдмрд╕реЗ рдЕрдХреНрд╕рд░ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИред
рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рдЙрд╕ рддрд░реНрдХ рдХреЛ Reducer рд╕реЗ рд╣рдЯрд╛рдХрд░ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд▓реЗ рдЬрд╛рдирд╛;
  • рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рд╕ рдХрд░рдирд╛;
  • рд╡реНрдпреВ рдХреЛрдб рдХреЛ рджреЛ рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЗрд╕ рд╕реЗ рд╕рд╣рдордд рд╣реВрдБред рдореИрдВ рдмрд╕ рдпрд╣ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдореВрд▓ рд╕реНрдерд┐рддрд┐ reducers рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмрд╛рдж :-)

рд╣рд╛рдБ, рдореВрд▓ рд░рд╛рдЬреНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ reducers рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдпреБрдЧреНрдорд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд░рд╛рдЬреНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд╛рд▓ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдбреАрдмреА рдХреА рддрд░рд╣ рдорд╛рдирддрд╛ рд╣реВрдВред

рдореИрдВ рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЕрдЧрд░ @gaearon (рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдлрд╝реНрд▓реИрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ) рдпрд╛ @ rhys-vdw рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреЗрд╣рддрд░ рд╣реИ (рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП) ред

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ / рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрднрд╡?

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

Reducers рдкрд╣рд▓реЗ рд╕реЗ рд╣реА transitively рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдпреБрдЧреНрдорд┐рдд рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ reducers рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп Redux рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд░рд┐рдбреНрдпреВрд╕рд░ рдХрд╛ рддреБрдЪреНрдЫ рдкреБрди: рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

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

рд░рд╛рдЬреНрдп рдХреЛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорджреНрджреЗрдирдЬрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рд╢рд╛рдпрдж рд░рд╛рдЬреНрдп рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рдЬреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

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

@kurtharriger : рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдмрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкреИрдЯрд░реНрди рдбреЛрдореЗрди рджреНрд╡рд╛рд░рд╛ Redux рд░рд╛рдЬреНрдп рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдбреЛрдореЗрди рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП combineReducers рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдХрд┐ _just_ рдПрдХ рдЕрдиреБрд╢рдВрд╕рд╛ рд╣реИред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдкреВрд░реЗ рд░рд╛рдЬреНрдп рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдк-рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдЪреАрдЬреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрддрдГ, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ _one _ reducer рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред combineReducers рдЖрдо рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред

рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛ

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

рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрдкрд▓рд┐рдВрдЧ рд╕реНрдкрд╖реНрдЯ рд╣реЛред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдб рдХреА рдПрди рд▓рд╛рдЗрдиреЗрдВ рд╣реИ рдЬрд╣рд╛рдВ рдПрди рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рддрдиреЗ рд░реАрдбреНрдпреВрд╕рд░ рд╣реИрдВред рдмрд╕ CombReducers рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ рдФрд░ рдЙрд╕ рдореВрд▓ reducer рдХреЛ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреЗрдВред

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

рдпрджрд┐ рд░рд╛рдЬреНрдп рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рддреЛ рдШрдЯрдХреЛрдВ рдХреЛ рдЙрди рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХреНрд╕реЗрд╕рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд╛рдЬреНрдп рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЙрди рд╕реНрдХреЛрдкреЛрдВ тАЛтАЛрдХреЗ рдЖрдВрддрд░рд┐рдХ рдЖрдВрддрд░рд┐рдХ рдЖрдХрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ Redux рд╕реАрдЦрддрд╛ рд╣реВрдВ, рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдХреЗ рд╕рд╛рде рдПрдХ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ рдРрдк рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдХрд╛рд░ рдХреА рддрдВрдЧ рдпреБрдЧреНрдорди рд╣реИ - рд░реЗрдбреНрдпреВрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ mapStateToProps рджреНрд╡рд╛рд░рд╛ - рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдкрдЯреНрдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕реЗ рдЬрд╛рдирдирд╛ рд╣реИ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдо (рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдкреНрдкрдгреА reducer рдмрдирд╛рдо рд╕рд╛рдорд╛рдиреНрдп reducer рджреНрд╡рд╛рд░рд╛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред) рдореИрдВ accessor рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕рднреА рд░рд╛рдЬреНрдп рдЕрднрд┐рдЧрдо рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ mapStateToProps рдореЗрдВ рднреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рднреМрдВрдХ рд╕рдХрддрд╛ рд╣реВрдВред рдкреЗрдбрд╝ред

@jwhiting : рдпрд╣ "рдЪрдпрдирдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рдВрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд░рд╛рдЬреНрдп рд╕реЗ, рд╡рд┐рд╢реЗрд╖рдХрд░ mapStateToProps рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдЖрдХрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЫрд┐рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХрдо рд╕реЗ рдХрдо рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ state.some.nested.field рдХрд╣рд╛рдВ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рддреЛ Reselect рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдФрд░ Redux рдбреЙрдХреНрд╕ рдХреЗ рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ рд╡реНрдпреБрддреНрдкрдиреНрди рдбреЗрдЯрд╛ рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред

рд╣рд╛рдБред рдпрджрд┐ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рд╡реЙрд▓реНрдпреВрдо рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЪрдпрди (рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреЗ рд╣реБрдП) рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ Reselect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП shopping-cart рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

@markerikson @gaearon рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдкрддрд╛

рдПрдХ рд╣реА reducer рдореЗрдВ рд╕рднреА рдХреЛрдб рд░рдЦрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдЬреБрджрд╛рдИ рдирд╣реАрдВ рд╣реИ
рдЪрд┐рдВрддрд╛рдУрдВред рдпрджрд┐ рдЖрдкрдХрд╛ reducer рд░реВрдЯ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХрд╛
рдореВрд▓ reducer рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ CombReducers рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЪреАрд░рдирд╛ рд╣реЛрдЧрд╛
рдмрд╛рд╣рд░ред рддреЛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЕрд╕рдВрднрд╡ рдХреНрдпреЛрдВ рди рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЪреАрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рди рдкрдбрд╝реЗ
рдмрд╛рдж рдореЗрдВ рдпрд╛ рдереНрд░реЛ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?
рд╢рдирд┐рд╡рд╛рд░, 16 рдЕрдкреНрд░реИрд▓, 2016 рдХреЛ 8:27 рдмрдЬреЗ рдЬреЛрд╢ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@markerikson https://github.com/markerikson @gaearon
https://github.com/gaearon рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЙрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдКрдВрдЧрд╛,
рдзрдиреНрдпрд╡рд╛рджред рдХреБрдЫ рднреА рдмрд╛рд╣рд░ рдХреЗ рд▓рд┐рдП mapStateToProps рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдШрдЯрдХ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдЪрд┐рдВрддрд╛ (рдпрд╛ рд╢рд╛рдпрдж рд╕рднреА рд░рд╛рдЬреНрдп рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП) рдврд╛рд▓ рд╣реЛрдЧреА
рд╡рд┐рджреЗрд╢реА рд░рд╛рдЬреНрдп рдЖрдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдШрдЯрдХред рдореИрдВ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛
рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░рд╛рдЬреНрдп рдХрдбрд╝рд╛рдИ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐,
рддрд╛рдХрд┐ рдХреЛрдб рдЕрдиреБрд╢рд╛рд╕рди рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рдХреНрд╖рдХ рдФрд░ рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рди рд╣реЛ
рд╡рд╣рд╛рдБ рд╕реБрдЭрд╛рд╡ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/reactjs/redux/issues/601#issuecomment -210940305

@kurtharriger : рд╣рдо рд╕рднреА рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ Reducer рддрд░реНрдХ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрддрд┐рдо рдмрд┐рдЯ рдХреЛ рд░рдЦрдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдХрд╛рдо рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЙрдк-рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реМрдВрдк рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВред Redux рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ combineReducers рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЙрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ - рдЖрдк рдЕрдкрдиреЗ рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реЛ, рдпрд╛ combineReducers рдХреА рдЕрдкрдиреА рд╡рд┐рд╡рд┐рдзрддрд╛ рд▓рд┐рдЦ тАЛтАЛрд░рд╣рд╛ рд╣реЛред

рдЪреВрдБрдХрд┐ рд╣рдо рдкреИрдЯрд░реНрди рдФрд░ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдкрд░ рдмреЛрд▓ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЪреАрдЬрд╝реЛрдВ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рдеред

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

@shadowii рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЪрдпрдирдХрд░реНрддрд╛ рдореБрдЭреЗ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреЛрд▓реЙрдХреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд░рд╛рдЬреНрдп рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╣реЛред

рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рдбреНрдпреВрд╕рд░ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдПрдХреНрд╢рди рдЯрд╛рдЗрдк рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рддреА рд╣реИ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ account рдФрд░ auth reducers рд╣реИрдВ, рддреЛ рд╡реЗ рджреЛрдиреЛрдВ LOGIN_SUCCESS рдПрдХреНрд╢рди рдЯрд╛рдЗрдк (рдкреЗрд▓реЛрдб рдореЗрдВ рдСрдЙрдЯ рдЯреЛрдХрди рдФрд░ рдЕрдХрд╛рдЙрдВрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде) рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡реЗ рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рдХреЗ рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рд╣реА рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдХреЛрдИ рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЬреНрдп рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдмрд╛рд░ рдХрд┐рдпрд╛ред

рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рдбреНрдпреВрд╕рд░ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдПрдХреНрд╢рди рдЯрд╛рдЗрдк рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рддреА рд╣реИ?

рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЙрдкрдпреЛрдЧреА рдкреИрдЯрд░реНрди рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ _reason_ рдХреНрд░рд┐рдпрд╛рдПрдВ рдореМрдЬреВрдж рд╣реИрдВ: рдпрджрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ 1: 1 рдкрд░ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрди рд╕рднреА рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдмрд┐рдВрджреБ рд╣реЛрдВрдЧреЗред

@ rhys-vdw рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред

customMiddleare.js

const customMiddleware =  store => next => action => {
  next({ ...action, getState: store.getState });
};

рдФрд░ рдореЗрд░реЗ рд╕реНрдЯреЛрд░ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ

import customMiddleware from './customMiddleware';

var store = createStore(
        rootReducer,
        initialState,
        applyMiddleware(
            reduxPromise,
            thunkMiddleware,
            loggerMiddleware,
            customMiddleware
        )
    );
return store;

рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд░рд╣реА рд╣реИ:

applyMiddleware.js? ee15: 49 рдмрд┐рдирд╛ рдкрдврд╝рд╛ рд╣реБрдЖ рдЯрд╛рдЗрдк рдХрд░реЗрдВ: рдорд┐рдбрд▓рд╡реЗрдпрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди (тАж) рдирд╣реАрдВ рд╣реИ
(рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди) @ applyMiddleware.js? ee15: 49
(рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди) @ applyMiddleware.js? ee15: 48
createStore @ createStore.js? fe4c: 65
configStore @ configStore.js? ffde: 45
(рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди) @ index.jsx? fdd7: 25
(рдмреЗрдирд╛рдореА рдлрдВрдХреНрд╢рди) @ bundle.js: 1639
webpack_require @ bundle.js: 556
fn @ bundle.js: 87 (рдмреЗрдирд╛рдореА рдлрдВрдХреНрд╢рди) @ bundle.js: 588
webpack_require @ bundle.js: 556
(рдмреЗрдирд╛рдореА рдлрдВрдХреНрд╢рди) @ bundle.js: 579
(рдмреЗрдирд╛рдореА рдлрдВрдХреНрд╢рди) @ bundle.js: 582

@ mars76 : рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ customMiddleware.js рдХреА рд╕рдВрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рд╣реИ, рддреЛ рдЖрдк _anything_ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдЪрд╛рд░ рдмрд┐рдЪреМрд▓рд┐рдпреЛрдВ рдХреЛ applyMiddleware рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╡реИрдз рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИред рд╡рд╛рдкрд╕ рдХрджрдо, рдЙрди рд╕рднреА рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝реЗрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕рд╛ рд╡реИрдз рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдХреНрдпреЛрдВред рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдЪреАрдЬреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреИрд╕реЗ рд╣реИрдВ, рдЖрджрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

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

рд╕рд╛рднрд╛рд░ @markerikson

рдореИрдВрдиреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдиреАрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЕрдм рдареАрдХ рд╣реИ:

customMiddleware.js

export function customMiddleware(store) { return function (next) { return function (action) { next(Object.assign({}, action, { getState: store.getState })); }; }; } console.log(customMiddleware);

рдореИрдВ рдХрднреА рднреА рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ рд╕реНрдЯреЛрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рди рдХрд┐ Reducer рдореЗрдВ)ред рдореБрдЭреЗ рдПрдХ Async рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреЛрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд░реЗрдбреНрдпреВрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред

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

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

рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВред

рдзрдиреНрдпрд╡рд╛рдж

@ mars76 : рдлрд┐рд░ рд╕реЗ, рдЖрдкрдХреЛ _ _ рдХрднреА рднреА Reducer рдХреЗ рднреАрддрд░ рд╕реЗ рдкреНрд░реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢

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

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @markeriksonред

рдореЗрд░рд╛ рдмреБрд░рд╛редрдореИрдВ redux-thunk рдореЗрдВ getState () рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣ рдореЗрд░рд╛ рдХрд╛рдо рдмрд╣реБрдд рдЖрд╕рд╛рди рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рд╢реБрджреНрдз рдХрд░ рджреЗрддрд╛ рд╣реИред

@gaearon рдЬрдм рдЖрдкрдиреЗ рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдерд╛ рдХрд┐ рдкреВрд░реЗ рд░рд╛рдЬреНрдп рдХреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рд╕реМрдВрдк рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдореИрдВ рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?

@tacomanator : FYI рдХрд░реЗрдВ, Dan рдЖрдорддреМрд░ рдкрд░ рдЗрди рджрд┐рдиреЛрдВ Redux рдХреЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд┐рдВрдЧреНрд╕ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдмрд╣реБрдд рд╕реА рдЕрдиреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВред

рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп, рдпрджрд┐ рдЖрдк рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдПрдХ рдердВрдХ рдХреЗ рдЕрдВрджрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдереНрд░реЛ getState рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреВрд░реЗ рд░рд╛рдЬреНрдп рдХрд╛ рдкреЗрдбрд╝ рд╕реБрд▓рдн рд╣реИ:

import {someSelector} from "./selectors";

function someThunk(someParameter) {
    return (dispatch, getState) => {
        const specificData = someSelector(getState(), someParameter);

        dispatch({type : "SOME_ACTION", payload : specificData});    
    }
}

@markersonson рдзрдиреНрдпрд╡рд╛рдж, рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред FYI рдХрд╛рд░рдг рдореИрдВ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдБ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рддреНрдпрд╛рдкрди рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ reducer рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░реЛрдз рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдореБрдЭреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рднреЛрдЬрди рджреЗрддрд╛ рд╣реИред

рдПрдХ рддреНрд╡рд░рд┐рдд рд╣реИрдХ рдореИрдВ рдПрдХ рдПрдХрд▓ рдореЗрдВ reducers рдЧрдардмрдВрдзрди рдХрд┐рдпрд╛ рдерд╛

const reducers = [ reducerA, reducerB, ..., reducerZ ];

let reducer = ( state = initialState, action ) => {
    return reducers.reduce( ( state, reducerFn ) => (
        reducerFn( state, action )
    ), state );
};

рдЬрд╣рд╛рдВ reducerA reducerZ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд┐рдбреНрдпреВрд╕рд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред

@brianpkelley : рд╣рд╛рдБ, рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ https://github.com/acdlite/reduce-reducers рд╣реИ ред

@markerikson рдЖрд╣ рдЕрдЪреНрдЫрд╛, рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ / redux / etc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрд╛рдпрд╛ред рд▓реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рдЧрднрдЧ 1/2 рд░рд╛рд╕реНрддреЗ рдХреЗ рдЕрдВрдд рддрдХ рдЫреЛрдбрд╝ рджрд┐рдпрд╛

рд╣реЗрд╣, рдирд┐рд╢реНрдЪрд┐рддред

FYI рдХрд░реЗрдВ, рдЖрдк FAQ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╕реНрдЯреНрд░рдХреНрдЪрд░рд┐рдВрдЧ рд░рд┐рдбреНрдпреВрд╕рд░ рд╕реЗрдХреНрд╢рдиред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реА "рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рд░реЗрдбрдХреНрд╕" рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреБрдЫ рдкреЛрд╕реНрдЯ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдЙрдиреНрдирдд рд░рд┐рдбреНрдпреВрд╕рд░ рддрдХрдиреАрдХреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рднрд╛рдЧ 7 рдФрд░ рднрд╛рдЧ 8 рджреЗрдЦреЗрдВ)ред

Redux- рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ transform рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдореВрд▓ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рдЙрджрд╛рд╣рд░рдг:

const formInitLogic = createLogic({
  type: 'FORM_INIT',
  transform({ getState, action }, next) {
    const state = getState();
    next({
      ...action,
      payload: {
        ...action.payload,
        property1: state.branch1.someProperty > 5,
        property2: state.branch1.anotherProperty + state.branch2.yetAnotherProperty,
      },
    });
  },
});

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ:
"рд╕реАрдзреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рддрдХ рди рдкрд╣реБрдБрдЪреЗрдВ"
рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд░рд┐рдбрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рд╣рд░ рдЙрдк рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЗрдирдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ рдШрдЯрдХ рдореЗрдВ рдпрд╣ рд╕реНрд╡рдпрдВ рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рддрд░реНрдХ рд╣реИ, рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

  • рд▓рд╛рд▓ рдЬрдбрд╝

    • reducers.js рдирд┐рд░реНрдпрд╛рдд рд╣рд░ рд░рд╛рдЬреНрдп рд╕реЗ reducers рдЧрдардмрдВрдзрди рдХрд░рддрд╛ рд╣реИ

    • рдорд┐рдбрд▓рд╡реЗрдпрд░ред рдЬреЗ рдПрд╕ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдПрдкреНрд▓рд╛рдЗрдб рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕рднреА рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП

    • configureStore.js CreateStore рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ (reducers.js, middleware.js)

    • рдХреНрд░рд┐рдпрд╛рдУрдВ .js рдирд┐рд░реНрдпрд╛рдд рдХреНрд░рд┐рдпрд╛ рдЬреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рднреЗрдЬрддреА рд╣реИ <== THIS

    • state1

    • initial.js рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ (рдореИрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)

    • рдХреНрд░рд┐рдпрд╛-type.js рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ (рдореИрдВ рдХреБрдВрдЬреА рджрд░реНрдкрдг рдХреЗ рд░реВрдк рдореЗрдВ рдбреИрдХреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)

    • рдХреНрд░рд┐рдпрд╛ред js рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рд╛рдЬреНрдп рдХреНрд░рд┐рдпрд╛рдПрдБ рд╣реИрдВ

    • reducer.js рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рд╛рдЬреНрдп reducer рд╢рд╛рдорд┐рд▓ рд╣реИ

    • state2

    • initial.js

    • рдХрд╛рд░реНрд░рд╡рд╛рдИ types.js

      ....

рдХреНрдпреЛрдВ ?
1- рд╣рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ 2 рддрд░рд╣ рдХреА рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ:

  • рд░рд╛рдЬреНрдп рдХреНрд░рд┐рдпрд╛рдПрдБ (redux / state1 /

    • рдРрдк рдПрдХреНрд╢рди (redux / actions.js) рдпреЗ рдПрдХреНрд╢рди рдХреБрдЫ рдРрдк рд▓реЙрдЬрд┐рдХ рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреЗрдЯ рдПрдХреНрд╢рди рдХреЛ рдлрд╛рдпрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

2- рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдкреЗрд╕реНрдЯ рдХрд░рдХреЗ рдФрд░ рдЙрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ;)

рдЬрдм 2 рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рдПрдХ рд╣реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

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

рдЕрдм рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ reducer рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрдИ reducers рддрдХ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рд╕рднреА рдХреЛ рдЙрд╕ 'рддреНрд░реБрдЯрд┐' рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдлрд┐рд░ рдХреНрдпрд╛?

@ Wassap124 рдПрдХ рд╣реА рд░рд╛рдЬреНрдп рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ рдЖрдк "рд╕реЗрдЯ рддреНрд░реБрдЯрд┐" рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдердВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@ rhys-vdw рдореИрдВ рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ, рдЬреЛ рдХрд╛рдлреА рд▓рдВрдмреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдФрд░ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдХреНрдпрд╛ рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рдирд┐рдпрдо рдХрд╛ рдЦрдВрдбрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

@ Wassap124 , @ rhys- combineReducers _ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп reducer рддрд░реНрдХ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ - https://redux.js.org/recipes/structuringreducers/beyondcombinereducers рджреЗрдЦреЗрдВ ред

рдпрджрд┐ рдЖрдк рдХреБрдЫ рддреНрд╡рд░рд┐рдд рд╕реНрд░реЛрдд рд╕реНрдкреЗрд▓реБрдирдХрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ ...

combineReducers рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рддрд░рд╣ рд▓реМрдЯрд╛рддрд╛ рд╣реИ

return function combination(state = {}, action) {

https://github.com/reduxjs/redux/blob/master/src/combineReducers.js#L145 рджреЗрдЦреЗрдВ

рд╡рд╛рд╕реНрддрд╡рд┐рдХ reducers рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рджред

рдЗрд╕рд▓рд┐рдП, рдЖрдк рдХреБрдЫ рд╕рд░рд▓ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рднрдВрдбрд╛рд░рдг рд╕реЗ рд░рд╛рдЬреНрдп рдХреЛ рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдФрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред

const globalReducerHandler = () => {
  return (state = {}, action) => {
    if (action.type === 'DO_GLOBAL_THING') {
      return globallyModifyState(state)
    }
    return reducers(state, action)
  }
}

рдпрд╣ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрддрд╛ рд╣рдореЗрд╢рд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╣реА рд╣реИред

рдПрдХ рдЕрдиреНрдп reducer рд╕реЗ рдПрдХ reducer рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдЬреЛ рдХрд┐ рдПрдХ рдПрдВрдЯреАрдкреИрдЯрд░реНрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ GlobalReducerHandler рдХрд╛ рдЙрд╕ reducer рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ), reduceReducers , рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ compose reducers рдХреЗ рд▓рд┐рдП рд╣реИ (рдареАрдХ рд╣реИ, рдпрд╣ рд╣реИ) рд╡рд╕реНрддреБрддрдГ (Action ->) рдореЛрдирд╛рдб рдореЗрдВ рд░рдЪрдирд╛)ред

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