Redux: рдЙрджрд╛рд╣рд░рдг - рдПрдХреНрд╢рди рдЯрд╛рдЗрдк рдиреЗрдорд╕реНрдкреЗрд╕рд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП?

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

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

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

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

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

рдореЗрд░рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓рд╛ рджреГрд╢реНрдпрдкрдЯрд▓ рдкрд░ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд╣реЛрдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрдЯреЛрд░ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ ("testerAccount", "customerAccount") рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рджреЛрдиреЛрдВ рдЬреИрд╕реЗ ADD_VIDEO -UPLOAD, ADD_COMMENT, рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХреЗрдВрдЧреЗред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдБ рдЖрдкрдХреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗ :)

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

рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реИрдВред URL рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реИрдВ, рдФрд░ рд╡реЗ рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред

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

рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЦрд╛рддрд╛ рдЯрд╛рдЗрдк рдХрд░реЗрдВ? рдпрд╣ рднреА рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдПрдХ рд░рд┐рдбреНрдпреВрд╕рд░ рдлреИрдХреНрдЯреНрд░реА рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП examples/real-world/reducers рдХрдИ рдмрд╛рд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдлрд┐рд░ рд╣рдо рдЖрдкрдХреЛ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд┐рдирд╛ рдХреЛрдб рдХреЗ рдХрд┐рд╕реА рдкреНрд░рд╢реНрди рдХреЗ рдЙрддреНрддрд░ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд╕реБрдЭрд╛рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИред

@gaearon рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╣рд╛рдБ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп reducers, рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдпрд╛ DRY рдЪреАрдЬреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрддред

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

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ https://www.npmjs.com/package/flux-constant рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реБрдкрд░ рд╕рд░рд▓ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ createActionTypes рдирд╛рдордХ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдореЗрд░рд╛ рдХреЛрдб рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ:

// create-action-types.js
var fluxConstant = require('flux-constant');
module.exports = function (types) {
    return fluxConstant.set(types);
};

// in foo-action-types.js
module.exports = createAtionTypes([
    'ADD_FOO',
    'REMOVE_FOO'
]);

// in some-store.js
var fooActionTypes = require('foo-action-types');
function (state, action) {
    switch(action.type) {
        case fooActionTypes.ADD_FOO: 

        case fooActionTypes.REMOVE_FOO:
   }
}

рд╕рднреА рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдлрд┐рд░ рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рд╣реА рдирд╛рдо рдХреЛ рджреЛ рдмрд╛рд░ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ рд╕реНрдЯреЛрд░ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ:


let initialState = {
  "testerAccount": {
    "videoUploads": [],
    "messages": []
  },
  "customerAccount": {
    "videoUploads": [],
    "messages": []
  },
  "systemUserAccount": {
    "videoUploads": [],
    "messages": []
  }
};

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

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

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

ADD_VIDEO_UPLOAD, ADD_TESTER_VIDEO_UPLOAD, ADD_VIDEO_UPLOAD_IN_SOME_SECTION, рдЖрджрд┐

рдЬреЛ рдлрд┐рд░ рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рд╕рд┐рд░рджрд░реНрдж рд╣реИред

@koulmomo рдпрд╣ рд╡рд╣реА рд╣реИ

@gaearon рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдпрд╛ рддреЛ рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдЬрд┐рд╕реЗ рд░реЗрдбрдХреНрд╕-рд╕реНрдерд┐рд░рд╛рдВрдХ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

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

рдЗрд╕рдП рд▓рд┐рдП рддреБрдореНрд╣рд╛рд░реА рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ flux-constant рдпрд╣рд╛рдВ рдПрдХ рдорд╣рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реИред рдпрд╣ instanceof рдЪреЗрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ - bam! - deserialized рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрдиреНрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдВрдЧреЗред

рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдлреНрд▓рдХреНрд╕ рдХреЛ "рд╕рд░рд▓" рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд┐рдП рдХрд┐ рд╡реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ

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

рдореИрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╕рдорд░реВрдкрддрд╛ рд╕реЗ рдЧреБрдорд░рд╛рд╣ рдерд╛ред рдореИрдВ рдЕрдм рд╕рдордЭ рдЧрдпрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдпрд╣рд╛рдВ рдХреЛрдИ DRY рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕рдорд░реВрдкрддрд╛ рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ https://github.com/rackt/redux/issues/786#issuecomment -142649749 рдореЗрдВ рдХрд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЬрд░реВрд░рдд рд╣реИред рдПрдХ рд╕рдореНрдореЗрд▓рди рдХреА рд╕реНрдерд╛рдкрдирд╛! рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдЙрдкрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЗрддрдиреА рдЕрд▓рдЧ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ feature/ACTION_TYPE рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдирд┐рдпрдо рдмрдирд╛рдПрдВ, рдЬреИрд╕реЗ testers/UPLOAD_VIDEO рдпрд╛ customers/UPLOAD_VIDEO ред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЕрдЧрд░ рдпреЗ "рд╕рдореВрд╣" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝реЛрд▓реНрдбрд░ (рдпрд╛ рдмреЗрд╣рддрд░-рдкреИрдХреЗрдЬ) рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред

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

рдореИрдВ рдХреЛрдб рдмрдВрдЯрд╡рд╛рд░реЗ рдХреЗ рд╕рд╛рде huge-apps рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рдирд╛рдорд╛рдВрдХрд┐рдд рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рдЖрджрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛ред

рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реИрдВред URL рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реИрдВ, рдФрд░ рд╡реЗ рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред

@gaearon рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдореИрдВ рдлреНрд▓рдХреНрд╕-рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдХреНрд░рдорд╛рдВрдХрди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ред

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

рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреБрдЫ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рд╣реИ:

https://github.com/erikras/ducks-modular-redux

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рдпрд╛ "рд╕рд╣реА" рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдЕрдиреБрднрд╡ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ред

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

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

рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж :)

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

@pbc рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ

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

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрд░рдордмрджреНрдзрддрд╛ рдФрд░ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рджреЛрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдореНрдореЗрд▓рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж "рдЕрджреНрд╡рд┐рддреАрдпрддрд╛ рдкреНрд░рджрд╛рддрд╛" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рд░рд┐рд╡рд░реНрд╕ рдбреЛрдореЗрди рдирд╛рдо, рдпрд╛ рдЬреАрдердм рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рд░реЗрдкреЛ, рдпрд╛ рдПрдирдкреАрдПрдо рдкрд░ рдкрдВрдЬреАрдХреГрдд рдореЙрдбреНрдпреВрд▓ рдирд╛рдоред


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдХрд╕реНрдЯрдо рднрд╛рд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдФрд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХреНрд▓рд╛рд╕рдиреЗрдо рдХреЛ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдХрд░рддрд╛ рд╣реИ (рд╡реИрд╕реЗ рднреА рдХрдиреНрд╡реЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдлреЛрдбрд╝реЗ, рд▓реЗрдХрд┐рди рдПрдХ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ)ред

рдкреНрд░рд╢реНрди рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП +1ред рдореИрдВрдиреЗ @pbc рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рд╕рдЯреАрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ред рдореЗрд░реЗ рд▓рд┐рдП рднреНрд░рдо рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ reducers рдХреЗ рд▓рд┐рдП CombReducers рд╣реИрдВ, рдЬреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд░рд╛рдЬреНрдп рд╡реГрдХреНрд╖ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреНрд░рдордмрджреНрдз рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд▓рд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬ рдкрд░ рдХреГрддреНрд░рд┐рдо рд╕реАрдорд╛рдПрдВ рд▓рд╛рдж рджреА рдЬрд╛рддреА рд╣реИрдВред

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

рдпрд╣рд╛рдБ рдЙрджрд╛рд╣рд░рдг: https://gist.github.com/samsch/63a54e868d7fa2b6023a

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

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

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

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ "рдХреНрд╖реЗрддреНрд░" рдХреЗ ActionType рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ "рдЬреНрдпрд╛рдорд┐рддрд┐" рд╣реИред рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  1. рдЕрдкреНрдкрд╛-> рдбреНрд░рд╛рдЗрдВрдЧ-> рдЬреНрдпрд╛рдорд┐рддрд┐ (рдирд╛рдо рд╕реНрдерд╛рди = "рдбреНрд░рд╛рдЗрдВрдЧ / рдЬреНрдпрд╛рдорд┐рддрд┐ / рдХреНрд╖реЗрддреНрд░")
  2. AppB-> рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐-> рдЖрдХреГрддрд┐-> рдЬреНрдпрд╛рдорд┐рддрд┐ (рдирд╛рдо рд╕реНрдерд╛рди = "рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐ / рдЖрдХрд╛рд░ / рдХреНрд╖реЗрддреНрд░")

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

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

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП dir рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • consts
  • рдХрдо рдХрд░рдиреЗ
  • рдЕрд╡рдпрд╡
  • рдХрд╣рд╛рдирд┐рдпреЛрдВ

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрд╛рдзрд╛рдПрдВ рдмрдирд╛рдПрдВ:

// song-store/song-store-consts.js
export const ADD = 'SONG_STORE.ADD'
export const REMOVE = 'SONG_STORE.REMOVE'

Reducers, рдЧрд╛рдерд╛ рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп import рдЙрди рд╕рднреА рдХреЗ рд╕рд╛рде * :

// song-store/song-store-actions.js
import * as SONG_STORE from './song-store-consts'

export function addSongStore(name) {
  return {
    type: SONG_STORE.ADD,
    name
  }
}

export function removeSongStore(songStoreId) {
  return {
    type: SONG_STORE.REMOVE,
    songStoreId
  }
}

рдкреЗрдбрд╝ рдХреЗ рдЭрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рджреБрдЦ рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ ES6 рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛ:

import { ADD, REMOVE } as SONG_STORE from './song-store-actions'

рдХрд┐рд╕реА рдХреЛ рднреА рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡реЗрдмрдкреИрдХ 2 рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдкреЗрдбрд╝ рдХреЛ import * рд╣рд┐рд▓рд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдмрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ * рд╕рд╛рде рдЖрдпрд╛рдд рд╣реЛрдиреЗ рдкрд░ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрдо рдореБрджреНрджрд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдХреНрд╕рд░, рдпрд╛ рддреЛ:

  • рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
  • рдЕрдиреВрдареА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдирд╛ред

рд╣рдордиреЗ рдХреБрдЫ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рдЧрд╛:

  1. рд╕рднреА рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд┐рд░ рд░рдЦрдиреЗ рдХреЗ рдХрд╛рд░рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдРрдк рдХреЗ рдмрдврд╝рдиреЗ рдкрд░ рдпрд╣ рдереЛрдбрд╝рд╛ рдХрдорддрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  2. @Samsch рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рдореВрд▓реНрдпреЛрдВ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░рд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╛рдВ, рдорд╛рдирд╡ рдкрдардиреАрдп рднрд╛рдЧ рдХреЛ рдЦреЛрдирд╛ рдЙрд╕рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИред
  3. @Philholden рджреНрд╡рд╛рд░рд╛ рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭрд╕реЗ рдЕрдкреАрд▓ рдХреА, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛рдлреА рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╣реИред

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

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

App/testerAccount/index.js :

// Something like this
const ADD_VIDEO_UPLOAD = `${__filenamespace}/ADD_VIDEO_UPLOAD`;
const ADD_COMMENT = `${__filenamespace}/ADD_COMMENT`;

// Will be transformed into something like this
const ADD_VIDEO_UPLOAD = 'App/testerAccount/ADD_VIDEO_UPLOAD';
const ADD_COMMENT = 'App/testerAccount/ADD_COMMENT';

рдмреЗрдЭрд┐рдЭрдХ рдЗрд╕реЗ рдПрдХ рдХреЛрд╢рд┐рд╢ рджреЗ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИред рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @pbc рдпрд╛ @gaearon рд╕реЗ рдореБрджреНрджрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВред

https://www.npmjs.com/package/babel-plugin-filenamespace

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

рдХреНрдпрд╛ рд╣рдо "featureName$actionType" рдпрд╛ "fileName/ACTION_TYPE" рдпрд╛ "PROJECT.FEATURE.ACTION" ? рдЕрдЧрд░ рд╣рдо рд╕рднреА рдХреБрдЫ рдкрд░ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд░рд┐рдбреНрдпреВрд╕рд░ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдз рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде, рдмрддрдЦ рд░рдХреНрд╖рд╛ рдорд╛рдирдХ рдмрди рдЧрдП рд╣реИрдВред

const ACTION = 'app/feature/ACTION'; рдмрд╣реБрдд рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

@gaearon рдиреЗ рд╣рдореЗрд╢рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ 1: 1 рдХрд╛рд░реНрд░рд╡рд╛рдИ рдФрд░ reducers рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╢рд╛рдпрдж рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣рдордд рд╣реВрдВред рд▓реЗрдХрд┐рди рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЬрд╣рд╛рдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА reducer рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реАрдпрддрд╛ рдЯреЙрдЧрд▓ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
/ MyAccount / toggleNotification
/ рдбреИрд╢рдмреЛрд░реНрдб / toggleNotification
рддреЛ рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рджреЛ рд░реАрдбреНрдпреВрд╕рд░ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП
reducers / notifications.js
cc: @ samit4me , @philholden


рдмрд╕ рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдПрдХ рдлрд╛рдЗрд▓ рдХреЗ рднреАрддрд░ рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ reducers рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ reducer рдХреЛ рджреЗрдЦрдХрд░ рд╣рдо рдпрд╣ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд░рд╛рдЬреНрдп рдореЗрдВ рдХрд┐рддрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рд╡реИрд╕реЗ рднреА, рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рд╕реЗ рд╕реБрдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рджред

@ рд╢рд┐рд╡ : рдпрд╣рд╛рдБ рдХрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рднреАрддрд░ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдПрдХ рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рджреВрд╕рд░рд╛, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╣реА reducer рдХрдИ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

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

@markerikson

рджреВрд╕рд░рд╛, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╣реА reducer рдХрдИ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ redux-actions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ рдХрд┐ рдЗрд╕рдХреА рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдзрд┐ CombAction рд╣реИ рдЬреЛ рдХрд╛рд░реНрдп рдХрд░реЗрдЧреАред рдмрд╕ рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЖрдкрдХреЗ рдЙрдкрд░реЛрдХреНрдд рдХрдерди рдореЗрдВ рдмрд╕ рдЙрд╕реА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред (рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ)
рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдбрдХ рдПрдХреНрд╢рдирдЯрд╛рдЗрдкреНрд╕ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

Mpm рдХреЗ рдкрд╛рд╕ Npm-рдореЙрдбреНрдпреВрд▓-рдпрд╛-рдРрдк / reducer / ACTION_TYPE рдореЗрдВ рдПрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ рд╣реИрдВ

рдХрд╛рд░рдг рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ reducers рджреНрд╡рд╛рд░рд╛ рд╕рджрд╕реНрдпрддрд╛ рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ @mherodev рдиреЗ рдХрд╣рд╛, const ACTION = 'app/feature/ACTION'; рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреАрдорд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛: const ACTION = 'action://app/feature/ACTION'; ред

рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрд╡-рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЬреИрд╕реЗ

let id = 0

function generateActionType (label /* for readability */) {
  id++
  return `app/feature/${id}/${label}`
}

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

рд╣рдо рд▓рд╛рдЗрдирд┐рдВрдЧ рдкрд░ рдРрд╕реА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЙрд▓реНрд▓рдВрдШрди рдХреА рд╕реВрдЪрдирд╛ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рд╕рдорд╛рди рдореВрд▓реНрдп рд╡рд╛рд▓реЗ рджреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВред

рдЕрдЧрд░ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ :)

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

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

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

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

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

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

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