рдПрдХ рдорд╛рдирдХ рд╡рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ reducer рдХрд╛ рд╕рдВрдЧрдарди

рдЕрднрд┐рд╡рд╛рджрди, рдЖрдЬ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ Reducer рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИред рдФрд░ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ рдФрд░ рдХреНрдпрд╛ рдХрд░рдиреЗ рдЖрдпрд╛ рдерд╛ред


рдЗрд╕рд▓рд┐рдП, Reducer рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рдирдХ рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


export default function someReducer(state = initialState, action) { switch (action.type) { case 'SOME_REDUCER_LABEL': return action.data || {}; default: return state; } } 

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдХрдИ рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рд╣реИрдВред


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

рдЕрдм рд╣рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рд╕ reducer рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдмрд╕реЗ рд╕рдордЭрджрд╛рд░ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдмрдирд╛рдирд╛ рд╣реИред


рдФрд░ рд╣рдорд╛рд░рд╛ рдкрд┐рдЫрд▓рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧрд╛:


  import { FetchSaga } from '../../helpers/sagasHelpers'; const SOME_REDUCER_LABEL = 'SOME_REDUCER_LABEL'; export const someReducerLabelActionCreator = FetchSaga.bind(this, SOME_REDUCER_LABEL); export default function someReducer(state = initialState, action) { switch (action.type) { case SOME_REDUCER_LABEL: return action.data || {}; default: return state; } } 

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


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


 import { FetchSaga } from '../../helpers/sagasHelpers'; const SOME_REDUCER_LABEL1 = 'SOME_REDUCER_LABEL1';  .... const SOME_REDUCER_LABEL10 = 'SOME_REDUCER_LABEL10'; export const someReducerLabelActionCreator1 = FetchSaga.bind(this, SOME_REDUCER_LABEL1);   ..... export const someReducerLabelActionCreator10 = FetchSaga.bind(this, SOME_REDUCER_LABEL10); export default function someReducer(state = initialState, action) { switch (action.type) { case SOME_REDUCER_LABEL: return action.data || {}; case SOME_REDUCER_LABEL1: return action.data || {}; case SOME_REDUCER_LABEL2: return action.data || {}; case SOME_REDUCER_LABEL3: return action.data || {}; .... default: return state; } } 

рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдХрд┐ рдПрдХ рдХреЛ рднреА рдЗрддрдирд╛ рдлреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдпрд╣ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдорд┐рд▓ рдЧрдпрд╛ред


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


рддрдм рдореЗрд░реЗ рдкрд╛рд╕ рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред рдЙрд╕рдХреЗ рд╕рд╛рдордиреЗ рдХрд╛рд░реНрдп рдХрдард┐рди рдирд╣реАрдВ рдереЗред


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

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдореБрдЭреЗ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд▓рдЧрд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред


рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдФрд╕рдд reducer рдЕрдм рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣реЗ рдереЗ


  //    ,        reducer' import stdReducerClass from '../../../helpers/reducer_helpers/stdReducer'; class SomeReducer extends stdReducerClass { constructor() { super(); /**   reducer'.   reducer    action,     */ this.prefix = 'SOME_REDUCER__'; } /**   ,     reducer - type - ,    . -        ,     action creator,  SOME_REDUCE__FETCH.   type        action creator  someReduceInstActions - method - ,      action,            - sagas -    ,   ,       .    ,   action creator  ,      SOME_REDUCE__FETCH,  ,   ,      reducer    . */ config = () => [ { type: 'fetch', method: this.fetch, saga: 'fetch' }, { type: 'update', method: this.update }, ]; //           action creators init = () => this.subscribeReduceOnActions(this.config()); //  ,      fetch = (clone, action) => { //       return clone; }; //  ,         update = (clone, action) => { //       return clone; }; } const someReducerInst = new SomeReducer(); someReducerInst.init(); //   action creators   config //    action creator      export const someReducerInstActions = someReducerInst.getActionCreators(); //    .   checkActionForState    Action  ,      reducer'   export default someReducerInst.checkActionForState; 

stdReducerClass рдЕрдВрджрд░ рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ


 import { cloneDeep } from 'lodash'; //    lodash //        ,            import { FetchSaga } from '../helpers/sagasHelpers/actions'; export default class StdReducer { _actions = {}; actionCreators = {}; /** UNIQUE PREFIX BLOCK START */ /**      ,  .   ,   ,    ,  reducer    action       */ uniquePrefix = ''; set prefix(value) { const lowedValue = value ? value.toLowerCase() : ''; this.uniquePrefix = lowedValue; } get prefix() { return this.uniquePrefix; } /** INITIAL STATE BLOCK START */ /**   initialState      reducer'. */ initialStateValues = {}; set initialState(value) { this.initialStateValues = value; } get initialState() { return this.initialStateValues; } /** PUBLIC BLOCK START */ /** *        init() .   ,      Config, action creator   _subscribeAction * actionsConfig -     ,     {type, method, saga?}     ,     action creator          */ subscribeReducerOnActions = actionsConfig => actionsConfig.forEach(this._subscribeAction); /**      _subscribeAction,    ,        type.  , reducer  ,       action. */ _subscribeAction = (action) => { const type = action.type.toLowerCase(); this._actions[type] = action.method; //       this.actionCreators[type] = this._subscribeActionCreator(type, action.saga); //   action creator   } /** _subscribeActionCreator -   , action creator          -   saga    ,      -   fetch           ,             type    ,   ,    action creator,  ,     SOME_Reducer__,      FETCH,      SOME_Reducer__FETCH,     action creator */ _subscribeActionCreator = (type, creatorType) => { const label = (this.prefix + type).toUpperCase(); switch (creatorType) { case 'fetch': return this._getFetchSaga(label); default: return this._getActionCreator(label); } } /** _getFetchSaga -     ,          */ _getFetchSaga = label => FetchSaga.bind(this, label); /** _getActionCreator -  action creator,      ,   ,    . */ _getActionCreator = label => (params = {}) => ({ type: label, ...params }); /**    ,      playload.     action   ,    */ checkActionForState = (state = this.initialState || {}, action) => { if (!action.type) return state; const type = action.type.toLowerCase(); const prefix = this.prefix;       ,    ,   . const internalType = type.replace(prefix, ''); //        if (this._actions[internalType]) { //     -    const clone = cloneDeep(state); //  ,    ,  action  ,     //        return this._actions[internalType](clone, action); } //   ,   action   .     return state; } /**       action creator,    reducer */ getActionCreators = () => this.actionCreators; } 

рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ? рдФрд░ рдРрд╕рд╛ рд╣реИ


 import { someReducerInstActions } from '../../../SomeReducer.js' const mapDispatchToProps = dispatch => ({ doSoAction: (params) => dispatch(someReducerInstActions.fetch(url, params)), doSoAction1: (value, block) => dispatch(someReducerInstActions.update({value, block})), }); 

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ:


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

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


тЖТ рд╡рд░реНрддрдорд╛рди рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!


UPD: рдирд┐рд╢реНрдЪрд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рд░рд╛рдд рдореЗрдВ рд▓рд┐рдЦрд╛, рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реЗ рдкрдврд╝рд╛ред рдЙрдиреНрд╣реЗрдВ рдЗрддрдиреА рд╡рд┐рдирдореНрд░рддрд╛ рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж =)

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


All Articles