рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдмрдбрд╝реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ / Redux рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ {domain} /selectors.js рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЕрдХреНрд╕рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдбрдХреНрд╕ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реВрдЪреА рджреЗрдЦрддрд╛ рд╣реВрдВ:
getUsers(state) getUser(id)(state) getUserId(id)(state) getUserFirstName(id)(state) getUserLastName(id)(state) getUserEmailSelector(id)(state) getUserFullName(id)(state) тАж
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рд╣рдо рдпрд╣ рд╕рдордЭрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЪрдпрдирдХрд░реНрддрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдмрдЪ рдЧрдП рд╣реИрдВред

Redux рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ
рдЪрд▓реЛ Redux рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рд╡рд╣ рдХреНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВ? Redux.js.org рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ Redux "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд░рд╛рдЬреНрдп рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рдХрдВрдЯреЗрдирд░ рд╣реИ"
Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ, рднрд▓реЗ рд╣реА рд╡реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрдВред рдкреВрд░реЗ рд░рд╛рдЬреНрдп рд╕реЗ рдХреБрдЫ рднрд╛рдЧреЛрдВ рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрдирдХрд░реНрддрд╛ рд╕рд┐рд░реНрдл рдЧреЗрдЯрд░реНрд╕ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдкреНрд░рдкрддреНрд░ рдХреЗ рдХрд╛рд░реНрдп (State) => SubState
ред рдЖрдорддреМрд░ рдкрд░ рд╣рдо рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рд╕реАрдзреЗ рд░рд╛рдЬреНрдп рддрдХ рди рдкрд╣реБрдБрдЪ рд╕рдХреЗрдВ, рдФрд░ рдлрд┐рд░ рд╣рдо рдЗрди рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝ рдпрд╛ рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред
рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдбреВрдм рдЧрдпрд╛
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдкрд░рд┐рдЪрдп рдореЗрдВ рдореИрдВрдиреЗ рдЬрд┐рди рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╡реЗ рдЬрд▓реНрджреА рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдХреЛрдб рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рдореЗрдВ рдПрдХ рдирдпрд╛ рдИрдореЗрд▓ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдШрдЯрдХ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ firstName
рдФрд░ рдЕрдВрддрд┐рдо firstName
рдЗрдирдкреБрдЯ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЕрдм рдпрд╣ рдПрдХ рдФрд░ email
рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдореЗрдВ рддрд░реНрдХ рдХреЗ рдмрд╛рдж, рдПрдХ рдирдпрд╛ рдИрдореЗрд▓ рдлрд╝реАрд▓реНрдб рд╢реБрд░реВ рдХрд░рддреЗ рд╣реБрдП, рд▓реЗрдЦрдХ рдХреЛ getUserEmailSelector
рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдШрдЯрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрд┐рдВрдЧреЛ!
рд▓реЗрдХрд┐рди рдмрд┐рдВрдЧреЛ рд╣реИ? рдФрд░ рдЕрдЧрд░ рд╣рдореЗрдВ рдПрдХ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛? рд╣рдо рдЗрд╕реЗ рдЕрдиреНрдп рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдФрд░ рд╢рд╛рдпрдж рд╣рдо рдЗрд╕ рддрд╕реНрд╡реАрд░ рдкрд░ рдЖрдПрдВрдЧреЗ:
const getUsers = (state) => state.users; const getUser = (id) => (state) => getUsers(state)[id]; const getUserEmailSelector = (id) => (state) => getUser(id)(state).email;
рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рдЙрдарддрд╛ рд╣реИ: getUserEmailSelector
рдЪрдпрдирдХрд░реНрддрд╛ рдпрджрд┐ getUser
рдЪрдпрдирдХрд░реНрддрд╛ getUser
рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП? рдФрд░ рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд┐рддрд┐ рд╣реИ - рдмрдЧ, рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ, рд╡рд┐рд░рд╛рд╕рдд - рд╕рдм рдХреБрдЫ рдЗрд╕рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдо рддреМрд░ рдкрд░, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдХрд╛рдо рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЕрдЧрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрддреНрдкрд╛рджрди рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рдорд╛рди рдирдХрд▓реА рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдореЗрдВ рдЗрд╕ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рд░рд╛рдЬреНрдп рдХреЗ рдореЙрдХ рдбреЗрдЯрд╛ (рдХреНрдпреЛрдВрдХрд┐ рд░рд╛рдЬреНрдп рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЧреИрд░-рд╕реБрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдбреЗрдЯрд╛ рдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЦреАрдВрдЪ рд╕рдХрддрд╛ рд╣реИред
рдЪрд▓реЛ рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ getUserEmailSelector
рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рд▓рд┐рдЦрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдШрдЯрдХ рдХреЛ рд░рд╛рдЬреНрдп рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
const mapStateToProps = (state, ownProps) => ({ firstName: getUserFirstName(ownProps.userId)(state), lastName: getUserLastName(ownProps.userId)(state), // email: getUserEmailName(ownProps.userId)(state), })
рдЙрдкрд░реЛрдХреНрдд рддрд░реНрдХ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╡рд╣ рд╕рдореВрд╣ рдорд┐рд▓рд╛ рдЬреЛ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдерд╛ред
рд╣рдо рдмрд╣реБрдд рджреВрд░ рдирд┐рдХрд▓ рдЧрдП рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдордиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрджреНрдо рдПрдкреАрдЖрдИ рд▓рд┐рдЦрд╛ред рдЗрд╕ API рдХрд╛ рдЙрдкрдпреЛрдЧ Redux рдХреЗ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд░рд╛рдЬреНрдп рдХрд╛рд╕реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ API рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдХрд╛рдИ рдореЗрдВ рдирдП рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдирдП рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЙрдиреНрд╣реЗрдВ mapStateToProps рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЕрдзрд┐рдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╛ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрдХрд╛рдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдпрджрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИрдВ - рд╢рд╛рдпрдж рд╣рдо рдмрд╕ рдЧреЗрдЯрд╡реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдЗрдХрд╛рдИ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рд╕реАрдзреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
const user = getUser(id)(state); const email = user.email;
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓реЗрдЦрди рдФрд░ рд╕рдорд░реНрдерди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рднреА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд╣рд╛рдВ user.email
рдХрд╛ user.email
( рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ рдпрд╛ рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рдЬрд┐рд╕реЗ рд╣рдо рдмрджрд▓рддреЗ рд╣реИрдВ)ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде, рдпрд╣ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рдмрди рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рднреА рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрдпрдирдХрд░реНрддрд╛ рдерд╛, рддреЛ рдЗрд╕рдиреЗ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдмрдЪрд╛рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рдВрднрд╛рд▓рдиреЗ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рдерд╛ред
рд╕реАрдзреА рдкрд╣реБрдВрдЪ рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЧрдгрдирд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде, рдЬреЛ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рдирд╛рдо рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИ? рдЖрдЧреЗ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

рдбреЛрдореЗрди рдореЙрдбрд▓ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Redux - рдорд╛рдзреНрдпрдорд┐рдХ
рдЖрдк рджреЛ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдХрд░ рдЗрд╕ рддрд╕реНрд╡реАрд░ рдкрд░ рдЖ рд╕рдХрддреЗ рд╣реИрдВ:
- рд╣рдо рдЕрдкрдиреЗ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ?
- рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ? (рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо Redux * рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдиреЛрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ * рдХрд┐ рджреГрдврд╝рддрд╛ рдкрд░рдд рдХреЛ DDD рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)
рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм "рд╣рдо рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ" (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛), рд╣рдореЗрдВ redux рд╕реЗ рдЕрдореВрд░реНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП API рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
// api.ts type User = { id: string, firstName: string, lastName: string, email: string, ... } const getFirstName = (user: User) => user.firstName; const getLastName = (user: User) => user.lastName; const getFullName = (user: User) => `${user.firstName} ${user.lastName}`; const getEmail = (user: User) => user.email; ... const createUser = (id: string, firstName: string, ...) => User;
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдПрдкреАрдЖрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд╣рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ рджреБрд░реНрдЧрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдХрднреА рднреА рдЗрдХрд╛рдИ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реАрдзреЗ рдирд╣реАрдВ рдореБрдбрд╝реЗрдВрдЧреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдпрд╣ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдЗрдХрд╛рдИ рдХреЗ рдкрд╛рд╕ рдлрд╝реАрд▓реНрдб рд╣реИрдВред
рдЕрдм рд╣рдо Redux рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рд╣рдорд╛рд░реЗ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рд╣реИ?
- рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдПрдХ рд╕реВрдЪреА? рд╢рдмреНрджрдХреЛрд╢ (рдХреБрдВрдЬреА-рдореВрд▓реНрдп)? рдФрд░ рдХреИрд╕реЗ?
- рд╣рдореЗрдВ рд░рд╛рдЬреНрдп рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕реЗ рдорд┐рд▓реЗрдЧрд╛? рдХреНрдпрд╛ рд╕рдВрд╕реНрдорд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? (GetUser рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ)
рдмрдбрд╝реЗ рд▓рд╛рдн рдХреЗ рд╕рд╛рде рдЫреЛрдЯрд╛ рдПрдкреАрдЖрдИ
рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдФрд░ рд░рд╛рдЬреНрдп рдХреЗ рдмреАрдЪ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЛрдирд╕ рдорд┐рд▓рддреЗ рд╣реИрдВред
Api.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдбреЛрдореЗрди рдореЙрдбрд▓ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдФрд░ рдЗрд╕рдХрд╛ рдПрдкреАрдЖрдИ)ред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЙрдзрд╛рд░ рджреЗрддрд╛ рд╣реИ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдореЙрдбрд▓ рдФрд░ рдПрдкреАрдЖрдИ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЧреБрдгреЛрдВ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдЙрдкрдпреЛрдЧ рдкрд░ рдПрдХ рдЕрддреБрд▓рдиреАрдп рд▓рд╛рдн рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрдм рдЖрд╕рд╛рди рд╣реИ - рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реБрдЖ, рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддрд╛ рд╣реИред рдПрдкреАрдЖрдИ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИ: рдЗрд╕реЗ рдкреВрд░реЗ рд░рд╛рдЬреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдЕрдм рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреА рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдПрдкреАрдЖрдИ рдХрд╛ Redux рдФрд░ рдЗрд╕рдХреЗ рдмреЙрдпрд▓рд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред
рдШрдЯрдХ рд╕рд╣рд╛рд░рд╛ рд╕рд╛рдл рд╣реЛ рдЧрдП рд╣реИрдВред рдЗрдирдкреБрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдирд╛рдо, рдЕрдВрддрд┐рдо рдирд╛рдо рдФрд░ рдИрдореЗрд▓ рдЧреБрдгреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдШрдЯрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - getUserред
рдРрд╕реЗ рдПрдкреАрдЖрдИ рд╕реЗ рд░реАрдбреНрдпреВрд╕рд░ рдФрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдн рд╣реИрдВред рд▓рд╛рдн рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдЕрдиреБрдкрд▓рдмреНрдз рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдпрд╛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, Redux рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ "рдЕрдиреБрдорд╛рдирд┐рдд рдХрдВрдЯреЗрдирд░" рдмрди рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рд░ рдЪреАрдЬ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ "рджрд┐рд╡реНрдп" рд╡рд╕реНрддреБ рдмрдирдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдЪреНрдЫреЗ рдЗрд░рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде (рдпрд╣рд╛рдВ рдкрдврд╝реЗрдВ - рдЪрдпрдирдХрд░реНрддрд╛) рдирд░рдХ рдХреА рд░рд╛рд╣ рдкреНрд░рд╢рд╕реНрдд рд╣реИ: рд╣рдо рд╕реАрдзреЗ рдЗрдХрд╛рдИ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдпрд╛ рдерд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред
рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИ - рдкрд╣рд▓реЗ рдбреЛрдореЗрди рдореЙрдбрд▓ рдФрд░ рдЙрд╕рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ, рдлрд┐рд░ Redux (рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ, рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ) рд╕реЗ рдирд┐рдкрдЯреЗрдВред рдЗрд╕ рддрд░рд╣ рдЖрдк рдмреЗрд╣рддрд░ рдФрд░ рдЫреЛрдЯреЗ рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ - рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдиреЛрдЯреНрд╕
- рдореИрдВрдиреЗ рд░рд╛рдЬреНрдп рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░реВрд╕реА-рднрд╛рд╖реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░ рдЪреБрдХрд╛ рд╣реИред
- рд▓реЗрдЦрдХ рдЕрдкрд╕реНрдЯреНрд░реАрдо / рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ "рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп / рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХреЛрдб" (рдпрджрд┐ рдорд╛рд░реНрдЯрд┐рди рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдХрд░рддрд╛ рд╣реИ рдпрд╛ "рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ / рдХреЛрдб рдЬреЛ рдХрд┐ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХреЛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдХреЗ рдЦреБрдж рдХреЛ рд╕рд╛рдВрддреНрд╡рдирд╛ рджреЗрддрд╛ рд╣реВрдВред
рдореИрдВ рдкреАрдПрдо рдХреЗ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕рд╣рд░реНрд╖ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдХрд░реВрдВрдЧрд╛ред