рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбрдХреНрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд▓реЗрдЦ, рдЬрд┐рд╕реЗ рд╣рдо рдЖрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬреЛ рдХрд┐ 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 рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

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

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-Redux рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдирд┐рдореНрди рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИ:

  1. <Provider store> - рдЖрдкрдХреЛ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕рдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╕рднреА рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП Redux рд╕реНрдерд┐рддрд┐ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  2. connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options]) - рдЖрдкрдХреЛ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

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

 npm install react-redux --save 

рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП 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]); // state console.log(arguments[1]); // ownProps }; 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, ownProps рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╢реЗрд╖ рдИрдПрд╕ 6 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдб рдХрд╛рдо рдХрд░реЗрдЧрд╛:

 const mapStateToProps = function(...args) { console.log(args[0]); // state console.log(args[1]); // ownProps }; 

рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 const mapStateToProps = function(state) { console.log(state); // state console.log(arguments[1]); // undefined }; 

рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, state ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, arguments[1] рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг undefined рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдХрд┐ ownProps рд╕рдВрдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛


 const mapStateToProps = function(state, ownProps = {}) { console.log(state); // state console.log(ownProps); // {} }; 

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

рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛


 const mapStateToProps = function(state, ownProps) { console.log(state); // state console.log(ownProps); // ownProps }; 

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИред рдЕрд░реНрдерд╛рддреН, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, ownProps рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рджреЛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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


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

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

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


All Articles