Redux: рдкреНрд░рд╕реНрддрд╛рд╡: "рд╕реНрдЯреЛрд░реНрд╕" рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ "рд░рд┐рдбреНрдпреВрд╕рд░" рдХрд░ рджреЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЬреВрди 2015  ┬╖  54рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: reduxjs/redux

рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рд╕реЗ рдпрд╛рдж рд╣реИ, @gaearon , рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ Redux рдХреЗ 500 рд╕реНрдЯрд╛рд░ рд╣рд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдпрд╣ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВрдЧреЗред :)

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

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

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

рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдЧреНрд░реЛрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред

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

рдкрд╛рд░рдВрдкрд░рд┐рдХ рдлреНрд▓рдХреНрд╕ рдореЗрдВ "рд╕реНрдЯреЛрд░реНрд╕" рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдХрд┐ рд╡реЗ 1) рд░рд╛рдЬреНрдп рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ 2) рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА Redux рдореЗрдВ рд╕рддреНрдп рдирд╣реАрдВ рд╣реИред

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

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рд╢рдмреНрдж рд╣реИ рдЬреЛ рдПрдлрдкреА-рдИрд╢ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рд╕реНрдЯреЛрд░" рднреА рдирд╣реАрдВ рд╣реИред
рдбреЛрдореЗрди?

рдУрдЯреАрдУрдПрдЪ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реЗрдбрдХреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо "рд░реЗрдбреНрдпреВрд╕рд░" рдзреНрд╡рдирд┐рдпрд╛рдВ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред

"рд╕реНрдЯреЗрдк рдЕрдкрдбреЗрдЯ" рдпрд╛ "рд╕реНрдЯреЗрдкрд░реНрд╕" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛, рдЬреЛ рдЖрдкрдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рдПрдХ рдХрджрдо рдЖрдЧреЗ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрд▓реНрдо рд╕рд╛рд╣рд┐рддреНрдп рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрддреЗ рд╣реБрдП рджреЗрдЦрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ step , update , рдпрд╛ next рдирд╛рдордХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред

рдбреЛрдореЗрди рдореЗрдВ node.js рдмреИрдЧреЗрдЬ рд╣реЛрддрд╛ рд╣реИред

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

рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ рддреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдареАрдХ рд╣реИред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ "reducer" рдПрдХ рд╕рдЯреАрдХ рд╡рд┐рд╡рд░рдг рд╣реИ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИрдВ :)

рдЕрджреНрдпрддрдирдХрд░реНрддрд╛? рд░рд┐рдбреНрдпреВрд╕рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд░реНрдгрдирд╛рддреНрдордХ + рдХрдо рд╕реНрдиреЛрдмрд┐рд╢ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ reducer рднреА рдкрд╕рдВрдж рд╣реИ

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ: рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ _reducer_ (рд░рд╛рдЬреНрдп рдореЗрдВ), рдпрд╛ рд░рд╛рдЬреНрдп рдХрд╛ _updater_ред

"рдЕрдкрдбреЗрдЯрд░" рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдпред "Reducer" рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рд▓реМрдЯрд╛ рд░рд╣реЗ рд╣реИрдВ, рдкреБрд░рд╛рдиреЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

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

рдФрд░ рдлрд┐рд░ рднреА, рдпрд╣рд╛рдБ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддреАрд╡реНрд░ рд╡реГрджреНрдзрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдХреБрдЫ рд╕рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП :)

рдпрджрд┐ рдмреЗрд╣рддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореИрдВ "рд╕реНрдЯреЛрд░" рдХреЛ "рд░реЗрдбреНрдпреВрд╕рд░" рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред

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

рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдХрдо рдпрдХреАрди рд╣реИ: рдпрджрд┐ рд╣рдо Redux рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ Store рдХрд░ рджреЗрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ: рдЗрд╕рдХреЗ рджреЛ рдЙрджреНрджреЗрд╢реНрдп рд░рд╛рдЬреНрдп рдХреЛ рдкрдХрдбрд╝рдирд╛ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реИ) рддреЛ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп API рдмрди рдЬрд╛рддрд╛ рд╣реИ:

const store = createStore(reducers);

<Provider store={store} />

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

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ store.dispatch рддрдм рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рдБ, рдпрд╣реА рд╡рд╣ рдЪреАрдЬрд╝ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ: store.getState() , store.setState() , store.subscribe()

рдЕрдм рдЬрдмрдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА "рдкреНрд░реЗрд╖рдг" рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЙрд╣, рдирд╛рдордХрд░рдг рдПрдХ рдЦрд░рдЧреЛрд╢ рдЫреЗрдж рд╣реИред

рдареАрдХ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рддрдХ рдХреНрдпрд╛ рд╣реИ:

  • рдХреНрд░рд┐рдпрд╛ (рдирд┐рд░реНрдорд╛рддрд╛)
  • (рд╕реНрдЯреЛрд░) рд░реЗрдбреНрдпреВрд╕рд░
  • рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛рд░реНрдп
  • рдХреЙрд▓рдмреИрдХ (рд╢реНрд░реЛрддрд╛) рдХрд╛рд░реНрдп
  • рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЪреЗрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)
  • рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЕрд╡рд╕реНрдерд╛ рд░рдЦрддрд╛ рд╣реИ (рдмрд╕рдиреЗ рд╡рд╛рд▓реЛрдВ рдФрд░ рдкрд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд╕рд╛рде)

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдХрджрдо рдкреАрдЫреЗ рд╣рдЯреЗрдВ рдФрд░ рдирд╛рдордХрд░рдг рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ?

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

@gaearon рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред

@emmenko рдЕрдЪреНрдЫрд╛ рд╕рд╛рд░рд╛рдВрд╢ред рдХрд┐рд╕реА рднреА рд╢рдмреНрджрд╛рд╡рд▓реА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ _action рдХреНрд░рд┐рдПрдЯрд░реНрд╕_ рдФрд░ _actions_ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ _dispatcher_ рдпрд╛ _dispatch strategy_ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ + рд░реЗрдбреНрдпреВрд╕рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд╕рд╛рде рд╣реА _dispatch_ рд╡рд┐рдзрд┐ рдЬреЛ _dispatch cycle_ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИред

рдЪрд▓реЛ рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:

  • рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ
  • https://github.com/gaearon/redux/issues/137#issuecomment -113252359 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "Redux рдЗрдВрд╕реНрдЯреЗрдВрд╕" рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ
  • рдмрддрд╛ рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдкрд╛рд░рдВрдкрд░рд┐рдХ рдлреНрд▓рдХреНрд╕ рд╕реНрдЯреЛрд░реНрд╕ рдкрд░ рдирдЬрд╝рд░ рджреМрдбрд╝рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдирдореЗрдВ рд░реЗрдбреНрдпреВрд╕рд░ рдлрдВрд╕реЗ рд╣реБрдП рджреЗрдЦреЗрдВрдЧреЗ

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

@gaearon рдореИрдВ рд░рд╣реВрдВрдЧрд╛ :) рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж: +1:

рдореИрдВ рдЗрд╕рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реЗрдЪреНрдЫрд╛ рд╕реЗ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛

рдзрдиреНрдпрд╡рд╛рдж! :+1: :+1: :+1:

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯреЗрдб рд╡реЗрдмрд╕рд╛рдЗрдЯ рд░рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

  • рд╢реБрд░реВ рдХрд░рдирд╛
  • рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓
  • рд╕рдЬреАрд╡ рдЙрджрд╛рд╣рд░рдг

... рдФрд░ рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ:

  • рдЙрддреНрдкрдиреНрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг a-la docco (рдЙрджрд╛рд╣рд░рдг: рдЬреИрд╕реЗ jasmine ) рддрд╛рдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ

рд▓реЗрдХрд┐рди рдорд╛рд░реНрдХрдбрд╛рдЙрди рдФрд░ рдЬреЗрдПрд╕рдбреЙрдХ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓рд╛ рдХрджрдо рд╣реИ;)

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдХрджрдо рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлреЙрд░реНрдо рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдлрд┐рд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд╛рдЗрдЯ рдкрд░ рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред :+1: JSDoc рдХреЗ рд▓рд┐рдП рднреАред рдореИрдВ рдЖрдЬ рд░рд╛рдд https://github.com/gaearon/redux/pull/87 рдкрд░ рдПрдХ рдЕрдВрддрд┐рдо рд╕реНрдЯреИрдм рд▓реЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлреНрд▓реЛ рдПрдиреЛрдЯреЗрд╢рди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдХреЛрдбрдмреЗрд╕ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдкрд╛рддреЗред (рдпрд╛ рдЬрдм рддрдХ рдХреЛрдИ рдореБрдЭреЗ рдлрд╝реНрд▓реЛ рдХреА рд╢рд┐рдХрд╛рдпрдд рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдирд╣реАрдВ рд╕рд┐рдЦрд╛рддрд╛ред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлреНрд▓реЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓рд╛ рдПрдЯреАрдПрдо рдирд╣реАрдВ рд╣реИред

рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП +1 рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдЗрди рдЕрдзрд┐рдХ рдШреЛрд╖рдгрд╛рддреНрдордХ, рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдЪреАрдЬреЛрдВ рдХреЗ рд╕реНрдЯреЛрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╢реМрдХ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдирдП рдирд╛рдо рдХреЗ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИрдВред рдореИрдВ рднреА рдирд╛рдо рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛ Connector рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Subscription ред Connector рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдФрд░ рдЬрдм рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ redux рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЛ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рд╕реЗ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рджрд╕реНрдпрддрд╛ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рд╡рд░рдг рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдЦрд┐рдВрдЪрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ w/рдЖрдкрдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЗрд╖рдХ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИред

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

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

рдЖрдкрдХреЛ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреИрд╕реЗ рдкрд╕рдВрдж рд╣реИрдВ?

рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд▓рд┐рдП +1

рдЬреИрд╕рд╛ рдХрд┐ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ @faassen рджреНрд╡рд╛рд░рд╛ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, "reducers" рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реНрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд╛рдо рдкрд░ рд╡рд╛рдкрд╕ рдмреБрд▓рд╛ рд░рд╣рд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИ "рдпрд╣ рдлреНрд▓рдХреНрд╕ рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕реНрдЯреЛрд░ рд╣реИред рдЬреИрд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдРрдк рдХреЛ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, Redux рдореЗрдВ, рдЖрдк рдЙрд╕ рд╕реНрдЯреЛрд░ рдХреЛ рд░рд┐рдбреНрдпреВрд╕рд░ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдорд┐рд▓рд╛рди рдлрд╝рдВрдХреНрд╢рди [].reduce() : (state, action) => state ред рдмреНрд▓рд╛ рдмреНрд▓рд╛ рдмреНрд▓рд╛"

рдХреЛрдгреАрдп рдЬрдВрдЧрд▓ рдХреА рдЖрдЧ рдХреА рддрд░рд╣ рдлреИрд▓рддрд╛ рд╣реИ рдФрд░ рдЬреИрд╕реЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

  • рдЖрджреЗрд╢
  • рдЕрд▓рдЧ
  • рдЯреНрд░рд╛рдВрд╕рдХреНрд▓реВрдб

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

рдЕрдЧрд░ рд╡реЗ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЛрд░ рди рдХрд╣реЗрдВред

рдХреНрдпрд╛ рдЖрдк рдПрдХ рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рд░реВрдк рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдХрдИ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдПрдХ рд░реВрдк рдореЗрдВ рдШрдЯ рд░рд╣реЗ рд╣реИрдВ?

рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ => рдирдХреНрд╢рд╛
рд░реЗрдбреНрдпреВрд╕рд░ => рдХрдо рдХрд░реЗрдВ

рдореБрдЭреЗ рдХрдо рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ reducers рднреА рд╣реВрдВ! :+1:

рдПрд▓реНрдо рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рд▓реЗрдВред https://github.com/evancz/elm-architecture-tutorial#the -basic-pattern

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

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

рдХреНрдпрд╛ рдЖрдк рдПрдХ рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рд░реВрдк рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдХрдИ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдПрдХ рд░реВрдк рдореЗрдВ рдШрдЯ рд░рд╣реЗ рд╣реИрдВ?

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

рд░рд╛рдЬреНрдп рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░

рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдЦреЛрдЬ/рдкреБрдирд░реНрдЦреЛрдЬ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рд▓реЛрдЧ рдЗрд╕реЗ reduce , scan , fold , рдФрд░ update ред

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

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

@vramana рдпрд╣ рдирд╣реАрдВ рд╣реИ рдПрдХ map , рдпрд╣ рдПрдХ рд╣реИ reduce , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЗрддрд╛ рд╣реИ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдЪрд┐рдд state рдФрд░ рдПрдХ рдирдпрд╛ action рдФрд░ рд░рд┐рдЯрд░реНрди рдПрдХ рдирдпрд╛ state ред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдРрдк рдХреА рд╕рднреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдереА, рддреЛ рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рдРрдк рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ:

function reducer(state, action) {
  // switch (action.type) ...
  // return state;
}
const finalState = allAppActions.reduce(reducer, initialState);

рдЕрдм, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордп рдореЗрдВ stream рдХрд╛ actions рд╣реИ, рдЬреЛ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде (рдЖрдк рдЗрд╕реЗ stream рдореЗрдВ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ state рдПрд╕)ред

рдореИрдВ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ (рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдИрд╡реЗрдВрдЯ рд▓реЙрдЧ)ред
рдбреАрдмреА рд▓реЛрдЧ рдЗрд╕реЗ "рднреМрддрд┐рдХрд╡рд╛рджреА рд╡рд┐рдЪрд╛рд░" рдХрд╣рддреЗ рдереЗред

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

рдореИрдВ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ: рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╢рдмреНрдж рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЕрдВрдЧреНрд░реЗрдЬреА рдЙрдкрдпреЛрдЧ рд╕реЗ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИред

рд░реЗрдбреНрдпреВрд╕рд░ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ [].reduce(reducer, initialState) ред
рджреВрд╕рд░рд╛, Redu(cer)x рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдирд╛рдо рдкрд░ рд╣реИред
рддреАрд╕рд░рд╛, https://blog.javascripting.com/2015/06/19/flux-no-more-stores-meet-reducer/ , рдЕрдиреНрдп рд▓реЛрдЧ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп 'reducers' рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

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

рд░реЗрдбреНрдпреВрд╕рд░ рдпрд╣ рддрдм рд╣реЛрдЧрд╛ред

(#140 рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ)

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

"рд░рд╛рдЬреНрдп рдХрдВрдЯреЗрдирд░"?

рд╣рд╛рдБ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрджрд▓рд╛рд╡ рдерд╛ :)

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

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

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

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

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

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

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