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

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд░рд┐рдПрдХреНрдЯрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдШрдЯрдХреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдореБрдЦреНрдп рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпреЗ рдЧреБрдг (рдЧреБрдг) рдФрд░ рдЕрд╡рд╕реНрдерд╛ рд╣реИрдВред рдЧреБрдг рдХреЗрд╡рд▓-рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдПрдХ рд░рд╛рдЬреНрдп рдПрдХ рдШрдЯрдХ рдХреЗ рднреАрддрд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЗрдХрд╛рдИ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдШрдЯрдХ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИред
рдЪреВрдВрдХрд┐ рд░рд╛рдЬреНрдп рдПрдХ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рддрдВрддреНрд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЧрддрд┐рд╢реАрд▓ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ
рдлреНрд▓рдХреНрд╕ ,
рд░реЗрдбрдХреНрд╕ ,
рдореЛрдмрдПрдХреНрд╕ рдкреНрд░рдореБрдЦ рд╣реИрдВ ред
Redux рдПрдХ рдРрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреЗрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд╕рд╛рде рд╣реА рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╣реИ рдЬрд┐рдирдореЗрдВ рдХреБрдЫ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Redux рдЖрдХрд╛рд░ рдореЗрдВ рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
import { createStore } from 'redux'; const initialState = { auth: { loggedIn: false } } const store = createStore((state = initialState, action) => { switch (action.type) { case "LOG_IN": return { ...state, auth: { loggedIn: true } }; break; case "LOG_OUT": return { ...state, auth: { loggedIn: false } }; break; default: return state; break; } })
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛- redux рдкреИрдХреЗрдЬ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбрдХреНрд╕ рдкреИрдХреЗрдЬ Redux рд╕реНрдЯреЗрдЯ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
- рдкреНрд░рд╕реНрддреБрддрд┐ рдШрдЯрдХред рд╡реЗ рдХреЗрд╡рд▓ рдЖрд╡реЗрджрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ рдФрд░ Redux рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЕрд╡рдЧрдд рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдирдХреЗ рдкрд╛рд╕ рднреА рдЬрд╛рддреЗ рд╣реИрдВред
- рдХрдВрдЯреЗрдирд░ рдШрдЯрдХред рд╡реЗ рдЖрд╡реЗрджрди рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ рдФрд░ Redux рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдЕрдХреНрд╕рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╡реЗ Redux рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред
рдШрдЯрдХреЛрдВ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Redux рд░рд╛рдЬреНрдп рд╕реЗ рдЬреБрдбрд╝реЗ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-Redux рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдирд┐рдореНрди рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИ:
<Provider store>
- рдЖрдкрдХреЛ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕рдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╕рднреА рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП Redux рд╕реНрдерд┐рддрд┐ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредconnect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])
- рдЖрдкрдХреЛ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрд╢рди-рд░рд┐рдбреНрдпреВрдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
npm install react-redux
рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; import createStore from './createReduxStore'; const store = createStore(); const rootElement = document.getElementById('root'); ReactDOM.render(( <Provider store={store}> <AppRootComponent /> </Provider> ), rootElement);
рдЕрдм рдЖрдк рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВред рдпрд╣
connect()
рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
AppRootComponent
рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рднреАрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдиреЗрдХреНрдЯ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░реЗрдВ?
рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбреНрдпреВрдХ
connect()
API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЬрд┐рд╕ рд╕рдВрдЧреНрд░рд╣рдг рд╕реЗ рдЖрдк рдХрдиреЗрдХреНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджрд░реНрдн рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрдХ рдХреЗ рд╕рдмрд╕реЗ рдКрдкрд░реА рдкреВрд░реНрд╡рдЬ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
connect()
рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рд╕реНрддреБрддрд┐ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдореЗрдВ, рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдирд┐рдпрдорд┐рдд рдШрдЯрдХ рдХреЛ
connect()
рдХрд░рдХреЗ рд▓реМрдЯреЗ рдПрдХ рдЙрдЪреНрдЪ-рдХреНрд░рдо рд╡рд╛рд▓реЗ рдШрдЯрдХ рдореЗрдВ рд▓рдкреЗрдЯрдХрд░ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ
connect()
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-reduxред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
import React from 'react'; import { connect } from 'react-redux'; import Profile from './components/Profile'; function ProfileContainer(props) { return ( props.loggedIn ? <Profile profile={props.profile} /> : <div>Please login to view profile.</div> ) } const mapStateToProps = function(state) { return { profile: state.user.profile, loggedIn: state.auth.loggedIn } } export default connect(mapStateToProps)(ProfileContainer);
ред Redux рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛
рдЖрдк рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
store.subscribe()
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐,
connect()
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдФрд░ рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬреЛ рдЖрдк рдЕрдиреНрдп рддрдВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рджреЗрдХрд░ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдо рдЙрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
import React, { Component } from 'react'; import store from './reduxStore'; import Profile from './components/Profile'; class ProfileContainer extends Component { state = this.getCurrentStateFromStore() getCurrentStateFromStore() { return { profile: store.getState().user.profile, loggedIn: store.getState().auth.loggedIn } } updateStateFromStore = () => { const currentState = this.getCurrentStateFromStore(); if (this.state !== currentState) { this.setState(currentState); } } componentDidMount() { this.unsubscribeStore = store.subscribe(this.updateStateFromStore); } componentWillUnmount() { this.unsubscribeStore(); } render() { const { loggedIn, profile } = this.state; return ( loggedIn ? <Profile profile={profile} /> : <div>Please login to view profile.</div> ) } } export default ProfileContainer;
connect()
рдлрд╝рдВрдХреНрд╢рди, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрди рдЧреБрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдЧреБрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЧреБрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рд░рд╛рдЬреНрдп рд╕реЗ рдЪрдпрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдЧреБрдгреЛрдВ рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХрд╛ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдИ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ
connect()
рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдЬреБрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдирд╛рдЯреЙрдореА рдХрдиреЗрдХреНрдЯ ()
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбрдХреНрд╕ рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП
connect()
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЪрд╛рд░ рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред
connect()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдЙрдЪреНрдЪ-рдСрд░реНрдбрд░ рдШрдЯрдХ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЙрдЪреНрдЪ-рдСрд░реНрдбрд░ рдШрдЯрдХ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрдВрдЯреЗрдирд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
const ContainerComponent = connect()(BaseComponent)
рдпрд╣рд╛рдБ
connect()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВ:
connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])
тЦН mapStateToProps рддрд░реНрдХ
mapStateToProps
рддрд░реНрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕
connect()
рддрд░реНрдХ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЕрдкрдбреЗрдЯ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП
mapStateToProps
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрддрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░реНрдХ рдХреЗ
undefined
рдпрд╛
null
рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ
connect()
рдкрд╛рд╕ рдХрд░реЗрдВред
mapStateToProps
рдлрд╝рдВрдХреНрд╢рди рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рджреВрд╕рд░рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░, рдпрджрд┐ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдШрдЯрдХ рдХреЛ рджрд┐рдП рдЧрдП рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ:
const mapStateToProps = function(state) { return { profile: state.user.profile, loggedIn: state.auth.loggedIn } } export default connect(mapStateToProps)(ProfileComponent);
рдпрджрд┐ рдХреЛрдИ рдирд┐рдпрдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ
mapStateToProps
рд╕реЗ
mapStateToProps
, рддреЛ рд▓реМрдЯреА рдЧрдИ
stateProps
рдСрдмреНрдЬреЗрдХреНрдЯ рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд╣реИред рдЖрдк рдЗрди рдЧреБрдгреЛрдВ рдХреЛ рдШрдЯрдХ рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
function ProfileComponent(props) { return ( props.loggedIn ? <Profile profile={props.profile} /> : <div>Please login to view profile.</div> ) }
рдпрджрд┐
mapStateToProps
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
mapStateToProps
рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рдЬреНрдЮрд╛рдкрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред
тЦН mapDispatchToProps рддрд░реНрдХ
mapDispatchToProps
рддрд░реНрдХ рдпрд╛ рддреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдпрд╛ рддреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред
mapDispatchToProps
рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрдирд░реЗрдЯрд░ рд╣реИрдВ:
export const writeComment = (comment) => ({ comment, type: 'WRITE_COMMENT' }); export const updateComment = (id, comment) => ({ id, comment, type: 'UPDATE_COMMENT' }); export const deleteComment = (id) => ({ id, type: 'DELETE_COMMENT' });
рдЕрдм
mapDispatchToProps
рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ
mapDispatchToProps
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ
mapDispatchToProps
, рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛
mapDispatchToProps
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдПрдХ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
dispatch()
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред рдЖрдк рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдШрдЯрдХ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
import React from 'react'; import { connect } from 'react-redux'; import { updateComment, deleteComment } from './actions'; function Comment(props) { const { id, content } = props.comment; // props.dispatch() const editComment = () => props.dispatch(updateComment(id, content)); const removeComment = () => props.dispatch(deleteComment(id)); return ( <div> <p>{ content }</p> <button type="button" onClick={editComment}>Edit Comment</button> <button type="button" onClick={removeComment}>Remove Comment</button> </div> ) } export default connect()(Comment);
рд╡рд╕реНрддреБ рд╣рд╕реНрддрд╛рдВрддрд░рдг
рдпрджрд┐ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ
mapDispatchToProps
рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ Redux рдПрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ
dispatch()
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╡рд┐рдзрд┐ рдХреЙрд▓ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЗрд╕реЗ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореА рд╡рд╕реНрддреБ,
dispatchProps
, рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг
mapDispatchToProps
рддрд░реНрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
mapDispatchToProps
рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рд╕рд╛рде рд╣реА рдЬрдирд░реЗрдЯрд░ рдХреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
import React from 'react'; import { connect } from 'react-redux'; import { updateComment, deleteComment } from './actions'; function Comment(props) { const { id, content } = props.comment; // , , const editComment = () => props.updatePostComment(id, content); const removeComment = () => props.deletePostComment(id); return ( <div> <p>{ content }</p> <button type="button" onClick={editComment}>Edit Comment</button> <button type="button" onClick={removeComment}>Remove Comment</button> </div> ) } // const mapDispatchToProps = { updatePostComment: updateComment, deletePostComment: deleteComment } export default connect(null, mapDispatchToProps)(Comment);
рд╕рдорд╛рд░реЛрд╣ рд╣рд╕реНрддрд╛рдВрддрд░рдг
рдЬрдм рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдлрдВрдХреНрд╢рди
mapDispatchToProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
mapDispatchToProps
рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ
mapDispatchToProps
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ
dispatch()
рд╕реНрдЯреЛрд░реЗрдЬ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ,
dispatch()
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╡рд┐рдзрд┐ред
mapStateToProps
рд╕рд╛рде, рдлрд╝рдВрдХреНрд╢рди рд╡реИрдХрд▓реНрдкрд┐рдХ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдШрдЯрдХ рдХреЛ рджрд┐рдП рдЧрдП рдореВрд▓ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдореИрдкрд┐рдВрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ, рддреЛ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ
mapDispatchToProps
рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЬреНрдЮрд╛рдкрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
Redux рд╕реЗ
bindActionCreators()
рд╣реЗрд▓реНрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХреНрд╢рди рдЬреЗрдирд░реЗрдЯрд░реЛрдВ рдХреЛ
dispatch()
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ,
mapDispatchToProps
рдХреА рднреВрдорд┐рдХрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди
bindActionCreators()
рд╕рд╛рде рдХрд╛рдо рдХреЛ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
props.actions
рдШрдЯрдХ рдХреЗ
props.actions
рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
import React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import * as commentActions from './actions'; function Comment(props) { const { id, content } = props.comment; const { updateComment, deleteComment } = props.actions; // props.actions const editComment = () => updateComment(id, content); const removeComment = () => deleteComment(id); return ( <div> <p>{ content }</p> <button type="button" onClick={editComment}>Edit Comment</button> <button type="button" onClick={removeComment}>Remove Comment</button> </div> ) } const mapDispatchToProps = (dispatch) => { return { actions: bindActionCreators(commentActions, dispatch) } } export default connect(null, mapDispatchToProps)(Comment);
RArgument рдорд░реНрдЬрдкреНрд░реЙрдкреНрд╕
рдпрджрд┐
mergeProps
рддрд░реНрдХ рдХреЛ
connect()
рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
connect()
, рддреЛ рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ:
stateProps
mapStateToProps()
рдХреЙрд▓ рд╕реЗ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИредdispatchProps
- mapDispatchToProps()
рд╕реЗ рдПрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЙрдкрд░реНрдЯреА рдСрдмреНрдЬреЗрдХреНрдЯредownProps
- рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдореВрд▓ рдЧреБрдгред
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд▓рд┐рдкрдЯреЗ рдШрдЯрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпрд╛ рдкреНрд░реЙрдкрд░реНрдЯреА-рдмреЗрд╕реНрдб рдПрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░реЛрдВ рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╢рд░реНрдд рдорд╛рдирдЪрд┐рддреНрд░рдг рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
рдпрджрд┐
connect()
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
const mergeProps = (stateProps, dispatchProps, ownProps) => { return Object.assign({}, ownProps, stateProps, dispatchProps) }
рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ mentArgument
рдЪреМрдереЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ
connect()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╕реНрддреБ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рддреЛ,
connect()
connectAdvanced()
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдпрд╣
connectAdvanced()
, рд╕рд╛рде рд╣реА рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рд╣реИ, рдЬрд┐рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
connect()
рд╕рд╛рде рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдХрдиреЗрдХреНрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
тЦНCreate рднрдВрдбрд╛рд░рдг
connect()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдШрдЯрдХ рдШрдЯрдХ рдХреЛ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдШрдЯрдХ рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ
NewComment
, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдирдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд┐рдкреНрдкрдгреА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдШрдЯрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
import React from 'react'; import { connect } from 'react-redux'; class NewComment extends React.Component { input = null writeComment = evt => { evt.preventDefault(); const comment = this.input.value; comment && this.props.dispatch({ type: 'WRITE_COMMENT', comment }); } render() { const { id, content } = this.props.comment; return ( <div> <input type="text" ref={e => this.input = e} placeholder="Write a comment" /> <button type="button" onClick={this.writeComment}>Submit Comment</button> </div> ) } } export default connect()(NewComment);
рдЗрд╕ рдШрдЯрдХ рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдШрдЯрдХ рдЬреБрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред рдпрд╣ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЕрдм рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдореЗрдВ рд╕реНрдЯреЛрд░ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рдирд╛
Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рдХреЛ рд▓реИрд╕ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдШрдЯрдХ рдХреЗ
store
рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ:
import React from 'react'; import store from './reduxStore'; import NewComment from './components/NewComment'; function CommentsApp(props) { return <NewComment store={store} /> }
<рдкреНрд░рджрд╛рддрд╛> рдШрдЯрдХ рдореЗрдВ рд╕реНрдЯреЛрд░ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рдирд╛
рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдЕрдм рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбрдХреНрд╕ рдкреИрдХреЗрдЬ рдбреЗрд╡рд▓рдкрд░ рдХреЛ
<Provider>
рдШрдЯрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдЯ рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣
store
рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Redux рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдПрдХ рдХрдбрд╝реА рд╣реИ, рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред
store
рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрд╡реЗрджрди рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЛ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджрд░реНрдн рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:
import React from 'react'; import ReactDOM from 'react-dom'; import store from './reduxStore'; import { Provider } from 'react-redux'; import NewComment from './components/NewComment'; function CommentsApp(props) { return <NewComment /> } ReactDOM.render(( <Provider store={store}> <CommentsApp /> </Provider> ), document.getElementById('root'))
тЦНрдСрдкреЗрдирдкреНрд░реЙрдкреНрд╕ рдПрдХреНрд╕реЗрд╕ рдСрд░реНрдЧрдирд╛рдЗрдЬреЗрд╢рди
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,
mapStateToProps
рдФрд░
mapDispatchToProps
рдлрд╝рдВрдХреНрд╢рди рдХреЛ
connect()
рдХрд░рдиреЗ рдХреЗ
connect()
mapStateToProps
connect()
рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╣реА рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдШрдЯрдХ рдХреЗ рдЧреБрдг рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрджрд┐ рдШреЛрд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 2 рд╕реЗ рдХрдо рд╣реИ, рддреЛ
ownProps
рд╕рдВрдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдпрд╛ рдХрдо рд╕реЗ рдХрдо 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
ownProps
рдЬрд╛рдПрдВрдЧреЗред
рдЦреБрдж рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛
const mapStateToProps = function() { console.log(arguments[0]);
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
ownProps
рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╢реЗрд╖ рдИрдПрд╕ 6 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдб рдХрд╛рдо рдХрд░реЗрдЧрд╛:
const mapStateToProps = function(...args) { console.log(args[0]);
рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
const mapStateToProps = function(state) { console.log(state);
рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ,
state
ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк,
arguments[1]
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг
undefined
рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдХрд┐
ownProps
рд╕рдВрдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛
const mapStateToProps = function(state, ownProps = {}) { console.log(state);
рдХреЗрд╡рд▓ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ,
state
, рдЪреВрдВрдХрд┐ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░,
ownProps
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИред рдирддреАрдЬрддрди, рдЪреВрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ,
ownProps
рдкрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореИрдкрд┐рдВрдЧ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рдд рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рдеред
рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛
const mapStateToProps = function(state, ownProps) { console.log(state);
рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИред рдЕрд░реНрдерд╛рддреН, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
ownProps
рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рджреЛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбрдХреНрд╕ рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП
connect()
рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдФрд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдФрд░ рд░реЗрдбрдПрдХреНрд╕ рд░рд╛рдЬреНрдп рд╕реЗ рдЬреБрдбрд╝реЗ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдордиреЗ
connect()
рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░реЗрдбрд┐рдЯ рдкреНрд░рд▓реЗрдЦрди рдХреЗ
рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?
