Redux рдЯреВрд▓рдХрд┐рдЯ рдкреНрд░рднрд╛рд╡реА Redux рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ

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


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

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


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


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ


Redux рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢:


  • рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд░реЗрдбрдХреНрд╕-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдХрд┐рдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛;
  • рд░рд┐рд▓реАрдЬрд╝ рдЕрдХреНрдЯреВрдмрд░ 2019 рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реБрдИ;
  • рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ Redux рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, Redux Toolkit рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:


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

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


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


  • #configureStore - рд╕реНрдЯреЛрд░реЗрдЬ рдмрдирд╛рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдлрдВрдХреНрд╢рди;
  • #createReducer - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ рдПрдХ reducer рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ;
  • #createAction - рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдХрд╛рд░реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • #createSlice - createAction рдФрд░ createReducer рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ;
  • createSelector рд░реЗрд╕реЗрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

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


рдЖрд╡реЗрджрди


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


рдХрд╛рд░реНрдп


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


рднрдВрдбрд╛рд░рдг рд╕реГрдЬрди


рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


import { createStore, applyMiddleware, combineReducers, compose, } from 'redux'; import thunk from 'redux-thunk'; import * as reducers from './reducers'; const ext = window.__REDUX_DEVTOOLS_EXTENSION__; const devtoolMiddleware = ext && process.env.NODE_ENV === 'development' ? ext() : f => f; const store = createStore( combineReducers({ ...reducers, }), compose( applyMiddleware(thunk), devtoolMiddleware ) ); 

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


рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдлрд╝рдВрдХреНрд╢рди


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


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

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


  • serializableStateInvariant - Redux Toolkit рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдПрдХ рдЙрдкрдХрд░рдг рдФрд░ рдЧреИрд░-рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдХреЗ рдкреЗрдбрд╝ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди, рд╡рд╛рджрд╛, рдкреНрд░рддреАрдХ рдФрд░ рдЕрдиреНрдп рдорд╛рди рдЬреЛ рд╕рд░рд▓ JS рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИрдВ;
  • immutableStateInvariant - redux-immutable-state-invariant рдкреИрдХреЗрдЬ рд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░, рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдореМрдЬреВрдж рдбреЗрдЯрд╛ рдореЗрдВ рдореНрдпреВрдЯреЗрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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


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


 import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit'; import * as reducers from './reducers'; const middleware = getDefaultMiddleware({ immutableCheck: false, serializableCheck: false, thunk: true, }); export const store = configureStore({ reducer: { ...reducers }, middleware, devTools: process.env.NODE_ENV !== 'production', }); 

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


  • Reducers рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ CombReducers рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛,
  • рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдирд╡реЙрдЗрд╕рд┐рдВрдЧ рдРрдкреНрд▓рд╛рдЗрдбрд╡реЗрдпрд░

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


рдпрд╣ рднрдВрдбрд╛рд░рдг рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рддреЗ рд╣реИрдВред


рдХреНрд░рд┐рдпрд╛, рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░


рдЕрдм рдЪрд▓реЛ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдХрд╛рд░реНрдпреЛрдВ, рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ Redux рдЯреВрд▓рдХрд┐рдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВред Redux рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЛрдб рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред js рдФрд░ reducers.js рдлрд╛рдЗрд▓реЗрдВред рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реАред Js рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:


 import * as productReleasesService from '../../services/productReleases'; export const PRODUCT_RELEASES_FETCHING = 'PRODUCT_RELEASES_FETCHING'; export const PRODUCT_RELEASES_FETCHED = 'PRODUCT_RELEASES_FETCHED'; export const PRODUCT_RELEASES_FETCHING_ERROR = 'PRODUCT_RELEASES_FETCHING_ERROR'; тАж export const PRODUCT_RELEASE_UPDATING = 'PRODUCT_RELEASE_UPDATING'; export const PRODUCT_RELEASE_UPDATED = 'PRODUCT_RELEASE_UPDATED'; export const PRODUCT_RELEASE_CREATING_UPDATING_ERROR = 'PRODUCT_RELEASE_CREATING_UPDATING_ERROR'; function productReleasesFetching() { return { type: PRODUCT_RELEASES_FETCHING }; } function productReleasesFetched(productReleases) { return { type: PRODUCT_RELEASES_FETCHED, productReleases }; } function productReleasesFetchingError(error) { return { type: PRODUCT_RELEASES_FETCHING_ERROR, error } } тАж export function fetchProductReleases() { return dispatch => { dispatch(productReleasesFetching()); return productReleasesService.getProductReleases().then( productReleases => dispatch(productReleasesFetched(productReleases)) ).catch(error => { error.clientMessage = "Can't get product releases"; dispatch(productReleasesFetchingError(error)) }); } } тАж export function updateProductRelease( id, productName, productVersion, releaseDate ) { return dispatch => { dispatch(productReleaseUpdating()); return productReleasesService.updateProductRelease( id, productName, productVersion, releaseDate ).then( productRelease => dispatch(productReleaseUpdated(productRelease)) ).catch(error => { error.clientMessage = "Can't update product releases"; dispatch(productReleaseCreatingUpdatingError(error)) }); } } 

Reduxers.js рдХреА рд╕рд╛рдордЧреНрд░реА Redux рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓:


 const initialState = { productReleases: [], loadedProductRelease: null, fetchingState: 'none', creatingState: 'none', updatingState: 'none', error: null, }; export default function reducer(state = initialState, action = {}) { switch (action.type) { case productReleases.PRODUCT_RELEASES_FETCHING: return { ...state, fetchingState: 'requesting', error: null, }; case productReleases.PRODUCT_RELEASES_FETCHED: return { ...state, productReleases: action.productReleases, fetchingState: 'success', }; case productReleases.PRODUCT_RELEASES_FETCHING_ERROR: return { ...state, fetchingState: 'failed', error: action.error }; тАж case productReleases.PRODUCT_RELEASE_UPDATING: return { ...state, updatingState: 'requesting', error: null, }; case productReleases.PRODUCT_RELEASE_UPDATED: return { ...state, updatingState: 'success', productReleases: state.productReleases.map(productRelease => { if (productRelease.id === action.productRelease.id) return action.productRelease; return productRelease; }) }; case productReleases.PRODUCT_RELEASE_UPDATING_ERROR: return { ...state, updatingState: 'failed', error: action.error }; default: return state; } } 

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


CreateAction рдлрд╝рдВрдХреНрд╢рди


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


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


 export const productReleasesFetching = createAction('PRODUCT_RELEASES_FETCHING'); export const productReleasesFetched = createAction('PRODUCT_RELEASES_FETCHED'); export const productReleasesFetchingError = createAction('PRODUCT_RELEASES_FETCHING_ERROR'); тАж export function fetchProductReleases() { return dispatch => { dispatch(productReleasesFetching()); return productReleasesService.getProductReleases().then( productReleases => dispatch(productReleasesFetched({ productReleases })) ).catch(error => { error.clientMessage = "Can't get product releases"; dispatch(productReleasesFetchingError({ error })) }); } } ... 

CreateReducer рдлрд╝рдВрдХреНрд╢рди


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


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


рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рдирд╛ "рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓" рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рд░рд╛рдЬреНрдп рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред


CreateReducer рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдореНрди рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:


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

CreateReducer рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ:


 const initialState = { productReleases: [], loadedProductRelease: null, fetchingState: 'none', creatingState: 'none', loadingState: 'none', error: null, }; const counterReducer = createReducer(initialState, { [productReleasesFetching]: (state, action) => { state.fetchingState = 'requesting' }, [productReleasesFetched.type]: (state, action) => { state.productReleases = action.payload.productReleases; state.fetchingState = 'success'; }, [productReleasesFetchingError]: (state, action) => { state.fetchingState = 'failed'; state.error = action.payload.error; }, тАж [productReleaseUpdating]: (state) => { state.updatingState = 'requesting' }, [productReleaseUpdated]: (state, action) => { state.updatingState = 'success'; state.productReleases = state.productReleases.map(productRelease => { if (productRelease.id === action.payload.productRelease.id) return action.payload.productRelease; return productRelease; }); }, [productReleaseUpdatingError]: (state, action) => { state.updating = 'failed'; state.error = action.payload.error; }, }); 

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


CreateSlice рдлрд╝рдВрдХреНрд╢рди


CreateSlice рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдореНрди рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:


  • рдирд╛рдо - рдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди ( ${name}/${action.type} );
  • initialState - reducer рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐;
  • reducers - рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБред рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ рд░рд╛рдЬреНрдп рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдкреЗрд▓реЛрдб рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдбреЗрдЯрд╛ рдФрд░ рдШрдЯрдирд╛ рдХрд╛ рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдШрдЯрдирд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдореЗрдВ рдЖрдИрдбреА рдЬреЛрдбрд╝реЗрдВ)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рд░реАрдбреНрдпреВрд╕рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд╝реАрд▓реНрдб рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рд░реЗрдбреНрдпреВрд╕рд░ рдПрдХреНрд╢рди рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдФрд░ рддреИрдпрд╛рд░ рдкреЗрд▓реЛрдб рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЕрдкрдбреЗрдЯреЗрдб рдкреЗрд▓реЛрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • extraReducers - рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рджреВрд╕рд░реЗ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ reducers рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрд▓рд╛рдЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред

рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ "рд╕реНрд▓рд╛рдЗрд╕" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рдореНрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде:


  • рдирд╛рдо - рдЯреБрдХрдбрд╝рд╛ рдирд╛рдо,
  • reducer - reducer,
  • рдХреНрд░рд┐рдпрд╛рдПрдБ - рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ред

рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:


 const initialState = { productReleases: [], loadedProductRelease: null, fetchingState: 'none', creatingState: 'none', loadingState: 'none', error: null, }; const productReleases = createSlice({ name: 'productReleases', initialState, reducers: { productReleasesFetching: (state) => { state.fetchingState = 'requesting'; }, productReleasesFetched: (state, action) => { state.productReleases = action.payload.productReleases; state.fetchingState = 'success'; }, productReleasesFetchingError: (state, action) => { state.fetchingState = 'failed'; state.error = action.payload.error; }, тАж productReleaseUpdating: (state) => { state.updatingState = 'requesting' }, productReleaseUpdated: (state, action) => { state.updatingState = 'success'; state.productReleases = state.productReleases.map(productRelease => { if (productRelease.id === action.payload.productRelease.id) return action.payload.productRelease; return productRelease; }); }, productReleaseUpdatingError: (state, action) => { state.updating = 'failed'; state.error = action.payload.error; }, }, }); 

рдЕрдм рд╣рдо рдмрдирд╛рдП рдЧрдП рд╕реНрд▓рд╛рдЗрд╕ рд╕реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗред


 const { actions, reducer } = productReleases; export const { productReleasesFetched, productReleasesFetching, productReleasesFetchingError, тАж productReleaseUpdated, productReleaseUpdating, productReleaseUpdatingError } = actions; export default reducer; 

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


 export const fetchProductReleases = () => (dispatch) => { dispatch(productReleasesFetching()); return productReleasesService .getProductReleases() .then((productReleases) => dispatch(productReleasesFetched({ productReleases }))) .catch((error) => { error.clientMessage = "Can't get product releases"; dispatch(productReleasesFetchingError({ error })); }); }; тАж export const updateProductRelease = (id, productName, productVersion, releaseDate) => (dispatch) => { dispatch(productReleaseUpdating()); return productReleasesService .updateProductRelease(id, productName, productVersion, releaseDate) .then((productRelease) => dispatch(productReleaseUpdated({ productRelease }))) .catch((error) => { error.clientMessage = "Can't update product releases"; dispatch(productReleaseUpdatingError({ error })); }); 

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


рдкрд░рд┐рдгрд╛рдо


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


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

Source: https://habr.com/ru/post/hi481288/


All Articles