Redux: mapStateToProps () рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдордИ 2016  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: reduxjs/redux

рдореИрдВрдиреЗ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ - рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдкрдврд╝рд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рднреА рдореБрдЭреЗ рдПрдХ рдЙрддреНрддрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВрдиреЗ рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬ, рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдордЭ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИред

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

рдореБрдЭреЗ рдкрд╣рд▓реЗ рдпрд╣ рдмрддрд╛рдиреЗ рджреЗрдВ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдЬрд╛рдирддрд╛ рд╣реВрдВ:

  • рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрд░рд┐рдпрд╛рдПрдВ рдЙрд╕ рд╕реНрдЯреЛрд░ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ (рдПрдХ рд╕рдВрдкрддреНрддрд┐) рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИрдВред
  • рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдЕрдкрдиреЗ рд╕реНрд▓рд╛рдЗрд╕ / рд╕реНрдЯреЛрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред (рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ reducer рдХреЛ рдЕрдкрдиреЗ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░рдиреА рд╣реЛрдЧреАред)
  • рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ mapStateToProps рд╕реНрдЯреЛрд░ рд╕реЗ рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ "рдкреНрд▓рдХ рдХрд░рддрд╛ рд╣реИ" рдФрд░ рдЗрд╕реЗ рдирд╛рдорд┐рдд рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред

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

  • рдореИрдВ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдРрд╕реЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд░рдЦрддрд╛ рд╣реИред рд╡реЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЧреБрдг рд╡реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдк-рд╡реГрдХреНрд╖ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпреЗ рд╕рдЪ рд╣реИ?
  • рдЬрдм рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реНрдЯреЛрд░ рдореЗрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ (рдпрд╛ рд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдк-рдкреЗрдбрд╝) рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреЛрд░ рдХреЗ рднреАрддрд░ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдорд╛рдг / рд╕рдВрдШ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
  • рдЙрдЪрд┐рдд рд╕рдВрдкрддреНрддрд┐ / рд╕реНрдЯреЛрд░ рдХреЗ рднрд╛рдЧ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП mapStateToProps "рдХреИрд╕реЗ" рдЬрд╛рдирддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ?
  • рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рдбрд┐рдмрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдкрд╕реНрдЯреИрдЯрдЯреВрдкреНрд░реЙрдкреНрд╕ рдХреЛ рдЖрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ?
  • рдпрд╛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдЧрд▓рдд рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ ...?

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

рдХреНрдпрд╛ рдЖрдк http://redux.js.org/docs/Troublesourcing.html рд╕реЗ

рдореИрдВ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдРрд╕реЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд░рдЦрддрд╛ рд╣реИред рд╡реЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЧреБрдг рд╡реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдк-рд╡реГрдХреНрд╖ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпреЗ рд╕рдЪ рд╣реИ?

рд╣рд╛рдБред рд╕реНрдЯреЛрд░ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╕реНрдерд┐рддрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд░рдЦрддрд╛ рд╣реИред рдпрд╣ store.getState() рд╕реЗ рдЙрд╕ рд╡рд╕реНрддреБ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдЖрдк рд░реВрдЯ рд░рд┐рдбреНрдпреВрд╕рд░ рд╕реЗ рд▓реМрдЯрддреЗ рд╣реИрдВ, рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдХреНрд╕рд░ рдкреЗрдбрд╝ рдЬреИрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред

рдЬрдм рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реНрдЯреЛрд░ рдореЗрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ (рдпрд╛ рд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдк-рдкреЗрдбрд╝) рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреЛрд░ рдХреЗ рднреАрддрд░ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдорд╛рдг / рд╕рдВрдШ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдирд╣реАрдВ, рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХрд╛ рд╕реНрд╡рдд: рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕реНрдЯреЛрд░ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рд░реВрдЯ reducer рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХрд╛ рд░реВрдЯ рд░рд┐рдбреНрдпреВрд╕рд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж рдорд┐рд▓реЗрдЧрд╛:

function counter(state = 0, action) {
  if (action.type === 'INCREMENT') {
    return state + 1; // will become the next value of store.getState() after store.dispatch()
  }
  return state;
}

рдпрджрд┐ рдЖрдк combineReducers({ foo, bar }) рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдореВрд▓ reducer _ _enerate_ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕реЗ рдЖрдкрдиреЗ рд╣рд╛рде рд╕реЗ рдПрдХ рд░реВрдЯ reducer рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

function root(state = {}, action) {
  return {
    foo: foo(state.foo, action),
    bar: bar(state.bar, action)
  }
}

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд░рд╛рдЬреНрдп рдкрд░ рдЧреБрдг рдЕрдХреНрд╕рд░ рдЖрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдореВрд▓реНрдп рдЗрд╕ рдмрд╛рдд рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ foo рдФрд░ bar рд░рд┐рдбреНрдпреВрд╕рд░ рдХреНрд░рдорд╢рдГ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддреЗ рд╣реБрдП рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЖрдк рдЙрдирдХреЗ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИрдВред

рдЙрдЪрд┐рдд рд╕рдВрдкрддреНрддрд┐ / рд╕реНрдЯреЛрд░ рдХреЗ рднрд╛рдЧ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП mapStateToProps "рдХреИрд╕реЗ" рдЬрд╛рдирддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ?

рдЖрдк mapStateToProps рд╕реЗ connect() рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдШрдЯрдХ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рд╣рд░ рдмрджрд▓рд╛рд╡ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП store.subscribe() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╕реНрдЯреЛрд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрддреНрдкрдиреНрди рдШрдЯрдХ store.getState() рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рд╕рд╣рд╛рд░рд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mapStateToProps() рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рдмрджрд▓ рдЧрдП, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдШрдЯрдХ рдХреЛ рдЙрдирдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред

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

Https://github.com/theaqua/redux-logger рдЬреИрд╕реЗ рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЬреЛрдбрд╝реЗрдВ mapStateToProps рднреА рдмреБрд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐

  • рдпрд╛ рддреЛ рдЖрдк dispatch() рдПрдХ рдПрдХреНрд╢рди рдХреЛ рднреВрд▓ рдЧрдП рдФрд░ рд╕рд┐рд░реНрдл рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХрд╣рд▓рд╛рдП,
  • рдпрд╛ рдЖрдкрдХреЗ reducer рдиреЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рдорд╛рди рдореВрд▓реНрдп рд▓реМрдЯрд╛рдпрд╛ рдЗрд╕рд▓рд┐рдП connect() mapStateToProps() рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реБрдПред

рдЗрди рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди http://redux.js.org/docs/Troublesourcing.html рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

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

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

рдХреНрдпрд╛ рдЖрдк http://redux.js.org/docs/Troublesourcing.html рд╕реЗ

рдореИрдВ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдРрд╕реЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд░рдЦрддрд╛ рд╣реИред рд╡реЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЧреБрдг рд╡реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдк-рд╡реГрдХреНрд╖ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпреЗ рд╕рдЪ рд╣реИ?

рд╣рд╛рдБред рд╕реНрдЯреЛрд░ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╕реНрдерд┐рддрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд░рдЦрддрд╛ рд╣реИред рдпрд╣ store.getState() рд╕реЗ рдЙрд╕ рд╡рд╕реНрддреБ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдЖрдк рд░реВрдЯ рд░рд┐рдбреНрдпреВрд╕рд░ рд╕реЗ рд▓реМрдЯрддреЗ рд╣реИрдВ, рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдХреНрд╕рд░ рдкреЗрдбрд╝ рдЬреИрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред

рдЬрдм рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реНрдЯреЛрд░ рдореЗрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ (рдпрд╛ рд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдк-рдкреЗрдбрд╝) рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреЛрд░ рдХреЗ рднреАрддрд░ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдорд╛рдг / рд╕рдВрдШ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдирд╣реАрдВ, рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХрд╛ рд╕реНрд╡рдд: рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕реНрдЯреЛрд░ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рд░реВрдЯ reducer рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХрд╛ рд░реВрдЯ рд░рд┐рдбреНрдпреВрд╕рд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж рдорд┐рд▓реЗрдЧрд╛:

function counter(state = 0, action) {
  if (action.type === 'INCREMENT') {
    return state + 1; // will become the next value of store.getState() after store.dispatch()
  }
  return state;
}

рдпрджрд┐ рдЖрдк combineReducers({ foo, bar }) рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдореВрд▓ reducer _ _enerate_ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕реЗ рдЖрдкрдиреЗ рд╣рд╛рде рд╕реЗ рдПрдХ рд░реВрдЯ reducer рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

function root(state = {}, action) {
  return {
    foo: foo(state.foo, action),
    bar: bar(state.bar, action)
  }
}

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд░рд╛рдЬреНрдп рдкрд░ рдЧреБрдг рдЕрдХреНрд╕рд░ рдЖрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдореВрд▓реНрдп рдЗрд╕ рдмрд╛рдд рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ foo рдФрд░ bar рд░рд┐рдбреНрдпреВрд╕рд░ рдХреНрд░рдорд╢рдГ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддреЗ рд╣реБрдП рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЖрдк рдЙрдирдХреЗ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИрдВред

рдЙрдЪрд┐рдд рд╕рдВрдкрддреНрддрд┐ / рд╕реНрдЯреЛрд░ рдХреЗ рднрд╛рдЧ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП mapStateToProps "рдХреИрд╕реЗ" рдЬрд╛рдирддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ?

рдЖрдк mapStateToProps рд╕реЗ connect() рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдШрдЯрдХ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рд╣рд░ рдмрджрд▓рд╛рд╡ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП store.subscribe() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╕реНрдЯреЛрд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрддреНрдкрдиреНрди рдШрдЯрдХ store.getState() рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рд╕рд╣рд╛рд░рд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mapStateToProps() рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рдмрджрд▓ рдЧрдП, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдШрдЯрдХ рдХреЛ рдЙрдирдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред

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

Https://github.com/theaqua/redux-logger рдЬреИрд╕реЗ рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЬреЛрдбрд╝реЗрдВ mapStateToProps рднреА рдмреБрд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐

  • рдпрд╛ рддреЛ рдЖрдк dispatch() рдПрдХ рдПрдХреНрд╢рди рдХреЛ рднреВрд▓ рдЧрдП рдФрд░ рд╕рд┐рд░реНрдл рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХрд╣рд▓рд╛рдП,
  • рдпрд╛ рдЖрдкрдХреЗ reducer рдиреЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рдорд╛рди рдореВрд▓реНрдп рд▓реМрдЯрд╛рдпрд╛ рдЗрд╕рд▓рд┐рдП connect() mapStateToProps() рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реБрдПред

рдЗрди рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди http://redux.js.org/docs/Troublesourcing.html рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

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

рдХреНрд░рдо рдореЗрдВ рдЙрддреНрддрд░ рджреЗрдирд╛:

  • Redux рдЖрдо рддреМрд░ рдкрд░ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рдкреЗрдбрд╝ рдХрд╛ рд╢реАрд░реНрд╖ рдЯреБрдХрдбрд╝рд╛ рдПрдХ рд╕рд╛рджрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╕реНрддреБ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ Immutable.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрдо рд╣реИ)ред рдЖрдк рдЙрд╕ рд╡рд╕реНрддреБ рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рд╕рдмрд╕реЗ рдЖрдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдбреЛрдореЗрди рджреНрд╡рд╛рд░рд╛ рдЪреАрдЬреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдмреНрд▓реЙрдЧ рдРрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рдЬреНрдп рдХрд╛ рдкреЗрдбрд╝ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ: { users : {}, posts : {}, comments : {}, ui : {} } ред Http://redux.js.org/docs/FAQ.html#reducers -share-state рдФрд░ http://redux.js.org/docs/FAQ.html#organizing -state-nested-data рджреЗрдЦреЗрдВред
  • рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдЬрдм рдЖрдк рдЕрдкрдирд╛ рд╕реНрдЯреЛрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдПрдХ _single_ "reducer" рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдИ рд░рд╛рдЬреНрдп рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, _all_ рдЙрдкрдпреБрдХреНрдд рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде, рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдлреИрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рдХреЛрдИ рдкреНрд░рддреНрдпрдХреНрд╖ рдЗрди-рдПрдб рд╕рдВрдкрд╛рджрди рдирд╣реАрдВ рд╣реИ - рд╕рдм рдХреБрдЫ рдЬрд┐рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреЙрдкрд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддрд┐рдпрд╛рдБ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдФрд░ рдХрд┐рд╕реА рдиреЗрд╕реНрдЯреЗрдб рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рд╕рднреА рдкреВрд░реНрд╡рдЬреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдЕрджреНрдпрддрди рдХреЛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЕрджреНрдпрддрди рддрд░реНрдХ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЫреЛрдЯреЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдЙрдк-рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЙрд╕ рддрд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд░реАрдбреНрдпреВрд╕рд░ рддрд░реНрдХ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред Redux рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА combineReducers рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ Reducer рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рджрд┐рдП рдЧрдП рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬреИрд╕реЗ: const combinedReducer = combineReducers({users : userReducer, posts : postReducer, comments : commentsReducer, ui : uiReducer});
  • рдЬрдм рднреА рд╕реНрдЯреЛрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ _any_ рдПрдХреНрд╢рди рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ Redux рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рд░рд┐рдПрдХреНрдЯ Redux connect() рдлрд╝рдВрдХреНрд╢рди рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдШрдЯрдХ рдХреЗ mapStateToProps рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреЗ рдмрд╛рдж рд╕реЗ рдХреЛрдИ рднреА рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреЗрд╕реНрдЯреЗрдб рд░рд╛рдЬреНрдп рд╕рджрд╕реНрдпрддрд╛ рдирд╣реАрдВ рд╣реИред Http://redux.js.org/docs/FAQ.html#store -setup-рд╕рджрд╕реНрдпрддрд╛рдПрдБ рджреЗрдЦреЗрдВред
  • рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХрд╛ рдирдВрдмрд░ рдПрдХ рдХрд╛рд░рдг рдЖрдкрдХреЗ рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред Http://redux.js.org/docs/FAQ.html#react -not-rerendering рджреЗрдЦреЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдбреАрдмрдЧ рдФрд░ рд▓реЙрдЧ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдРрдбрдСрди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ https://github.com/markerikson/redux-ecosystem-links/blob/master/devtools.md рдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╣реИ

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рдЪреАрдЬреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдЙрд╕ рд╕реЗ рдкрд░реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдбреИрди рдиреЗ рдХрд╣рд╛: рдЖрдорддреМрд░ рдкрд░ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдкреНрд░рд╢реНрди рдмреЗрд╣рддрд░ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рд╕реНрдХреЙрд░реНрдб рдкрд░ рд░рд┐рдПрдХреНрдЯрд┐рдлреНрд▓рдХреНрд╕ рд╕рдореБрджрд╛рдп рдореЗрдВ рдЪреИрдЯ рдЪреИрдирд▓реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рдЬреЛ Redux рд╕рд╣рд┐рдд рд░рд┐рдПрдХреНрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрдХрдиреАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдФрд░ рд╣рдореЗрд╢рд╛ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд▓рдЯрдХрд╛ рд░рд╣рддрд╛ рд╣реИред Https://www.reactiflux.com рдкрд░ рдПрдХ рдирд┐рдордВрддреНрд░рдг рд▓рд┐рдВрдХ рд╣реИред

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

http://redux.js.org/docs/faq/ReactRedux.html#why -isnt- рдореЗрд░рд╛ рдШрдЯрдХ-рдкреБрдирдГ-рдкреНрд░рддрд┐рдкрд╛рджрди-рдпрд╛-рдореЗрд░рд╛-рдорд╛рдирдЪрд┐рддреНрд░рд╕реНрдЯреИрдЯреЛрдкреНрд░реЛрдк-рд░рдирд┐рдВрдЧ

@ рд░рд┐рдЪрдм-рд╣реИрдВрдЧрдУрд╡рд░ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, @gaearon рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛:

рдпрд╛ рдЖрдкрдХреЗ рд░рд┐рдбреНрдпреВрд╕рд░ рдиреЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рдорд╛рди рдорд╛рди рд▓реМрдЯрд╛рдпрд╛ рддрд╛рдХрд┐ рдХрдиреЗрдХреНрдЯ () рдореИрдкрд╕реНрдЯреИрдЯрдЯреЙрдкреНрд░реЛрдкреНрд╕ () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рд╣реЛред

рдореИрдВ рдЗрд╕ рдлрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдерд╛

const mapStateToProps = (state, props) => {
    return { id: props.id, currentState: state[props.id] };
}

const mapDispatchToProps = (dispatch) => {
    return {
        increment: (id) => {
            dispatch({ type: 'INCREMENT', id: id })
        }
    }
}

const DumbListItem = ({
    increment,
    id,
    currentState
}) => (
        <div>
            <li onClick={() => increment()}>{id}</li>
            <span>{currentState}</span>
        </div>
    );

export const ConnectedListItem = connect(
    mapStateToProps,
    mapDispatchToProps
)(DumbListItem);

рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЙрд▓ рдореЗрдВ id рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ (рдпрд╛ рддреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ increment(id) , рдпрд╛ mapDispatchToProps рдореЗрдВ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рд╕реНрдЯреЛрд░ рдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рд╢рд╛рдпрдж рдЖрдкрдХрд╛ рдореБрджреНрджрд╛ рд╣реИред

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

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

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

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

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

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

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