Redux: рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░реНрд╕, рд░рд┐рдбреНрдпреВрд╕рд░ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рджрд┐рд╕ре░ 2015  ┬╖  106рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: reduxjs/redux

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

рддреЛ рдпрд╣рд╛рдБ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред

рд╣рд░ рдЬрдЧрд╣ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ

рдпрд╣ рдкрд╣рд▓рд╛ рд╡рд╛рд▓рд╛ Redux рд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдиреАрдЪреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реА рдЯреАрдо рд░реИрдХреЗрдЯ/рд░реАрд╕реЗрд▓реЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ

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

рддреЛ рдореЗрд░реА рдкрд╣рд▓реА рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИ- рд╕рд╛рдЭрд╛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ _everywhere_- рддрдм рднреА рдЬрдм рдбреЗрдЯрд╛ рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП myValueSelector(state) рд╕реЗ рдЕрдзрд┐рдХ state.myValue )ред рдпрд╣ рдЧрд▓рдд рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЪрд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реВрдХреНрд╖реНрдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЗ рд╕реНрдЯреЛрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдЖрджрд┐ред

рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ _more_ рдФрд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ _less_ рдХрд░реЗрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреНрд░рд┐рдпрд╛-рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИред рд░реЗрдбреНрдпреВрд╕рд░ рдмреЗрд╡рдХреВрдл рдФрд░ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛- рд▓реЗрдХрд┐рди рдирд┐рд░рдВрддрд░рддрд╛ рдЕрдЪреНрдЫреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП _consistently_ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХреБрдЫ рдХрд╛рд░рдг рд╣реИрдВ:

  1. рд░реЗрдбрдХреНрд╕-рдердВрдХ рдЬреИрд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдХреНрд╕рд░ рдЖрдкрдХреЗ рд╕реНрдЯреЛрд░ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЕрдкрдбреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА- рдХреБрдЫ "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
  2. рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░реНрд╕ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╡реЗ рдЬреЛ рдердВрдХ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ) рд╕рд╛рдЭрд╛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рдВрдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рд░реЗрдбреНрдпреВрд╕рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдиреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред
  3. Redux-thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ рдПрдХрд▓ рдХреНрд░рд┐рдпрд╛-рдирд┐рд░реНрдорд╛рддрд╛ рдХрдИ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ- рдЬреЛ рдЬрдЯрд┐рд▓ рд░рд╛рдЬреНрдп рдЕрджреНрдпрддрдиреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдмреЗрд╣рддрд░ рдХреЛрдб рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

  1. рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВред рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдбреНрдпреВрд╕рд░ (рдЬреЛрдбрд╝реЗрдВ, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рд╣рдЯрд╛рдПрдВ) рд╕реВрдЪреА _рд╕рд╛рде рд╣реА_ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
  2. рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ (рдХрдВрдЯреЗрдирд░/рдШрдЯрдХ)ред рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдЬреЛ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЬреЛрдбрд╝реЗрдВ, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рд╣рдЯрд╛рдПрдВ) рдпрд╣ updateMetadata рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред (рдЙрдореНрдореАрдж рд╣реИ) рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рднрдпрд╛рдирдХ рд╣реИред
  3. рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛-рдирд┐рд░реНрдорд╛рддрд╛ (рдЬреЛрдбрд╝реЗрдВ, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдирд┐рдХрд╛рд▓реЗрдВ) рдПрдХ рдердВрдХ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕реВрдЪреА рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИред

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

рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ "рдмрддрдЦ" рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВ

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

рдЗрд╕реЗ рдФрд░ рддреЛрдбрд╝рддреЗ рд╣реБрдП рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рдХреНрд░рд┐рдпрд╛-рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред (рд╕реАрдзреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рди рдХрд░реЗрдВред) рдЬреЛ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ (рд╕рд╛рдЭрд╛) рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рддреАрдиреЛрдВ рдХреЛ рдПрдХ рд╣реА рдкрд╛рд╕ рдореЗрдВ рдХрд╡рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред

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

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

Redux-saga рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рд╡рд╣реА рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИ рдЬреЛ рдЖрдк @dtinth рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдк рджреЛрдиреЛрдВ рдЬреЛ рдХрд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдПрдХ

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореВрд▓ рдЪрд░реНрдЪрд╛ рдХреЗ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Redux рдЧрд╛рдерд╛ рдЪрд░реНрдЪрд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ: https://github.com/paldepind/functional-frontend-architecture/issues/20#issuecomment-162822909

рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

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

"рдЕрд╢реБрджреНрдз" рддрд░реАрдХрд╛:

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ @bvaughn рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ

function createTodo(todo) {
   return (dispatch, getState) => {
       dispatch({type: "TodoCreated",payload: todo});
       if ( getState().isOnboarding ) {
         dispatch({type: "ShowOnboardingTodoCreateCongratulation"});
       }
   }
}

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

"рдХрдЪреНрдЪреА рдШрдЯрдирд╛рдУрдВ рд╕реЗ рд╕рдм рдХреБрдЫ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ" рддрд░реАрдХрд╛:

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ @ denis-sokolov @dtinth рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ:

function onboardingTodoCreateCongratulationReducer(state = defaultState, action) {
  var isOnboarding = isOnboardingReducer(state.isOnboarding,action);
  switch (action) {
    case "TodoCreated": 
        return {isOnboarding: isOnboarding, isCongratulationDisplayed: isOnboarding}
    default: 
        return {isOnboarding: isOnboarding, isCongratulationDisplayed: false}
  }
}

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

рд╕рд░рд▓реАрдХреГрдд рдЧрд╛рдерд╛ рд░рд╛рд╕реНрддрд╛ред

Redux-saga рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк рдЕрднреНрдпрд╕реНрдд рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВрдЧреЗ:

function createTodo(todo) {
   return (dispatch, getState) => {
       dispatch({type: "TodoCreated",payload: todo});
   }
}

function onboardingSaga(state, action, actionCreators) {
  switch (action) {
    case "OnboardingStarted": 
        return {onboarding: true, ...state};
    case "OnboardingStarted": 
        return {onboarding: false, ...state};
    case "TodoCreated": 
        if ( state.onboarding ) dispatch({type: "ShowOnboardingTodoCreateCongratulation"});
        return state;
    default: 
        return state;
  }
}

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

рдирд┐рдпрдореЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛:

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

рдХреНрдпрд╛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде рд╕рднреА 3 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдореЗрдВ рдХреЛрдб рдХреИрд╕реЗ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ?

рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛ рддрд░реАрдХрд╛

Redux-saga рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВрдЧреЗ

function* onboarding() {
  while ( true ) {
    take(ONBOARDING_STARTED)
    take(TODO_CREATED)
    put(SHOW_TODO_CREATION_CONGRATULATION)
    take(ONBOARDING_ENDED)
  }
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЕрдкрдирд╛ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдВ :)

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


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

  • рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдмрдЪреЗрдВрдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдЗрд╕реЗ getState рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
  • рдирд┐рд╣рд┐рдд рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ
  • рдЯреНрд░рд╛рдВрд╕рд╡рд░реНрд╕рд▓ рд▓реЙрдЬрд┐рдХ (рдЬреИрд╕реЗ рдКрдкрд░ рдХреА рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ) рдХреЛ рдЕрдкрдиреЗ рдореБрдЦреНрдп рд╡реНрдпрд╡рд╕рд╛рдп рдбреЛрдореЗрди (рдЯреВрдбреВ рдмрдирд╛рдирд╛) рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдмрдЪреЗрдВ

рдпрд╣ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкрд░рдд рднреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрдЪреНрдЪреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ/рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдИрдПрд▓рдПрдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рд▓рдкреЗрдЯрдХрд░ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡реЗ рдмреБрд▓рдмреБрд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ)ред

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

  • "TIMELINE_SCROLLED_NEAR-BOTTOM" рд╕реЗ "NEXT_PAGE_LOADED" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  • рдпрджрд┐ рддреНрд░реБрдЯрд┐ рдХреЛрдб 401 рд╣реИ, рддреЛ "REQUEST_FAILED" "USER_DISCONNECTED" рдХреА рдУрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • "HASHTAG_FILTER_ADDED" рд╕реЗ "CONTENT_RELOADED" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

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

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

рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдпрджрд┐ рдЖрдк Immutable.js рдпрд╛ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рд░реЗрдбрдХреНрд╕ рдЪреАрдЬреЗрдВ рдмрдирд╛рдИ рд╣реИрдВ рдЙрдирдореЗрдВ рдореИрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ _do_ рдПрдХ рдмрд╣реБрдд рдЧрд╣рд░реА рдШреЛрдВрд╕рд▓рд╛ рд╡рд╛рд▓реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорджрдж рдХрд░рддреА рд╣реИред

рд╡рд╛рд╣ рд╡рд╛рд╣ред рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП _not_ рдХреНрдпрд╛ рдирд┐рд░реАрдХреНрд╖рдг рд╣реИред рд╣рд╛рдВ! рд╣рдо рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ! рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ _not_ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВред

@bvaughn рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдФрд░ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдирд╛ рд╣реИред рдШрдЯрдХреЛрдВ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рд╢реБрджреНрдз-рд╕рдЬреНрдЬрд╛рдХрд╛рд░/рдорд┐рд╢реНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдк рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ (рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ)ред рдЕрдм рддрдХ рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдХрд╣рд╛ рд╣реИ рдФрд░ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ Immutable.js рдХреЗ рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд░реЗрдВрдбрд░ () рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ?

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

рдореИрдВ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдЕрдзрд┐рдХ рддреБрдЪреНрдЫ рдмрдирд╛рддреЗ рд╣реБрдП, рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл redux рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╢реНрди:

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

рд╣рд░ рдЬрдЧрд╣ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ

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

рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЬреЗрдПрд╕ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ

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

рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдХрд░реЗрдВрдирд┐рд░реНрдорд╛рддрд╛

@bvaughn рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП: https://github.com/yelouafi/redux-saga
рдЬрдм рдореИрдВрдиреЗ @yelouafi рдХреЛ рд╕рд╛рдЧ (рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмреИрдХрдПрдВрдб рдХреЙрдиреНрд╕реЗрдкреНрдЯ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛

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

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

2) рдХреНрдпрд╛ рдЖрдк рд╣реЙрдЯ рд░реАрд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдордп рдпрд╛рддреНрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рд░рд┐рдПрдХреНрдЯ redux devtools рдХреЗ рд╕рд╛рде рд╕рд╛рдл-рд╕реБрдерд░реА рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣реЙрдЯ рд░реАрд▓реЛрдбрд┐рдВрдЧ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕реНрдЯреЛрд░ рдирдП рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рднреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛, рддреЛ рдореИрдВ рдЙрд╕реЗ рдЦреЛ рджреЗрддрд╛ред

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

рей) рдпрджрд┐ рдЖрдкрдХреЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдкреНрд░рднрд╛рд╡ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд░рд╛рдЬреНрдп рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ? (рдореИрдВ рдпрд╣рд╛рдВ рдХрдИ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЗрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рди рдХрд┐ рдмрд╛рдж рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░реЗрд╖рдг)

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

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

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

@bvaughn рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП: https://github.com/yelouafi/redux-saga
рдЬрдм рдореИрдВрдиреЗ @yelouafi рдХреЛ рд╕рд╛рдЧ (рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмреИрдХрдПрдВрдб рдХреЙрдиреНрд╕реЗрдкреНрдЯ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛

рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реИ :) рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдЬреЛ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ:

var store = createStore();
store.dispatch(actions.startRequest());
store.dispatch(actions.requestResponseReceived({...});
strictEqual(isLoaded(store.getState());

рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ? рдХреБрдЫ рдЗрд╕ рддрд░рд╣?

var mock = mockFetch();
store.dispatch(actions.request());
mock.expect("/api/foo.bar").andRespond("{status: OK}");
strictEqual(isLoaded(store.getState());

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

рдЕрдЧрд░ рдХреЛрдб рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЕрдЧрд░ рдореИрдВ рд░реЗрдбреНрдпреВрд╕рд░ рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рд╡рд╣реА рдХреНрд░рд┐рдпрд╛рдПрдВ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдИ рдЬрд╛рддреА рд╣реИрдВ рд▓реЗрдХрд┐рди рдирдП рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд╕рд╛рдеред рдЬрдмрдХрд┐ рдЕрдЧрд░ рдореИрдВ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рддреЛ рджреЛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд╕рд╛рде:

1) рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред
2) рдореЗрд░реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЧрд▓рдд рд╕реНрдерд┐рддрд┐ рд╣реИред
3) рдореИрдВ рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдмрдЪрд╛рддрд╛ рд╣реВрдВ
рек) рд╕рдордп рдпрд╛рддреНрд░рд╛ рдирдП рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рд▓реЛрдб рдХрд░рддреА рд╣реИ рдФрд░ рдореБрдЭреЗ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд╛рд▓ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореБрдЭреЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдЬрдмрдХрд┐ рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд╕рд╛рде

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

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

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

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

Redux @bvaughn рдФрд░ @sompylasar рдореЗрдВ рдХреНрд╖рдгрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рд╕реЗ рддрд╛рддреНрдкрд░реНрдп рд╣реИ ? рдпрд╛ рддреЛ рдкреНрд░реЗрд╖рдг рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдлреЗрдВрдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдлреЗрдВрдХрддрд╛ рд╣реИ рддреЛ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред

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

рдпрджрд┐ рдкреВрд░рд╛ рдкреЗрдбрд╝ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ (рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд░рд╛рдЬреНрдп рдЬреЛ рд░рд┐рдПрдХреНрдЯ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ), рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдХрд╛рдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ :)

Redux рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдПрдХрд▓ рдкреНрд░реЗрд╖рдг рдПрдХ рд▓реЗрдирджреЗрди рд╕реАрдорд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ @winstonewert рдХреА рдЪрд┐рдВрддрд╛ рдХреЛ рд╕рдордЭрддрд╛ @winstonewert рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рджреВрд╕рд░рд╛ рдПрдХреНрд╢рди рдбрд┐рд╕реНрдкреИрдЪ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо 2 рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд░реЛрд▓рдмреИрдХ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

@winstonewert рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдврд╛рдВрдЪреЗ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдм рддрдХ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://github.com/stample/atom-react/blob/master/src/atom/atom.js
рдореИрдВ рдкреНрд░рддрд┐рдкрд╛рджрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рднреА рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: рдпрджрд┐ рдХрд┐рд╕реА рд░рд╛рдЬреНрдп рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпреВрдЖрдИ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд░рд╛рдЬреНрдп рд░реЛрд▓рдмреИрдХ рд╣реЛред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рддрдХ рд░рд┐рдПрдХреНрдЯ рдмрд╣реБрдд рдЦрд░рд╛рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрддрдирд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдерд╛ рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╕реНрдЯреЛрд░ рдХреЛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рд╕рд┐рдВрдХ рдкреНрд░реЗрд╖рдг рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

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

@gaearon рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ redux-batched-subcribe рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реЗрдирджреЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЬреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЗрд╖рдг рдХреЗ рдмрд╛рдж рд╕реНрдЯреЛрд░ "рдкреНрд░рддрд┐рдмрджреНрдз" рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╕рджрд╕реНрдпрддрд╛ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЕрдВрдд рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдП

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

@gaearon рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рддрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рд▓реЗрдХрд┐рди @winstonewert рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк dispatch([a1,a2]) рдФрд░ рдпрджрд┐ a2 рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рд╣рдо a1 рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рд░реЛрд▓рдмреИрдХ рдХрд░рддреЗ рд╣реИрдВред

рдЕрддреАрдд рдореЗрдВ рдореИрдВ рдЕрдХреНрд╕рд░ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдирдХреНрд▓рд┐рдХ рд╢реНрд░реЛрддрд╛ рдкрд░, рдпрд╛ рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ) рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд▓реЗрдирджреЗрди рдХреЛ рдХреЗрд╡рд▓ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ redux-batched-subscribe рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

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

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

рдХреНрдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реЗрдбреНрдпреВрд╕рд░ рдмрдврд╝рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдЬреИрд╕реЗ

const enhanceReducerWithTheAbilityToConsumeMultipleActions = (reducer =>
  (state, actions) => (typeof actions.reduce === 'function'
    ? actions.reduce(reducer, state)
    : reducer(state, actions)
  )
)

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

рд╣рд╛рдБ, рдФрд░ рдпрд╣ рдореМрдЬреВрдж рд╣реИ: https://github.com/tshelburne/redux-batched-actions

рдУрд╣ @gaearon рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рдХрд┐ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдереАрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рд╕рдорд╛рди рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИрдВ:

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

@gaearon рдЖрдЙрдЪ, рдЗрд╕реЗ рди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдмреБрд░рд╛ред : рдирд┐рд╕реНрддрдмреНрдз:


рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдЕрд╢реБрджреНрдз рдХреЛрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ

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

рд╣реИрдХрд░ рд╡реЗ рдореЗрдВ: рдлреЗрд╕рдмреБрдХ рдкрд░ рд╡реЗрдм рдРрдк рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдЬрд╣рд╛рдВ рдлреНрд▓рдХреНрд╕ рдкреИрдЯрд░реНрди рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдлреНрд▓рдХреНрд╕ рдХреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ рд╡рд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХреЛрдб рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдЬреЛ I/O рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХреЛрдб рд╣реИред

рд╣рдо рдХрд╛рдо рдкрд░ Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдареАрдХ-рдард╛рдХ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрддреА рдереАрдВ (рдЬреЛ рдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рднреА рдЕрдкрдиреЗ рдЖрдк рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИрдВ) рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмреИрдЪ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреАрди рдХреНрд░рд┐рдпрд╛рдПрдВ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреА рд╣реИрдВ: OPEN_MESSAGE_VIEW , FETCH_MESSAGE , MARK_NOTIFICATION_AS_READ ред

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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд╕рд╛рдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ (Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдореЗрдВ, рдореИрдВ рд╡реЗрдмрдХрд┐рдЯ рдХреЗ рд╡рд╛рдХреН рдкрд╣рдЪрд╛рди API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдкрдХреЗ рдмреЛрд▓рддреЗ рд╣реА рдпрд╣ onresult рдШрдЯрдирд╛ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИред рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХрд╣рд╛рдБ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

  • рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рдИрд╡реЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ, рдлрд┐рд░ рдЙрд╕реЗ рд╕реНрдЯреЛрд░ рдореЗрдВ рднреЗрдЬреЗрдВред
  • рдмрд╕ рдИрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рднреЗрдЬреЗрдВред

рдореИрдВ рдирдВрдмрд░ рджреЛ рдХреЗ рд╕рд╛рде рдЧрдпрд╛: рдмрд╕ рдХрдЪреНрдЪреА рдШрдЯрдирд╛ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рднреЗрдЬреЗрдВред

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

рдлрд┐рд░ рд░реЗрдбреНрдпреВрд╕рд░ рдЗрди рдмрд╣реБрдд рд╣реА рдЖрджрд┐рдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдмреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рддрд░реНрдХ рд╢реБрджреНрдз рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рд░рд╣рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЗрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдХрд░рдХреЗ)ред

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

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

Redux-saga рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рд╡рд╣реА рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИ рдЬреЛ рдЖрдк @dtinth рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдк рджреЛрдиреЛрдВ рдЬреЛ рдХрд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдПрдХ

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореВрд▓ рдЪрд░реНрдЪрд╛ рдХреЗ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Redux рдЧрд╛рдерд╛ рдЪрд░реНрдЪрд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ: https://github.com/paldepind/functional-frontend-architecture/issues/20#issuecomment-162822909

рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

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

"рдЕрд╢реБрджреНрдз" рддрд░реАрдХрд╛:

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ @bvaughn рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ

function createTodo(todo) {
   return (dispatch, getState) => {
       dispatch({type: "TodoCreated",payload: todo});
       if ( getState().isOnboarding ) {
         dispatch({type: "ShowOnboardingTodoCreateCongratulation"});
       }
   }
}

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

"рдХрдЪреНрдЪреА рдШрдЯрдирд╛рдУрдВ рд╕реЗ рд╕рдм рдХреБрдЫ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ" рддрд░реАрдХрд╛:

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ @ denis-sokolov @dtinth рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ:

function onboardingTodoCreateCongratulationReducer(state = defaultState, action) {
  var isOnboarding = isOnboardingReducer(state.isOnboarding,action);
  switch (action) {
    case "TodoCreated": 
        return {isOnboarding: isOnboarding, isCongratulationDisplayed: isOnboarding}
    default: 
        return {isOnboarding: isOnboarding, isCongratulationDisplayed: false}
  }
}

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

рд╕рд░рд▓реАрдХреГрдд рдЧрд╛рдерд╛ рд░рд╛рд╕реНрддрд╛ред

Redux-saga рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк рдЕрднреНрдпрд╕реНрдд рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВрдЧреЗ:

function createTodo(todo) {
   return (dispatch, getState) => {
       dispatch({type: "TodoCreated",payload: todo});
   }
}

function onboardingSaga(state, action, actionCreators) {
  switch (action) {
    case "OnboardingStarted": 
        return {onboarding: true, ...state};
    case "OnboardingStarted": 
        return {onboarding: false, ...state};
    case "TodoCreated": 
        if ( state.onboarding ) dispatch({type: "ShowOnboardingTodoCreateCongratulation"});
        return state;
    default: 
        return state;
  }
}

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

рдирд┐рдпрдореЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛:

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

рдХреНрдпрд╛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде рд╕рднреА 3 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдореЗрдВ рдХреЛрдб рдХреИрд╕реЗ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ?

рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛ рддрд░реАрдХрд╛

Redux-saga рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВрдЧреЗ

function* onboarding() {
  while ( true ) {
    take(ONBOARDING_STARTED)
    take(TODO_CREATED)
    put(SHOW_TODO_CREATION_CONGRATULATION)
    take(ONBOARDING_ENDED)
  }
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЕрдкрдирд╛ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдВ :)

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


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

  • рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдмрдЪреЗрдВрдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдЗрд╕реЗ getState рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
  • рдирд┐рд╣рд┐рдд рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ
  • рдЯреНрд░рд╛рдВрд╕рд╡рд░реНрд╕рд▓ рд▓реЙрдЬрд┐рдХ (рдЬреИрд╕реЗ рдКрдкрд░ рдХреА рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ) рдХреЛ рдЕрдкрдиреЗ рдореБрдЦреНрдп рд╡реНрдпрд╡рд╕рд╛рдп рдбреЛрдореЗрди (рдЯреВрдбреВ рдмрдирд╛рдирд╛) рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдмрдЪреЗрдВ

рдпрд╣ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкрд░рдд рднреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрдЪреНрдЪреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ/рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдИрдПрд▓рдПрдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рд▓рдкреЗрдЯрдХрд░ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡реЗ рдмреБрд▓рдмреБрд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ)ред

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

  • "TIMELINE_SCROLLED_NEAR-BOTTOM" рд╕реЗ "NEXT_PAGE_LOADED" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  • рдпрджрд┐ рддреНрд░реБрдЯрд┐ рдХреЛрдб 401 рд╣реИ, рддреЛ "REQUEST_FAILED" "USER_DISCONNECTED" рдХреА рдУрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • "HASHTAG_FILTER_ADDED" рд╕реЗ "CONTENT_RELOADED" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

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

@slorber рдпрд╣ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реИ! рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рднреЛрдВ рдФрд░ рдХрдорд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред (рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЙрдХреНрд╕ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред)

рдореИрдВ рдПрдХ рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рдерд╛ (рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ "рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдШрдЯрдХ" рдирд╛рдо рджрд┐рдпрд╛ рдерд╛)ред рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рд╣реИ рдЬреЛ рдХреБрдЫ рднреА рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ( render: () => null ), рд▓реЗрдХрд┐рди рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ (рдЬреИрд╕реЗ рд╕реНрдЯреЛрд░ рд╕реЗ) рдФрд░ рдЕрдиреНрдп рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдШрдЯрдХ рдХреЛ рддрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░реВрдЯ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдЯрд┐рд▓ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдкрд╛рдЧрд▓ рддрд░реАрдХрд╛ред :рдЕрдЯрдХ_рдмрд╛рд╣рд░_рдЬреАрдн:

рдЬрдм рдореИрдВ рд╕реЛ рд░рд╣рд╛ рдерд╛ рддрдм рдпрд╣рд╛рдБ рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рд╣реБрдИред

@winstonewert , рдЖрдк рд╕рдордп-рдпрд╛рддреНрд░рд╛ рдФрд░ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдЙрдард╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЧ/рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдордп-рдпрд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдЖрдк рд╕рд╣реА рд╣реИрдВред

@dtinth , рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдкрдХреЗ рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░/рд░реЗрдбреНрдпреВрд╕рд░ "рдбрдХреНрд╕" рдХреЛрдб рдХрд╛ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рдЕрд╢реБрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдбреЗрдЯрд╛ рд▓рд╛рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рддреБрдордиреЗ рдореБрдЭреЗ рдЦреЛ рджрд┐рдпрд╛ред рдореЗрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреЛрд╕реНрдЯ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрддрд╛ рдереАред


@winstonewert рдиреЗ рдХрд╣рд╛, "рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
@slorber рдиреЗ рдкреВрдЫрд╛, "Redux @bvaughn рдФрд░ @sompylasar рдореЗрдВ рдХреНрд╖рдгрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдпрд╛ рддреЛ рдкреНрд░реЗрд╖рдг рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдлреЗрдВрдХрддрд╛ рд╣реИ рддреЛ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред"

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

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреЛрд░ рдореЗрдВ рдХреБрдЫ рдЦреЛрдЬрдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ: [{id: 1, name: "Alex"}, {id: 2, name: "Brian"}, {id: 3, name: "Charles"}] ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдЯреЗрдХреНрд╕реНрдЯ "рдИ" рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЦреЛрдЬ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рдЖрдИрдбреА 1 рдФрд░ 3 рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 1 (рдПрд▓реЗрдХреНрд╕) рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ- рдпрд╛ рддреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдпрд╛ рджреВрд░рд╕реНрде рдбреЗрдЯрд╛ рдХреЗ рд░реАрдлреНрд░реЗрд╢ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЕрдм рд╡рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд┐рдХреЙрд░реНрдб рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЬрдм рдЖрдкрдХрд╛ рд░реЗрдбреНрдпреВрд╕рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрдЯреЛрд░ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛- рдХреНрдпреЛрдВрдХрд┐ рд░реЗрдбрдХреНрд╕-рд╕рд░реНрдЪ рдЙрд╕ рдЖрдИрдбреА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдЕрдм рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдПрдХ рдмрд╛рд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдЕрдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рдд рддрдм рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкреЗрдбрд╝ рдХрд╛ рдПрдХ рдиреЛрдб рджреВрд╕рд░реЗ рдиреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛред


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

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

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

рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдкрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред

Btw @slorber рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдореЗрд░реЗ рдорди рдореЗрдВ рдерд╛ред рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд╛ рдХрд▓реНрдкрд┐рдд рд╣реИред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдХрдИ рдиреЛрдб рд╣реИрдВред рдЙрди рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред ("рд╕рд╛рдЭрд╛" рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХреИрд╢ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рднреАрддрд░ рдХрдИ рдкреГрд╖реНрдареЛрдВ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЧрдП рд╣реИрдВред) рдЗрди рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░ рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ ("рдбрдХ") рд╣реИрдВред рдПрдХ рдЕрдиреНрдп рдиреЛрдб рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдкреЗрдЬ рдХрд╛ рднреА рдЕрдкрдирд╛ рдбрдХ рд╣реИред

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

import { fetchThing, thingSelector } from 'resources/thing/duck'
import { showError } from 'messages/duck'

export function fetchAndProcessThing ({ params }): Object {
  const { id } = params
  return async ({ dispatch, getState }) => {
    try {
      await dispatch(fetchThing({ id }))

      const thing = thingSelector(getState())

      dispatch({ type: 'PROCESS_THING', thing })
    } catch (err) {
      dispatch(showError(`Invalid thing id="${id}".`))
    }
  }
}

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ @winstonewert рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рджреВрд╕рд░рд╛ рдПрдХреНрд╢рди рдбрд┐рд╕реНрдкреИрдЪ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо 2 рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд░реЛрд▓рдмреИрдХ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

рдирд╣реАрдВ, рдореИрдВ рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬреЛ рджреЛ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ рднреЗрдЬрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдПрдХрд▓ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдиреЗ рджреЛ рдЪреАрдЬреЗрдВ рдХреА рд╣реИрдВред рдУрдкреА рдРрд╕реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд╖рдгрд┐рдХ рдЕрдорд╛рдиреНрдп рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

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

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

рдУрдкреА рдРрд╕реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд╖рдгрд┐рдХ рдЕрдорд╛рдиреНрдп рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

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

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

рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ рдирд╣реАрдВ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ. рдЦреЛрдЬ рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣реИред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдХреНрд╖рдгрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкреЗрдбрд╝ рдХреЗ рджреЛ рдиреЛрдб рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

@bvaughn рдУрд╣, рдРрд╕реЗ рд╢реБрджреНрдзрддрд╛рд╡рд╛рджреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ!

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

рдлреНрд▓рдХреНрд╕ рдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЛ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╕рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред" рдлреНрд▓рдХреНрд╕ рдбреЙрдХреНрд╕ рдиреЗ рдпрд╣ рднреА рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдпреЗ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдБ рдХрд╣рд╛рдБ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╣реИрдВ:

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

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

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

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдпрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рднреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдорд╛рдирддрд╛ рд╣реВрдВред

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

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

рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпрд╛ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрдЯреЛрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ, рд╣рдо 5 рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

  • SCOREBOARD_VIEW (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреЛрд░рдмреЛрд░реНрдб рджреЗрдЦреЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк)
  • SCOREBOARD_FETCH_SUCCESS (рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк)
  • SCOREBOARD_FETCH_FAILURE (рд╕рд░реНрд╡рд░ рд╕реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк)
  • SCOREBOARD_CLOSE (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдВрдж рдХрд░реЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк)
  • MESSAGE_BOX_CLOSE (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдкрд░ рдмрдВрдж рдХрд░реЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк)

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

рд░рд╛рдЬреНрдп рдХреЗ рдкреЗрдбрд╝ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдирд╛ рд╣реИ, рдПрдХ рд╡рд╕реНрддреБ рдЬреЛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред тАФ Redux рдХреА README

рд╡реЗ рдЗрди рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЪрд┐рдкрдХреЗ рд╣реБрдП рд╣реИрдВ:

function viewScoreboard () {
  return async function (dispatch) {
    dispatch({ type: 'SCOREBOARD_VIEW' })
    try {
      const result = fetchScoreboardFromServer()
      dispatch({ type: 'SCOREBOARD_FETCH_SUCCESS', result })
    } catch (e) {
      dispatch({ type: 'SCOREBOARD_FETCH_FAILURE', error: String(e) })
    }
  }
}
function closeScoreboard () {
  return { type: 'SCOREBOARD_CLOSE' }
}

рдлрд┐рд░ рд╕реНрдЯреЛрд░ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ (рд░рд┐рдбреНрдпреВрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╢рд╛рд╕рд┐рдд) рдЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

| рд╕реНрдЯреЛрд░/рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ | рд╡реНрдпрд╡рд╣рд╛рд░ |
| --- | --- |
| рд╕реНрдХреЛрд░рдмреЛрд░реНрдб рд╡реНрдпреВ | рдкрд░ рд╕рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рджреГрд╢реНрдпрддрд╛ SCOREBOARD_VIEW , рдкрд░ рдЭреВрдареА SCOREBOARD_CLOSE рдФрд░ SCOREBOARD_FETCH_FAILURE |
| ScoreboardLoadingIndicator | SCOREBOARD_VIEW рдкрд░ рджреГрд╢реНрдпрддрд╛ рдХреЛ рд╕рддреНрдп рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, SCOREBOARD_FETCH_* рдкрд░ рдЧрд▓рдд рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ |
| рд╕реНрдХреЛрд░рдмреЛрд░реНрдбрдбреЗрдЯрд╛ | SCOREBOARD_FETCH_SUCCESS рдкрд░ рд╕реНрдЯреЛрд░ рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ |
| рд╕рдВрджреЗрд╢рдмреЙрдХреНрд╕ | SCOREBOARD_FETCH_FAILURE рдкрд░ рджреГрд╢реНрдпрддрд╛ рдХреЛ рд╕рддреНрдп рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рд╕рдВрджреЗрд╢ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ, рдФрд░ MESSAGE_BOX_CLOSE рдкрд░ рджреГрд╢реНрдпрддрд╛ рдХреЛ рдЕрд╕рддреНрдп рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ |

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

  1. рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреБрдЫ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдХреЛрдИ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕реА рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЙрд╕рдиреЗ рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдПрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ)ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕реНрдХреЛрд░рдмреЛрд░реНрдб рд▓рд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ SHOW_MESSAGE_BOX рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреНрдпреЛрдВ рдирд╣реАрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдиреЗ SCOREBOARD_FETCH_FAILURE рдХреНрд░рд┐рдпрд╛ рдХреЛ рдареАрдХ рд╕реЗ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдПрдХ рдлрд┐рдХреНрд╕ рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЧрд░реНрдо-рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдордп-рдпрд╛рддреНрд░рд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

  1. рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдЙрд╕реА рддрд░рд╣, рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред

(рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЕрднреА рднреА рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред)

рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВред :) рдореИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рд╕рд╣рдордд рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░, viewScoreboard , рдпрд╣ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░ fetchAndProcessThing рдХреЗ рдареАрдХ рдКрдкрд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

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

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

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

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

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

рд╣рдо рдкреНрд░рддреНрдпреЗрдХ "рдмрддрдЦ" рдмрдВрдбрд▓ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдкреНрд░рдХрд╛рд░-рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдбреЙрдХреНрд╕ рдореЗрдВ рдХрд╣реАрдВ рднреА рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ;-) рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмреБрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ Redux рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд-рдХрднреА-рдХрднреА-рдЧрд▓рдд рд╡рд┐рдЪрд╛рд░ рджреЗрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ, рдПрдХ рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╕рд╣реЛрджрд░ рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ

Redux рдореЗрдВ рд░реЗрдбреНрдпреВрд╕рд░/рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдкреЗрдпрд░рд┐рдВрдЧ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдПрдХ рдмрддрдЦ рдХреА рдмрд╛рдд рд╣реИред рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ Redux/Flux рдореЙрдбрд▓ рдХреА рдореВрд▓рднреВрдд рд╢рдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ: рд░рд╛рдЬреНрдп рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░рдг рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд╢реБрд░реВ рдореЗрдВ, рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд┐рд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдЦрд░рд╛рдм рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

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

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

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

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

  • рдЕрдирд┐рд╡рд╛рд░реНрдп рд╢реИрд▓реА рдореЗрдВ, рд╕реНрдЯреЛрд░ рдХреЛ "рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ" рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП SHOW_MESSAGE_BOX рдпрд╛ SHOW_ERROR
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╢реИрд▓реА рдореЗрдВ, рд╕реНрдЯреЛрд░ рдХреЛ "рдЬреЛ рд╣реБрдЖ рдЙрд╕рдХрд╛ рдПрдХ рддрдереНрдп" рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП DATA_FETCHING_FAILED рдпрд╛ USER_ENTERED_INVALID_THING_ID ред рд╕реНрдЯреЛрд░ рддрджрдиреБрд╕рд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ SHOW_MESSAGE_BOX рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпрд╛ showError('Invalid thing id="'+id+'"') рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд┐рд░реНрдорд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддрдереНрдп рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдЖрджреЗрд╢ рд╣реИред

рдПрдХ рдмрд╛рд░ рдЬрдм рд╡рд╣ рддрдереНрдп рд╕реНрдЯреЛрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрд╕ рддрдереНрдп рдХреЛ рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рдЕрдВрджрд░ рдХрдорд╛рдВрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛

// type Command = State тЖТ State
// :: Action тЖТ Command
function interpretAction (action) {
  switch (action.type) {
  case 'DATA_FETCHING_FAILED':
    return showErrorMessage('Data fetching failed')
    break
  case 'USER_ENTERED_INVALID_THING_ID':
    return showErrorMessage('User entered invalid thing ID')
    break
  case 'CLOSE_ERROR_MESSAGE':
    return hideErrorMessage()
    break
  default:
    return doNothing()
  }
}

// :: (State, Action) тЖТ State
function errorMessageReducer (state, action) {
  return interpretAction(action)(state)
}

const showErrorMessage = message => state => ({ visible: true, message })
const hideErrorMessage = () => state => ({ visible: false })
const doNothing = () => state => state

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

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

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

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


рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд╢реБрд░реВ рдореЗрдВ, рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд┐рд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдЦрд░рд╛рдм рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

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

рд░рд┐рдПрдХреНрдЯ рдЖрдкрдХреЗ рд╕реНрдЯреЛрд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рддрдереНрдп

рдЙрд╕реА рддрд░рд╣, рдореЗрд░рд╛ рдпрд╣ рднреА рдорд╛рдирдирд╛ рд╣реИ рдХрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдПрдХ рддрдереНрдп рдХреЗ рд░реВрдк рдореЗрдВ

рд▓рд┐рдЦрдиреЗ рдФрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @dtinthред рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП

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

рдПрд╣ ... рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдирд╣реАрдВред рдореИрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВред

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

рд╡реИрд╕реЗ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдЕрдзрд┐рдХрддрд░ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рд╕рдордп рдЧреБрдЬрд╛рд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрдм рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдФрд░ рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЕрд╢реБрджреНрдз Date.now() ), рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдореИрдВ рдореИрдВ рдЙрд╕ рдЯрд╛рдЗрдорд░ рдЖрджрд┐ рдХрд╛ рдЦрдВрдбрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдХреЛ рдЙрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ "рдПрдХреНрд╢рди рдлреНрд▓реЛ" рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд╛рд░рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЙрд╕рдиреЗ рдХрд╣рд╛ рдХрд┐ рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдЬреЛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕реЗ https://github.com/yelouafi/redux-saga рджреНрд╡рд╛рд░рд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдореИрдВрдиреЗ рдЗрд╕реЗ рд╢реБрд░реВ рдореЗрдВ рдбрд┐рд╕реНрдХреЙрд░реНрдб рд░рд┐рдПрдХреНрдЯрд┐рдлреНрд▓рдХреНрд╕ рдЪреИрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред

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

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

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

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

рдкрддрд╛ рдирд╣реАрдВ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХреНрдпрд╛ рдЙрддреНрддрд░ рд╣реИ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрднреА рддрдХ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ

рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @tommikaikkonenред рдореИрдВ рдЕрднреА рднреА рдЦреБрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ рдХрд┐ "рдЙрддреНрддрд░" рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рд░рд╛рдВрд╢ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ "рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рд╕рднреА рддрд░реНрдХ рдбрд╛рд▓реЗрдВ ..." рдЦрдВрдб рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдиреЛрдЯ рдЬреЛрдбрд╝реВрдВрдЧрд╛, рдЬреЛ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП (рд╕рд╛рдЭрд╛) рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ .. Redux рдПрдХ рдмрдбрд╝реЗ рдХрджрдо рдХреА рддрд░рд╣ рдкреАрдЫреЗ рдХреА рдУрд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдРрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреАрдЦ рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ рдЬреЛ рдШрдЯрдирд╛рдУрдВ (рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕), рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддреА рд╣реИрдВред рдореИрдВ рдЕрднреА рднреА рдПрдХ рд╕рд╛рд░реНрдердХ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рднреА рдРрд╕рд╛ рд╣реА рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ?

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

@jayesbe рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реЗ рдЖрддреЗ рд╣реБрдП, рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЙрднрд░рддреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде https://www.leaseweb.com/labs/2015/08/object-рдЙрдиреНрдореБрдЦ-programming- is-

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

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

рдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ Redux рдЖрддрд╛ рд╣реИ: рдЖрд╡реЗрджрди рд░рд╛рдЬреНрдп рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рдиреЗ рдФрд░ рдЖрд╡реЗрджрди рд░рд╛рдЬреНрдп рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

@johnsoftek рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдкрд┐рдЫрд▓реЗ 10 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░.. рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдБ рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдпрд╣рд╛рдБ OO рдФрд░ рдЧреИрд░-OO рдХреЗ рдмреАрдЪ рдмрд╣рд╕ рдореЗрдВ рдкрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рдореБрджреНрджрд╛ рд╣реИ рд╡рд╣ рдХреЛрдб рдФрд░ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рд╣реИред

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

рдореИрдВ рдЬреЛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдордЭреМрддрд╛ рд╣реИ .. рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднреАрдбрд╝ рдорд╛рдирдХреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

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

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

export default Application {
    constructor(config) {
        this.config = config;
    } 

    config() {
        return this.config;
    }

    login(data, cb) {
        const url = [
            this.config.url,
            '?client=' + this.config.client,
            '&username=' + data.username,
            ....
        ].join('');

        fetch(url).then((responseText) => {
            cb(responseText);
        })
    }

    ... more business logic 
}

рдореИрдВрдиреЗ рдЗрд╕ рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд░рдЦрд╛ .. Redux рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ

import { Provider } from 'react-redux';

export default class MyProvider extends Provider {
    getChildContext() {
        return Object.assign({}, Provider.prototype.getChildContext.call(this), {
            app: this.props.app
        });
    }

    render() {
        return this.props.children;
    }
}
MyProvider.childContextTypes = {
    store: React.PropTypes.object,
    app: React.PropTypes.object
}

рддрдм рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛

import Application from './application';
import config from './config';

class MyApp extends Component {
  render() {
    return (
      <MyProvider store={store} app={new Application(config)}>
        <Router />
      </MyProvider>
    );
  }
}

AppRegistry.registerComponent('MyApp', () => MyApp);

рдЕрдВрдд рдореЗрдВ рдореЗрд░реЗ рдШрдЯрдХ рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдРрдк рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ ..

class Login extends React.Component {
    render() {
        const { app } = this.context;
        const { state, actions } = this.props;
        return (
              <View style={style.transparentContainer}>
                <Form ref="form" type={User} options={options} />
                <Button 
                  onPress={() => {
                    value = this.refs.form.getValue();
                    if (value) {
                      app.login(value, actions.login);
                    }
                  }}
                >
                  Login
                </Button>
              </View>
        );
    }
};
Login.contextTypes = {
  app: React.PropTypes.object,
};

function mapStateToProps(state) {
  return {
      state: state.default.auth
  };
};

function mapDispatchToProps(dispatch) {
  return {
    actions: bindActionCreators(authActions, dispatch),
    dispatch
  };
}

export default connect(mapStateToProps, mapDispatchToProps)(Login);

рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореЗрд░реЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред

                      app.login(value, actions.login);

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рд╕рдордп рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА рд╣реИред

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

рдореИрдВ рдЬреЛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдордЭреМрддрд╛ рд╣реИ .. рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднреАрдбрд╝ рдорд╛рдирдХреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдпрд╣рд╛рдВ "рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднреАрдбрд╝" рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА: рдкрд▓рдХ:ред Redux рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдорд╛рдзрд╛рди рдЪреБрдирдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рд╣рдардзрд░реНрдореА рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╡реЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реАрдб рдФрд░ рд░рд╛рдЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрдЧреНрд╕ рдХреЛ рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╕рд╛рджреЗ рд╡рд╕реНрддреБрдПрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреНрд░рд┐рдпрд╛рдПрдВ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рдлрд┐рд░ рд╕реЗ рдЦреЗрд▓рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХреНрд░рдордмрджреНрдз рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рд░рд╛рдЬреНрдп MyAppState рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрдЬрд╛рдп рд╕рд╛рджрд╛ рд╡рд╕реНрддреБ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЗрд╕реЗ deserialize рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ localStorage рдореЗрдВ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рд╣рдореЗрдВ рд╕рдордп рдпрд╛рддреНрд░рд╛ рдФрд░ рд╣реЙрдЯ рд░реАрд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рд╕реЗ рд╕рдВрд╕реНрдорд░рдг рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рд╕рднреА рд▓рд╛рднреЛрдВ рдХрд╛ рд╣рдорд╛рд░реЗ "рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднреАрдбрд╝" рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВрдиреЗ рдЗрд╕ рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд░рдЦрд╛ .. Redux рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ

рдпрд╣ рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрджрд╛рд░ рд▓рдЧрддрд╛ рд╣реИред рд╣рдореЗрдВ рд╡рд░реНрдЧреЛрдВ рд╕реЗ рддрд░реНрдХрд╣реАрди рдШреГрдгрд╛ рдирд╣реАрдВ рд╣реИред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рд╡реЗ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рд╕реАрдорд┐рдд рд╣реИрдВ (рдЬреИрд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдпрд╛ рдПрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП), рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдареАрдХ рд╣реИред

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

import { Component } from 'react';
import { Provider } from 'react-redux';

export default class MyProvider extends Component {
    getChildContext() {
        return {
            app: this.props.app
        };
    }

    render() {
        return (
            <Provider store={this.props.store}>
                {this.props.children}
            </Provider>
        );
    }
}
MyProvider.childContextTypes = {
    app: React.PropTypes.object
}
MyProvider.propTypes = {
    app: React.PropTypes.object,
    store: React.PropTypes.object
}

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдЖрд╕рд╛рди рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдХрдо рдирд╛рдЬреБрдХ рд╣реИред

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

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

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

const appSelector = createSelector(
   (state) => state.config,
   (config) => new Application(config)
)

рдФрд░ рдлрд┐рд░ mapStateToProps рдореЗрдВ:

function mapStateToProps(state) {
  return {
      app: appSelector(state)
  };
};

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

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

рддреЛ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЖрдкрдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

: +1: рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдореИрдВ MyProvider рдореЗрдВ рд╕реБрдзрд╛рд░ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред Redux рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реАрдЦрддреЗ рд╕рдордп рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ "рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕" рдХреА рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдзрд╛рд░рдгрд╛ рдереА .. рдпрд╣ рддрдм рддрдХ рдЬреАрд╡рдВрдд рдирд╣реАрдВ рдереА рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдмрд░рд╛рдмрд░реА рдирд╣реАрдВ рдХреАред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рддрд░рд╣ рдХрд╛ рдЕрд╣рд╕рд╛рд╕ рдерд╛ рдЬреЛ рдРрд╕рд╛ рдерд╛.. рдпреЗ рдРрд╕реА рдШрдЯрдирд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

@winstonewert createSelector рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ? рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣реИред рд╕рд╛рде рд╣реА, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рднреА рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдШрдЯрдХ рдкрд░ mapStateToProps рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╣рд░ рдмрд╛рд░ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ? рдореЗрд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдХреЛ рддрддреНрдХрд╛рд▓ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╕реБрдЭрд╛рд╡ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╕реНрддреБрдПрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ .. рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рддрддреНрдХрд╛рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

Redux рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реАрдЦрддреЗ рд╕рдордп рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ "рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕" рдХреА рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдзрд╛рд░рдгрд╛ рдереА .. рдпрд╣ рддрдм рддрдХ рдЬреАрд╡рдВрдд рдирд╣реАрдВ рдереА рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдмрд░рд╛рдмрд░реА рдирд╣реАрдВ рдХреАред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рддрд░рд╣ рдХрд╛ рдЕрд╣рд╕рд╛рд╕ рдерд╛ рдЬреЛ рдРрд╕рд╛ рдерд╛.. рдпреЗ рдРрд╕реА рдШрдЯрдирд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

createSelector рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ?

рдпрд╣ рд░реАрд╕реЗрд▓реЗрдХреНрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬреЛ рдмрд┐рдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рджрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдФрд░ рд╡реЗрдм рдкрд░, рджреЗрд╢реА рдкрд░, рд╕рд░реНрд╡рд░ рдкрд░ рдЖрджрд┐ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╣ред рдареАрдХ рдорд┐рд▓ рдЧрдпрд╛ред рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред рдЪреАрдпрд░реНрд╕ред

MapStateToProps рдФрд░ mapDispatchToProps рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдиреЗрд╕реНрдЯ рди рдХрд░реЗрдВ

рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдРрд╕реЗ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдЬрд╣рд╛рдВ рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЦреЛ рдЧрдП рдереЗ рдЬрдм Redux mapStateToProps рдФрд░ mapDispatchToProps рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ Reactjs/react-redux#324)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ @gaearon рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдиреЗрд╕реНрдЯреЗрдб рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╡рд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИ:

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

@bvaughn рдиреЗ рдХрд╣рд╛

рд░реЗрдбреНрдпреВрд╕рд░ рдмреЗрд╡рдХреВрдл рдФрд░ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

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

рдЗрд╕рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ ...

рд╣рдореЗрдВ рдЕрднреА рднреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд░рд┐рдбреНрдпреВрд╕рд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

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

рдЕрдзрд┐рдХрд╛рдВрд╢ рд░рд╛рдЬреНрдп-рдЕрджреНрдпрддрди рддрд░реНрдХ рдХреЛ рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдпрд╣ рд▓рд╛рдн рд╣реИред

@dtinth рдмрд╕ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рд░рд╛рдЬреНрдп-рдЕрджреНрдпрддрди рддрд░реНрдХ" рдХрд╣рдХрд░ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рд╣реИ?

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

рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ @tommikaikkonen рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рд▓реЗрдЦрди рдЬрдЯрд┐рд▓

@sompylasar "рдмрд┐рдЬрдиреЗрд╕ рд▓реЙрдЬрд┐рдХ" рдФрд░ "рд╕реНрдЯреЗрдЯ-

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЭреБрдХрд╛рд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .. рдореЗрд░реА рдХреНрд░рд┐рдпрд╛рдПрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЗрдирдкреБрдЯ рдкрд░ рд▓реБрдХрдЕрдк рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд╕рднреА рдХрд╛рд░реНрдп рд╢реБрджреНрдз рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рднреА "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рдХреЛ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ .. рдпрд╣ рдореЗрд░рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реЗрдбреНрдпреВрд╕рд░

export default function reducer(state = initialState, action = {}) {
  switch (action.type) {
    case 'FOO_REQUEST':
    case 'FOO_RESPONSE':
    case 'FOO_ERROR':
    case 'FOO_RESET':
      return {
        ...state,
        ...action.data
      }; 
    default:
      return state;
  }
}

рдореЗрд░реА рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рд┐рдпрд╛рдПрдВ:

export function fooRequest( res ) {
  return {
    type: 'FOO_REQUEST',
    data: {
        isFooing: true,
        toFoo: res.saidToFoo
    }
  };
}

export function fooResponse( res ) {
  return {
    type: 'FOO_RESPONSE',
    data: {
        isFooing: false,
        isFooed: true,
        fooData: res.data
    }
  };
}

export function fooError( res ) {
  return {
    type: 'FOO_ERROR',
    data: {
        isFooing: false,
        fooData: null,
        isFooed: false,
        fooError: res.error
    }
  };
}

export function fooReset( res ) {
  return {
    type: 'FOO_RESET',
    data: {
        isFooing: false,
        fooData: null,
        isFooed: false,
        fooError: null,
        toFoo: true
    }
  };
}

рдореЗрд░рд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рд╕реНрддреБ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд ..

export default class FooBar
{
    constructor(store)
    {
        this.actions = bindActionCreators({
            ...fooActions
        }, store.dispatch);
    }

    async getFooData()
    {
        this.actions.fooRequest({
            saidToFoo: true
        });

        fetch(url)
        .then((response) => {
            this.actions.fooResponse(response);
        })
    }
}

рдпрджрд┐ рдЖрдк рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рднреА рд╕рд░реНрд╡реЛрддреНрддрдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рдерд╛ .. рдореИрдВрдиреЗ рдЕрдВрддрддрдГ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЗрд╕ рдХреЗрдВрджреНрд░реАрдп рдмрд┐рдВрджреБ рдкрд░ рдбрд┐рд╕реНрдкреИрдЪрд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рдФрд░ рдмрд╕ рдЧрдпрд╛ред рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ рдпрд╣рд╛рдВ рдЕрд╕рд╛рдЗрди рдХреА рдЧрдИ рд╣реИрдВред

рдореИрдВ рдЕрдм рдХрд╣реАрдВ рднреА mapDispatchToProps() рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ред Redux рдХреЗ рд▓рд┐рдП рдореИрдВ рдЕрдм рдХрдиреЗрдХреНрдЯреЗрдб рдШрдЯрдХ рдмрдирд╛рддреЗ рд╕рдордп рдХреЗрд╡рд▓ mapStateToProps рдХрд░рддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ .. рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

class SomeComponent extends React.Component {
    componentWillReceiveProps(nextProps) {
        if (nextProps.someFoo != this.props.someFoo) {
            const { app } = this.context;
            app.actions.getFooData();
        }
    }
}
SomeComponent.contextTypes = {
    app: React.PropTypes.object
};

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

рдЗрд╕ рддрд░рд╣ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдореВрд▓ "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ред рдЪреВрдВрдХрд┐ рдореЗрд░рд╛ рд░рд╛рдЬреНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдкрд░ рдмрдирд╛ рд╣реБрдЖ рд╣реИ .. рдпрд╣ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрдк рдЕрдкрдирд╛ "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

@jayesbe рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕

    case 'FOO_REQUEST':
    case 'FOO_RESPONSE':
    case 'FOO_ERROR':
    case 'FOO_RESET':
      return {
        ...state,
        ...action.data
      }; 
export function fooRequest( res ) {
  return {
    type: 'FOO_REQUEST',
    data: {
        isFooing: true,
        toFoo: res.saidToFoo
    }
  };
}

@jayesbe рдореЗрд░реЗ рдХрд╛рд░реНрдп рдФрд░

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

рдПрдХ рдЪрд░рдо рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рджреЗрдЦреЗрдВ:
"рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЖрд░рдЯреАрдПрд╕ рдЗрдВрдЬрди рдФрд░ Desyncs рдХреА рдПрдХ рдХрд╣рд╛рдиреА" @ForrestTheWoods
https://blog.forrestthewoods.com/synchronous-rts-engines-and-a-tale-of-desyncs-9d8c3e48b2be

рел рдЕрдкреНрд░реИрд▓ реирежрезрем рдХреЛ рд╢рд╛рдо рел:релрек рдмрдЬреЗ, "рдЬреЙрди рдмрд╛рдмрд╛рдХ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд░рд╛рдЬреНрдп-рдЕрджреНрдпрддрди рддрд░реНрдХ рдХреЗ рдмрд╣реБрдордд рдХреЛ рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдпрд╣ рд▓рд╛рдн рд╣реИ
рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛

@dtinth https://github.com/dtinth рдмрд╕ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╣ рдХрд░
"рд░рд╛рдЬреНрдп-рдЕрджреНрдпрддрди рддрд░реНрдХ" рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рд╣реИ?

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

@LumiaSaki рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд░рдЦрддреЗ рд╣реБрдП рдЕрдкрдиреЗ

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

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рдЕрдкрдиреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ:

let {reducer, actions} = defineActions({
   fooRequest: (state, res) => ({...state, isFooing: true, toFoo: res.saidToFoo}),
   fooResponse: (state, res) => ({...state, isFooing: false, isFooed: true, fooData: res.data}),
   fooError: (state, res) => ({...state, isFooing: false, fooData: null, isFooed: false, fooError: res.error})
   fooReset: (state, res) => ({...state, isFooing: false, fooData: null, isFooed: false, fooError: null, toFoo: false})
})

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

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рдЕрдкрдиреЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рд░рдЦрдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХрд╛ рд░реЗрдбреНрдпреВрд╕рд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдФрд░ рдпрд╣ рдЬреЛ рдЪрд╛рд╣реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдЖрдкрдХрд╛ рд░реЗрдбреНрдпреВрд╕рд░ рдЙрддрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

function reducer(state, action) {
    if (action.data) {
        return {...state, ...action.data}
   } else {
        return state;
   }
}

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

  • рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рднрд╛рдЧред рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб, рд╕рд┐рд╕реНрдЯрдо рд╕рдордп, рдпрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕ рднрд╛рдЧ рдХреЛ I/O рдлрд╝рдВрдХреНрд╢рди (рдпрд╛ рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░) рджреНрд╡рд╛рд░рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╡реНрдпрд╡рд╕рд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╣рддрд╛ рд╣реВрдВред

рдПрдХ рдЖрдИрдбреАрдИ-рдЬреИрд╕реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдРрдк рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдЪрд▓рд╛рдПрдЧрд╛ред (рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рдПрд╕рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд╕реНрдЯреЛрд░ рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп redux-thunk рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред)

js export async function runApp (store) { try { store.dispatch({ type: 'startCompiling' }) const compiledApp = await compile(store) store.dispatch({ type: 'startRunning', app: compiledApp }) } catch (e) { store.dispatch({ type: 'errorCompiling', error: e }) } }

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

``` рдЬреЗрдПрд╕
рдЖрдкрдХреЛ 'updeep' рд╕реЗ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ

рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХрд╛рд╕реНрдЯ рд░рд┐рдбреНрдпреВрд╕рд░ = рдХреНрд░рд┐рдПрдЯрд░реЗрдбреНрдпреВрд╕рд░ ({
// [рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдирд╛рдо]: рдХреНрд░рд┐рдпрд╛ => рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ => рдЕрдЧрд▓рд╛ рд░рд╛рдЬреНрдп
рдкреНрд░рд╛рд░рдВрдн рд╕рдВрдХрд▓рди: () => рдпреВ ({рд╕рдВрдХрд▓рди: рд╕рддреНрдп}),
рддреНрд░реБрдЯрд┐ рд╕рдВрдХрд▓рди: ({рддреНрд░реБрдЯрд┐}) => рдЖрдк ({рд╕рдВрдХрд▓рди: рдЧрд▓рдд, рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐: рддреНрд░реБрдЯрд┐}),
рд╕реНрдЯрд╛рд░реНрдЯрд░рдирд┐рдВрдЧ: ({рдРрдк}) => рдпреВ({
рдЪрд▓ рд░рд╣рд╛ рд╣реИ: () => рдРрдк,
рд╕рдВрдХрд▓рди: рдЭреВрдард╛
}),
рд╕реНрдЯреЙрдкрд░рдирд┐рдВрдЧ: () => рдпреВ ({рд░рдирд┐рдВрдЧ: рдлреЙрд▓реНрд╕}),
рдбрд┐рд╕реНрдХрд╛рд░реНрдбрдХрдВрдкрд╛рдЗрд▓ рдПрд░рд░: () => рдпреВ ({рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐: рдЕрд╢рдХреНрдд}),
//...
})
```

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

@dtinth рдмрдврд╝рд┐рдпрд╛ рд╣реИ, рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреНрдпреЛрдВрдХрд┐ https://github.com/reactjs/redux/issues/1171#issuecomment -+реиреж,релрен,реореи,ренрекреж рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрдпрд╛ рдЖрдк рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рджрд┐рдЦрддрд╛ рд╣реИ https://github.com/reactjs/redux/ рдореБрджреНрджреЛрдВ/резрезренрез#рдореБрджреНрджреЗ -реирежрелреореореорелрейрей - рдпрд╣ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рд░рд╛рдЬреНрдп рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЕрдкрдбреЗрдЯ рдлреИрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП

@winstonewert

Redux рдХрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкреИрдЯрд░реНрди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ: рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд░рдЦрддреЗ рд╣реБрдП рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рд╕рд░рд▓ рд░рдЦреЗрдВред

рдЖрдк рд░реВрдбрд░реНрд╕ рдореЗрдВ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреИрд╕реЗ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рдЙрдиреНрд╣реЗрдВ рд╢реБрджреНрдз рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ?

рдЕрдЧрд░ рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рднреНрд░реВрдг() рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ .. рддреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ред рдореБрдЭреЗ рдЕрднреА рддрдХ рдПрдХ рдРрд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдЬрдЯрд┐рд▓ рддрд░реНрдХ" рд╣реИ

@jayesbe : рдЙрд╣ ... "рдЬрдЯрд┐рд▓" рдФрд░ "рд╢реБрджреНрдз" рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╣реИрдВред рдЖрдкрдХреЗ рдкрд╛рд╕ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рдЕрдВрджрд░ _really_ рдЬрдЯрд┐рд▓ рд╕рд╢рд░реНрдд рддрд░реНрдХ рдпрд╛ рд╣реЗрд░рдлреЗрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рддрдХ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдХреЗ рдЗрд╕рдХреЗ рдЗрдирдкреБрдЯ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ, рдпрд╣ рдЕрднреА рднреА рд╢реБрджреНрдз рд╣реИред

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

@markerikson рдареАрдХ рддрд░реНрдХ рдХрдерди рдПрдХ рдмрд╛рдд рд╣реИ .. рд▓реЗрдХрд┐рди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛? рдЬреИрд╕реЗ рдХрд╣реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рддреАрди рдЕрдиреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рджреЛ рдЕрд▓рдЧ рдФрд░ рдЕрд▓рдЧ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИред рд╡рд╣ рддрд░реНрдХ + рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдЬреИрд╕реЗ рдЙрдиреНрд╣реЗрдВ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░рд╛ рд░рд╛рдЬреНрдп рдбреЗрдЯрд╛/рдореЙрдбрд▓ рд╕реНрдерд┐рддрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИ, рджреЗрдЦреЗрдВ рд░рд╛рдЬреНрдп рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рд▓реЗрдХрд┐рди рдЙрд╕ рд░рд╛рдЬреНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╣реИред рдореЗрд░рд╛ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕реНрдерд┐рддрд┐ рдмрд╕ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ .. рдЬреЛ рдХрд┐ рдореЗрд░реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЗрддрдирд╛ рджреБрдмрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИред

@jayesbe : рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдХрднреА рдХрд╣рд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдПрдХ (currentState + action) -> newState ред

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

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

@markerikson рд╡рд┐рд╖рдп "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╣рд╛рдБ рдЬрд╛рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐.. рдпрд╣ рд╕рдм рдЖрд╡реЗрджрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рд╣реИрдВред рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддреЛ рдЕрдиреНрдпред рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣реА рд╕рдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреБрдмрд▓рд╛ рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реЛред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдзреНрдпрд╛рди рджреЗрдВ, рд╡рд╣ рд╕рдм рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреВрдЫреЗ рдЧрдП рдореБрджреНрджреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреВрдВрдЧрд╛ред

рдЕрдЧрд░ рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рднреНрд░реВрдг() рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ .. рддреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ред рдореБрдЭреЗ рдЕрднреА рддрдХ рдПрдХ рдРрд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдЬрдЯрд┐рд▓ рддрд░реНрдХ" рд╣реИ

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

k рддрд░реНрдХ рдХрдерди рдПрдХ рдмрд╛рдд рд╣реИ .. рд▓реЗрдХрд┐рди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛? рдЬреИрд╕реЗ рдХрд╣реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рддреАрди рдЕрдиреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рджреЛ рдЕрд▓рдЧ рдФрд░ рдЕрд▓рдЧ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИред рд╡рд╣ рддрд░реНрдХ + рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдЬреИрд╕реЗ рдЙрдиреНрд╣реЗрдВ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

function createFoobar(dispatch, state, updateRegistry) {
   dispatch(createFoobarRecord());
   if (updateRegistry) {
      dispatch(updateFoobarRegistry());
   } else {
       dispatch(makeFoobarUnregistered());
   }
   if (hasFoobarTemps(state)) {
      dispatch(dismissFoobarTemps());
   }
}

Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдиреБрд╢рдВрд╕рд┐рдд Redux рддрд░реАрдХрд╛ рдПрдХ рдПрдХрд▓ CREATE_FOOBAR рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрди рд╕рднреА рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред

@winstonewert :

Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдиреБрд╢рдВрд╕рд┐рдд Redux рддрд░реАрдХрд╛ рдПрдХ рдПрдХрд▓ CREATE_FOOBAR рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрди рд╕рднреА рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред

рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд╣реАрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдореИрдВ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рд╢реЛрдз рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВ рдбреИрди рд╕реЗ рд╕реАрдзреЗ "рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ" рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред http://redux.js.org/docs/FAQ.html#actions -multiple-actions рджреЗрдЦреЗрдВ рдФрд░ рдбреИрди рджреНрд╡рд╛рд░рд╛ SO рдкрд░ рдпрд╣ рдЙрддреНрддрд░ рджреЗрдЦреЗрдВред

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

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

рдПрдХрдорд╛рддреНрд░ рдХрдард┐рди рдФрд░ рддреЗрдЬрд╝ рдирд┐рдпрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ "рдХрд╛рд░реНрд░рд╡рд╛рдИ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдореЗрдВ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рдж, рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рд╢реБрджреНрдз рдирд┐рд░реНрдзрд╛рд░рдгрд╛"ред рд╡рд╣ рджреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рдЙрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛? рдХреБрдЫ рдРрд╕рд╛ рдЦреЛрдЬреЗрдВ рдЬреЛ рдЖрдкрдХреЗ рдХрд╛рдо рдЖрдПред рдирд┐рд░рддрдВрд░рддрд╛ рдмрдирд╛рдП рд░рдЦреЗрдВред рдЬрд╛рдирд┐рдП рдЖрдк рдЗрд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдУред

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

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

рдореИрдВ рдЬрд┐рд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ:

  • рдХреНрдпрд╛ рдХрд░реЗрдВ : рдПрдХреНрд╢рди/рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░
  • рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ : рдорд┐рдбрд▓рд╡реЗрдпрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЬреЛ 'рдПрд╕рд┐рдВрдХ' рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рдПрдкреАрдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред)
  • рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░реЗрдВ : рд░реЗрдбреНрдпреВрд╕рд░

рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ, рдбреИрди рдХрд╛ рдХрдерди рдерд╛:

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

рдЙрд╕ рд╕реЗ, рдореИрдВ рдЗрд╕реЗ рд▓реЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреБрд╢рдВрд╕рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рддрд┐ рдШрдЯрдирд╛ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рд╡рд╣реА рдХрд░реЗрдВ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@winstonewert : рдбреИрди рдХрд╛ " рд░реЗрдбреНрдпреВрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрдиреА рдЬрд╛рддреА рд╣реИ" рдмрдирд╛рдо "рдХрдИ рд░реЗрдбреНрдпреВрд╕рд░ рдПрдХ рд╣реА рдПрдХреНрд╢рди рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВ"ред рдбреИрди рдПрдХ рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдкрд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред рдЕрдиреНрдп "рдмрддрдЦ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд░реЗрдбреНрдпреВрд╕рд░ рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрд╣реБрдд рдХрд╕рдХрд░ рдмрдВрдбрд▓ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рддреЛ, рдпрд╣ рдЙрджрд╛рд╣рд░рдг "рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ "рдореЗрд░реЗ рд░реЗрдбреНрдпреВрд╕рд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХрд┐рддрдиреЗ рд╣рд┐рд╕реНрд╕реЗ рдЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ"ред

рд▓реЗрдХрд┐рди, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рд╡рд╣реА рдХрд░реЗрдВ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

:+1:

@sompylasar рдореБрдЭреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреЗ рд╕реЗ рдореЗрд░реЗ рддрд░реАрдХреЛрдВ рдХреА рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрдкрдиреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдЪреАрдпрд░реНрд╕ред

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рдмрд╛рдд рд╣реИред

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

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреНрд░рд╢реНрди рдореЗрдВ, рд╡рд╣ рдХрд╣рддрд╛ рд╣реИ:

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

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

рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд╕рдорд╛рди рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

1) рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк combineReducers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЙрдк-рдбреЛрдореЗрди рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реЗрдбреНрдпреВрд╕рд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк:

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

2) рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЪрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдХреБрдЫ рд░рд╛рдЬреНрдп рдЕрджреНрдпрддрди рдпрд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреНрдпрд╛ рдЖрдк:

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

рддреЛ рд╣рд╛рдБ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдУрд╡рд░рд▓реИрдк, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирд╕рд┐рдХ рддрд╕реНрд╡реАрд░ рдореЗрдВ рдЕрдВрддрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣рд╛рдВ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВред

@markerikson рддреЛ рдЖрдкрдХреА рд╕рд▓рд╛рд╣ рд╣реИ 'рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдорд┐рд▓реЗ рд╣реИрдВ', рдФрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдпрд╛ рд░рд┐рдбреНрдпреВрд╕рд░ рдкрд░ 'рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ' рдХреЛ рдХреИрд╕реЗ рд╕рдВрддреБрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рд╣рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдХрд╛ рд▓рд╛рдн рднреА рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рд╛рдВред рд░реЗрдбрдХреНрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдбреНрдпреВрд╕рд░ _have_ рд╢реБрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЗ 0.00001% рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ _рдирд╣реАрдВ__ рд╢реБрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ "рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдВ" рд░рд╣рддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреВрдВрдХрд┐ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдЕрд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реИ, _if_ рдЖрдк рдЕрдкрдиреЗ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрдорд╛рдг рддрд░реНрдХ рдХреЛ рд╢реБрджреНрдз, рдорд╣рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ! рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдареАрдХ рд╣реИред

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

@cpsubrian

рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░реЗрдВ: рд░реЗрдбреНрдпреВрд╕рд░

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


@markerikson @LumiaSaki

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдЕрд╢реБрджреНрдз рд╣реЛрдиреЗ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд░рд╣рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рджреЗрдЦреЗрдВ http://stackoverflow.com/a/34623840/82609

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

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдЕрдиреБрднрд╡ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХрдорд┐рдпреЛрдВ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ :) рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдпрд╣рд╛рдВ рднреА рджреЗрдЦреЗрдВ: https://github.com/reactjs/redux/issues/1171#issuecomment -167585575

рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░рд▓ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдЦреНрдд рдирд┐рдпрдо рдареАрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдкрдиреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдпрд╣ рднреА рджреЗрдЦреЗрдВ https://github.com/slorber/scalable-frontend-with-elm-or-redux

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

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

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

рд╕реНрдЯреЛрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдШрдЯрдХреЛрдВ/рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯреЛрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реНрдЯреЛрд░ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдиреЛрдб рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдШрдЯрдХреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЬрдм рдШрдЯрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рджреВрд╕рд░реА рддрд░рдл рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

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

dispatch(updateItem({name: <text variable>}));

, рдФрд░ рдХреНрд░рд┐рдпрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ:

const updateItem = (updatedData) => {type: "UPDATE_ITEM", updatedData}

рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд░реЗрдбреНрдпреВрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдмрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

Object.assign({}, item, action.updatedData)

рдЖрдЗрдЯрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЯреЛрдбреЛ рдЖрдЗрдЯрдо рдХреЗ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдХреНрд░рд┐рдпрд╛ рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╛рдиреА:

updateItem({description: <text variable>})

рдЬрдм рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рд╡рд░рдг рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

@dcoellarb

рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рд╣реИ рдЬреЛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╣реЛрдЧрд╛ред

рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

const {reducer, actions, selector} = makeRecord({
    name: TextField,
    description: TextField,
    completed: BooleanField
})

рдЬрд╣рд╛рдВ MakeRecord рдореЗрд░реЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рдбреНрдпреВрд╕рд░, рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдпрд╣ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рд╕рд╛рдл рдкреИрдЯрд░реНрди рдореЗрдВ рдлрд┐рдЯ рди рд╣реЛ, рддреЛ рдореИрдВ makeRecord рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХрд╕реНрдЯрдо рд░реЗрдбреНрдпреВрд╕рд░/рдХреНрд░рд┐рдпрд╛/рдЪрдпрдирдХрд░реНрддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред

tks @winstonewert рдореБрдЭреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП

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

@sompylasar рдареАрдХ рд╣реИ, рдореИрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдкреАрдЖрдИ/рдмрд╛рдХреА рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕реНрдЯреЛрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рд╣реА рд╣реИ? рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓реЛрдХреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдШрдЯрдХреЛрдВ/рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╣реИ, рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╕реНрдЯреЛрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдХрд░ рд╕рдХреЗрдВ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдбреЗрдЯрд╛ рднреЗрдЬреЗрдВ, рдореБрдЭреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ :(ред

@dcoellarb рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рд╕рдВрдЦреНрдпрд╛, рд▓реЗрдХрд┐рди рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрд┐рдд рд╡рд╕реНрддреБ)ред рдпрд╣ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕реНрдЯреЛрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдЯреЛрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорди рдирд╣реАрдВ рд╣реИред рд╕реНрдЯреЛрд░ рдФрд░ рд╡реНрдпреВ рджреЛрдиреЛрдВ рдХреЛ рдПрдХреНрд╢рди рдкреЗрд▓реЛрдб рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@sompylasar рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рджреВрдВрдЧрд╛, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж !!!

рдореБрдЭреЗ рд╢рд╛рдпрдж рдпрд╣ рднреА рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк redux-saga рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╢реБрджреНрдз рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, redux-saga async рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк redux-saga рдХреЗ рдмрдЬрд╛рдп RxJS (рдпрд╛ рдХрд┐рд╕реА FRP рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдПрдХ рдХрджрдо рдЖрдЧреЗ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ KefirJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/awesome-editor/awesome-editor/blob/saga-demo/src/stores/app/AppSagaHandlers.js

рд╣рд╛рдп @frankandrobot ,

redux-saga async рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реИ

рдЗрд╕рд╕реЗ рддреБрдореНрд╣рд╛рд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм? рдХреНрдпрд╛ redux-saga рдХреЛ рдПрд╕рд┐рдВрдХреНрд╕ рдЗрд╡реЗрдВрдЯреНрд╕ рдФрд░ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ? https://github.com/reactjs/redux/issues/1171#issuecomment -167715393 рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

рдирд╣реАрдВ @IceOnFire ред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ redux-saga рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝реЗ, рддреЛ рдЬрдЯрд┐рд▓ рдПрд╕рд┐рдВрдХреНрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдХрдард┐рди рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ: http://yelouafi.github.io/redux-saga/docs/advanced/NonBlockingCalls.html
рдЗрд╕рдиреЗ рдХрд╣рд╛ (рдЕрднреА рднреА рдХрд╣рддрд╛ рд╣реИ?) рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рдХреБрдЫ

рд╣рдо рдмрд╛рдХреА рд╡рд┐рд╡рд░рдг рдкрд╛рдардХ рдкрд░ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рд▓рдЧрд╛ рд╣реИ

рдЗрд╕рдХреА рддреБрд▓рдирд╛ FRP рддрд░реАрдХреЗ рд╕реЗ рдХрд░реЗрдВ: https://github.com/frankandrobot/rflux/blob/master/doc/06-side effects.md#a -more-complex-workflow
рдЙрд╕ рдкреВрд░реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред (рдХреЗрд╡рд▓ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдореИрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред) рдЙрд╕рдХреЗ рдКрдкрд░, рдЖрдкрдХреЛ рдЕрднреА рднреА redux-saga рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдЪреНрдЫрд╛рдИ рдорд┐рд▓рддреА рд╣реИ (рд╕рдм рдХреБрдЫ рдПрдХ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рдЖрд╕рд╛рди рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг)ред

рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛, рддреЛ рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ redux-saga рд╣реИ рдЬреЛ рд╕рдм рдХреБрдЫ рд╕рдордХрд╛рд▓рд┐рдХ рджрд┐рдЦрддреА рд╣реИред рдпрд╣ рд╕рд░рд▓ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ async рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╕рд╛рди рд╣реИ рдпрджрд┐ рдЖрдк async рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рддреЗ рд╣реИрдВ ... рдЬреЛ рдХрд┐ FRP рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИред

рд╣рд╛рдп @frankandrobot ,

рдЖрдкрдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдпреЗ рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЙрджреНрдзрд░рдг рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЕрдм рдПрдХ cancel рдкреНрд░рднрд╛рд╡ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛)ред

рдпрджрд┐ рджреЛ рдЙрджрд╛рд╣рд░рдг (рдЧрд╛рдерд╛ рдФрд░ рдПрдлрдЖрд░рдкреА) рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдВрддрд░ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ: рдПрдХ рдХреЛрд╢рд┐рд╢/рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдзрд╛рд░рд╛рдУрдВ рдкрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдзрд╛рд░рд╛рдУрдВ рдкрд░ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдЧрд╛рдерд╛ рдЙрджрд╛рд╣рд░рдг рдФрд░ рднреА рдЕрдзрд┐рдХ рдкрдардиреАрдп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╣рд░ рдПрдХ yield рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рддрдХрдиреАрдХреЛрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдореЗрд░реА рдорд╛рдирд╕рд┐рдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИред

рд╡реИрд╕реЗ рднреА рдореБрдЭреЗ рдЗрд╕ рдкрд░ @yelouafi рдХреА рд░рд╛рдп рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛

@bvaughn рдХреНрдпрд╛ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрд░рд╡рд╛рдИ,

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

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

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

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

import configureMockStore from 'redux-mock-store'
import { actions, selectors, reducer } from 'your-redux-module';

it('should support adding new todo items', () => {
  const mockStore = configureMockStore()
  const store = mockStore({
    todos: []
  })

  // Start with a known state
  expect(selectors.todos(store.getState())).toEqual([])

  // Dispatch an action to modify the state
  store.dispatch(actions.addTodo('foo'))

  // Verify the action & reducer worked successfully using your selector
  // This has the added benefit of testing the selector also
  expect(selectors.todos(store.getState())).toEqual(['foo'])
})

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

"рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рдЕрдзрд┐рдХ рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХрдо рдХрд░реЗрдВ"

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдФрд░ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рддреЛ рдореИрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рдо рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рд░реЗрдбреНрдпреВрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ...

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░реА рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реА рдХреБрдЫ рдЕрд▓рдЧ рд░рд╛рдп рд╣реИред

рдореЗрд░реА рдкрд╕рдВрдж fat рд░реЗрдбреНрдпреВрд╕рд░, thin рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╣реИред

рдореЗрд░реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреБрдЫ __promise рдорд┐рдбрд▓рд╡реЗрдпрд░__ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд┐рд░реНрдл __dispatch__ рдХреНрд░рд┐рдпрд╛ (async, рд╕рд┐рдВрдХ, рд╕реАрд░рд┐рдпрд▓-async, рд╕рдорд╛рдирд╛рдВрддрд░-async, рд╕рдорд╛рдирд╛рдВрддрд░-async рдлреЙрд░-рд▓реВрдк рдореЗрдВ) рдХрд░рддреЗ рд╣реИрдВред

рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХрдИ рдЫреЛрдЯреЗ рд░рд╛рдЬреНрдп рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЧрдПред combineReduers рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВред reducer __pure function__ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рди рдореИрдВ angularJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд╕реА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдореЗрдВ рдЕрдкрдиреЗ reducer рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдкрдХреЗ reducer рдореЗрдВ рдХрдИ рд▓рд╛рдЗрди рдХреЛрдб рд╣реИрдВ, рддреЛ рдпрд╣ рдЫреЛрдЯреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдВ, рдХреБрдЫ рдХреНрд░реЙрд╕ рд╕реНрдЯреЗрдЯ рдХреЗрд╕ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ A B, C рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ .. рдФрд░ B, C async рдбреЗрдЯрд╛ рд╣реИрдВред рдП рдХреЛ рднрд░рдиреЗ рдпрд╛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ B,C рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП рдореИрдВ crossSliceReducer рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рд▓рдЧрднрдЧ __рдПрдХреНрд╢рди-рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рдЕрдзрд┐рдХ рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХрдо рдХрд░реЗрдВ__ред

  1. рдпрджрд┐ рдЖрдк redux-thunk рдпрд╛ рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдБред рдЖрдк getState() рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЗ рднреАрддрд░ рдкреВрд░реА рд╕реНрдерд┐рддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдпрд╛, рдЖрдк рдХреБрдЫ __crossSliceReducer__ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрдк рдкреВрд░реА рд╕реНрдерд┐рддрд┐ рддрдХ рднреА рдкрд╣реБрдВрдЪ рд╕рдХреЗрдВ, рдЖрдк рдЕрдкрдиреЗ рджреВрд╕рд░реЗ рд░рд╛рдЬреНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдЯреЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

__рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг__ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

reducer __pure function__ рд╣реИред рдЗрд╕рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреНрдп рднрд╛рдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

action creators рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡реЗ "рдореЛрдЯреЗ" рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ __async рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕__ред

рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ @mrdulin рдЕрдм рдореИрдВ рднреА рдРрд╕реЗ рд╣реА рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реВрдВред

@mrdulin рд╣рд╛рдБред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЕрд╢реБрджреНрдз рддрд░реНрдХ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕рд╣реА рдЬрдЧрд╣ рд╣реИред
рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП reducer рдПрдХ рд╕рд╣реА рдЬрдЧрд╣ рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдХрдИ "рд╕рд┐рдВрдереЗрдЯрд┐рдХ" рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдВрдЧреЗ рдЬреЛ рдпрд╣ рдирд╣реАрдВ рджрд░реНрд╢рд╛рддреА рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдХреНрдпрд╛ рдкреВрдЫрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕реЗ рдХреБрдЫ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ/рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рд╣реИ:

middleware = (...) => {
  // if(action.type == 'HIGH_LEVEL') 
  handlers[action.name]({ dispatch, params: action.payload })
}
const handlers = {
  async highLevelAction({ dispatch, params }) {
    dispatch({ loading: true });
    const data = await api.getData(params.someId);
    const processed = myPureLogic(data);
    dispatch({ loading: false, data: processed });
  }
}

@bvaughn

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

рд╣рд░ рдЬрдЧрд╣ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдореЗрд░рд╛ рдорд╛рдорд▓рд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рддреБрдЪреНрдЫ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрд╕реНрдорд░рдг рдпрд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

  • рдХреНрдпрд╛ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд▓рдд рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд░рд╛рдЬреНрдп рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝ рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП?
  • рд╕реНрдЯреЛрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ state.stuff.item1 рдХреЛ state.stuff.item2 рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдмрджрд▓рддреЗ рд╣реИрдВ - рдЬреИрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдИрдбреАрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдФрд░ рдЧреИрд░-рджрд┐рдорд╛рдЧ рд╣реИред
  • рд╣рд░ рдЬрдЧрд╣ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЦрд╛рд▓реА рдЕрдореВрд░реНрддрддрд╛ рд╣реИред рд╕рд╛рдзрд╛рд░рдг рдЯреБрдХрдбрд╝реЛрдВ рддрдХ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЗрд╕ рдЪрд┐рдВрддрд╛ рдХреЛ рдХрднреА рдирд╣реАрдВ рд╕рдордЭрд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рд░рд╛рдЬреНрдп рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╕рд╛рджрдЧреА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рддрд░реНрдХ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

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

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

@IceOnFire рдпрджрд┐ рдЧрдгрдирд╛ рдорд╣рдВрдЧреА рдирд╣реАрдВ рд╣реИ рдпрд╛ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

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

@timotgl

рд╕реНрдЯреЛрд░ рдФрд░ рдЕрдиреНрдп рд░реЗрдбрдХреНрд╕ рдХреЛрдб рдХреЗ рдмреАрдЪ рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдХреНрдпреЛрдВ рд╣реИ?

рдЪрдпрдирдХрд░реНрддрд╛ рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдХреА рдХреНрд╡реЗрд░реА (рдкрдврд╝реЗрдВ) рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╣реИрдВ, рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдХреА рдХрдорд╛рдВрдб (рд▓рд┐рдЦреЗрдВ) рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╣реИрдВред рд░реЗрдбреНрдпреВрд╕рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИред

рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдФрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ UI рдкрд░рдд рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдЧрд╛ рдкрд░рдд рдореЗрдВ (рдпрджрд┐ рдЖрдк redux-saga рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ), рддреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рд╣реА рдирд╣реАрдВред

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

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

@timotgl рд╣рд╛рдВ, рдЪрдпрдирдХрд░реНрддрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡реЗ рдРрдк рдХреЛрдб рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рддреИрдпрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

  • рд░рд╛рдЬреНрдп рдХрд╛ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдФрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд░реЗрдбреНрдпреВрд╕рд░ рдЪрд┐рдВрддрд╛, рдПрдХ рдЬрдЧрд╣)
  • рд░рд╛рдЬреНрдп рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпреВрдЖрдИ рдФрд░ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреА рдЪрд┐рдВрддрд╛, рдХрдИ рдЬрдЧрд╣ рдЬрд╣рд╛рдВ рд╕реЗ рдПрдХ рд╣реА рд░рд╛рдЬреНрдп рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреА рдкреВрдЫрддрд╛рдЫ рдХреА рдЬрд╛рддреА рд╣реИ)

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

@sompylasar рдЖрдкрдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

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

@timotgl рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕реЗ рдореИрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

export const PROMISE_REDUCER_STATE_IDLE = 'idle';
export const PROMISE_REDUCER_STATE_PENDING = 'pending';
export const PROMISE_REDUCER_STATE_SUCCESS = 'success';
export const PROMISE_REDUCER_STATE_ERROR = 'error';

export const PROMISE_REDUCER_STATES = [
  PROMISE_REDUCER_STATE_IDLE,
  PROMISE_REDUCER_STATE_PENDING,
  PROMISE_REDUCER_STATE_SUCCESS,
  PROMISE_REDUCER_STATE_ERROR,
];

export const PROMISE_REDUCER_ACTION_START = 'start';
export const PROMISE_REDUCER_ACTION_RESOLVE = 'resolve';
export const PROMISE_REDUCER_ACTION_REJECT = 'reject';
export const PROMISE_REDUCER_ACTION_RESET = 'reset';

const promiseInitialState = { state: PROMISE_REDUCER_STATE_IDLE, valueOrError: null };
export function promiseReducer(state = promiseInitialState, actionType, valueOrError) {
  switch (actionType) {
    case PROMISE_REDUCER_ACTION_START:
      return { state: PROMISE_REDUCER_STATE_PENDING, valueOrError: null };
    case PROMISE_REDUCER_ACTION_RESOLVE:
      return { state: PROMISE_REDUCER_STATE_SUCCESS, valueOrError: valueOrError };
    case PROMISE_REDUCER_ACTION_REJECT:
      return { state: PROMISE_REDUCER_STATE_ERROR, valueOrError: valueOrError };
    case PROMISE_REDUCER_ACTION_RESET:
      return { ...promiseInitialState };
    default:
      return state;
  }
}

export function extractPromiseStateEnum(promiseState = promiseInitialState) {
  return promiseState.state;
}
export function extractPromiseStarted(promiseState = promiseInitialState) {
  return (promiseState.state === PROMISE_REDUCER_STATE_PENDING);
}
export function extractPromiseSuccess(promiseState = promiseInitialState) {
  return (promiseState.state === PROMISE_REDUCER_STATE_SUCCESS);
}
export function extractPromiseSuccessValue(promiseState = promiseInitialState) {
  return (promiseState.state === PROMISE_REDUCER_STATE_SUCCESS ? promiseState.valueOrError || null : null);
}
export function extractPromiseError(promiseState = promiseInitialState) {
  return (promiseState.state === PROMISE_REDUCER_STATE_ERROR ? promiseState.valueOrError || true : null);
}

рдпрд╣ рдЗрд╕ рд░реЗрдбреНрдпреВрд╕рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ state, valueOrError рдпрд╛ рдХреБрдЫ рдФрд░ред рдПрдХреНрд╕рдкреЛрдЬрд╝реНрдб рд╕реНрдЯреЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдПрдирдо) рд╣реИрдВ, рдПрдХ рдпреБрдЧрд▓ рдЕрдХреНрд╕рд░ рдЙрд╕ рд╕реНрдерд┐рддрд┐, рдорд╛рди рдФрд░ рддреНрд░реБрдЯрд┐ рдкрд░ рдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ "рдЪрдпрдирдХрд░реНрддрд╛ рд╕реНрдкреЗрдЧреЗрдЯреА" рдореЗрдВ рдЖрдпрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рд░рд╛рдЬреНрдп рдХреЗ рд╣рд░ рдЫреЛрдЯреЗ рдЙрдк-рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдиреЗрд╕реНрдЯреЗрдб рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдиреЗ рдХрд╛рдлреА рднреНрд░рдо рдкреИрджрд╛ рдХрд┐рдпрд╛ рд╣реИред

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

function extractTransactionLogPromiseById(globalState, transactionId) {
  return extractState(globalState).transactionLogPromisesById[transactionId] || undefined;
}

export function extractTransactionLogPromiseStateEnumByTransactionId(globalState, transactionId) {
  return extractPromiseStateEnum(extractTransactionLogPromiseById(globalState, transactionId));
}

export function extractTransactionLogPromiseErrorTransactionId(globalState, transactionId) {
  return extractPromiseError(extractTransactionLogPromiseById(globalState, transactionId));
}

export function extractTransactionLogByTransactionId(globalState, transactionId) {
  return extractPromiseSuccessValue(extractTransactionLogPromiseById(globalState, transactionId));
}

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

@timotgl : Redux рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдмрд╣реБрдд рд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ Redux рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реНрдХ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк this.props.dispatch({type : "INCREMENT"}) рдХрд░рдХреЗ рд╕реАрдзреЗ рдХрдиреЗрдХреНрдЯреЗрдб рдШрдЯрдХ рд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЗрд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдШрдЯрдХ рдХреЛ "рдЬрд╛рдирдиреЗ" рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ Redux рд╕реЗ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рддрд░реАрдХрд╛ рдмрд╛рдзреНрдп рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИ, рддрд╛рдХрд┐ рдШрдЯрдХ рдХреЗрд╡рд▓ this.props.increment() рдХреЙрд▓ рдХрд░ рд╕рдХреЗ, рдФрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдмрд╛рдзреНрдп Redux рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╣реИ, рдПрдХ рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рд╣реБрдЖ рдорд╛рддрд╛-рдкрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдиреАрдЪреЗ, рдпрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдПрдХ рдирдХрд▓реА рд╕рдорд╛рд░реЛрд╣ред

рдЖрдк рд╣рд░ рдЬрдЧрд╣ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдирд┐рд░рдВрддрд░ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдЯрд╛рдЗрдкреЛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реЛ рд╕рдХреЗред

рдЗрд╕реА рддрд░рд╣, рдЖрдкрдХреЗ mapState рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдердВрдХреНрд╕ рдореЗрдВ рдЖрдкрдХреЛ state.some.deeply.nested.field рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдХреЛрдИ рд░реЛрдХ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдЯрд╛рдЗрдкреЛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд░рд╛рдЬреНрдп рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдорд╣рдВрдЧрд╛ рдкрд░рд┐рд╡рд░реНрддрди рддрд░реНрдХ рд╢рд╛рдпрдж рдлрд┐рд░ рд╕реЗ рд╣реИ - рд╣рд░ рдмрд╛рд░ рджреМрдбрд╝рдирд╛, рднрд▓реЗ рд╣реА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

рддреЛ рдирд╣реАрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _have_ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдЕрднреНрдпрд╛рд╕ рд╣реИрдВред

рдЖрдк рдореЗрд░реА рдкреЛрд╕реНрдЯ Idiomatic Redux рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ

@markerikson рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ, рдпрд╛ рдорд╣рдВрдЧреА рдЧрдгрдирд╛рдУрдВ рдХреЗ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рдореИрдВрдиреЗ рдХрднреА рднреА рдХрд┐рд╕реА рдШрдЯрдХ рдХреЛ рдкреНрд░реЗрд╖рдг рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ :)

рдореЗрд░рд╛ рдХрд╣рдирд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ:

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

state.some.deeply.nested.field рд╕рд╛рде рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВ рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрдирдХрд░реНрддрд╛ рд╣реЛрдиреЗ рдХрд╛ рдореВрд▓реНрдп рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред selectSomeDeeplyNestedField() рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдмрдирд╛рдо 5 рдЧреБрдг рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдк рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк const selectSomeField = state => state.some.field; рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ const selectSomething = state => state.something; рднреА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдУрд╡рд░рд╣реЗрдб (рдЖрдпрд╛рдд, рдирд┐рд░реНрдпрд╛рдд, рдкрд░реАрдХреНрд╖рдг) рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЕрдм (рдмрд╣рд╕ рдпреЛрдЧреНрдп) рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рд╢реБрджреНрдзрддрд╛ рдХреЛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рдард╣рд░рд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдХреА рд╣рдардзрд░реНрдорд┐рддрд╛ рдХреЛ рджреВрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдФрд░ рдЬрдм рд▓рд╛рдЧреВ рд╣реЛ - рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рдЕрдм рддрдХ рдХрд╛ рдЕрдиреБрднрд╡ рдпрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред

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

рдЬрд╝рд░реВрд░ред рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдЕрдиреНрдп рдЪрдпрдирдХрд░реНрддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рдФрд░ рд╕рд╛рде рд╣реА https://github.com/planttheidea/selectorator рдЖрдкрдХреЛ рдбреЙрдЯ-рдиреЛрдЯреЗрд╢рди рдХреБрдВрдЬреА рдкрде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдордзреНрдпрд╡рд░реНрддреА рдЪрдпрдирдХрд░реНрддрд╛ рдХрд░рддрд╛ рд╣реИред

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

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

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

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

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

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

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