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

рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдЪрдЯреАрдПрдордПрд▓, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдФрд░ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ред
рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рд░рд┐рдПрдХреНрдЯ рдХреНрдпреЛрдВ рдЪреБрдирддреЗ рд╣реИрдВ?
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдВ рдЙрддрд░реЗрдВ, рдЖрдЗрдП рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд░рд┐рдПрдХреНрдЯ рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдИ рдпреВрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреНрдпреЛрдВ рдЪреБрдиреЗрдВ? рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЗрдВрдЯрд░рдлреЗрд╕ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреВрд▓реНрд╕ - рд░рд┐рдПрдХреНрдЯ рдФрд░ рдПрдВрдЧреБрд▓рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ Vue.js рдврд╛рдВрдЪрд╛, рдЬреЛ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреЛ рдЗрд╕ рддреБрд▓рдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЦреБрдж рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдХреЛрдгреАрдп рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд▓реЗрдВрдЧреЗред
тЦН рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╡рд░реНрдгрди рдХреЗ рд▓рд┐рдП рдШреЛрд╖рдгрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдкрд░ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди рдирд╣реАрдВ рд╣реИ)ред рдпрд╣, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА рдХрд╛ рдорддрд▓рдм рд╣реИред
рджреВрд╕рд░реА рдУрд░, рдХреЛрдгреАрдп рдореЗрдВ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЯреВрд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдШрдЯрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рдЖрдзреБрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рд╕реЗ рдЖрдк рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрд╕рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд▓рдЧрддрд╛ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреЛрдгреАрдп рдореЗрдВ рдЗрддрдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛, рд╡реЗ рд╕рд┐рд░реНрдл рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдИ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдШрдЯрдХ рдХреЛрдб рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рддреИрдпрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдШрдЯрдХреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
тЦН рд╕реНрдкрд╖реНрдЯ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛
рдХреЛрдгреАрдп рдХреЛрдб
ng-model
,
ngIf
рдФрд░
ngFor
рдЬреИрд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдмрд▓реНрдХрд┐ рдмреЛрдЭрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, JSX рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдпрдорд┐рдд HTML рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд░рд┐рдПрдХреНрдЯ рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореВрд▓рднреВрдд рд░реВрдк рд╕реЗ рдирдИ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реАрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
const Greetings = ({ firstName }) => ( <div>Hi, {firstName}</div> );
тЦН рд╕рд╣реА рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛
рдпреВрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЪреБрдирдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдХ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдВрдЧреБрд▓рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдХрдо рдЕрдореВрд░реНрддрддрд╛рдПрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрднрд╡рддрдГ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рджрд┐рди рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдмрд╣реБрдд рдЬрд▓реНрджреА, рдмрд╣реБрдд рдЬрд▓реНрджреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдХреЛрдгреАрдп рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдирдИ рднрд╛рд╖рд╛ (рдПрдВрдЧреБрд▓рд░ рдЯрд╛рдЗрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ) рд╕реАрдЦрдиреА рд╣реЛрдЧреА, рд╕рд╛рде рд╣реА рдпрд╣ рднреА рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдгреАрдп рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрджрдд рдбрд╛рд▓реЗрдВред
рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рддрдВрддреНрд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рдХреЛрдгреАрдп рдореЗрдВ рджреЛ-рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╣реИред рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕реНрд╡рдд: рдЕрджреНрдпрддрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдиреБрдХрд╕рд╛рди рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдпрджрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдареАрдХ рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд╛рдЬреНрдп рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИред
рджреВрд╕рд░реА рдУрд░, рд░рд┐рдПрдХреНрдЯ, рд╡рди-рд╡реЗ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣рдореЗрд╢рд╛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рд╣реБрдЖред рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП тЦНFunctional рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдордЬрдмреВрдд рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреЛрдгреАрдп рдореЗрдВ, рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлрд╛рдпрджреЗ рдХреЗ рдЕрддреНрдпрдзрд┐рдХ рдХреЛрдб рдЬрдЯрд┐рд▓рддрд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШрдЯрдХреЛрдВ рдХреЛ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреВрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪреНрдЫ рд╣рд╡рд╛ рдХреА рд╕рд╛рдВрд╕ рд╕реЗ рддреБрд▓рдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЕрдм рдЬрдм рд╣рдордиреЗ рд░рд┐рдПрдХреНрдЯ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рдд: рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдЕрднреНрдпрд╛рд╕
тЦНNode.js
Node.js рдПрдХ рд╕рд░реНрд╡рд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреНрд╖рдорддрд╛рдПрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЕрдм
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
Ation рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди
рдпрд╣рд╛рдВ рд╣рдо рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдореВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЗрд╕рдмреБрдХ рд╕реЗ
create-react-app
рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдХрд╛рдордХрд╛рдЬреА рдорд╛рд╣реМрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
create-react-app
рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
create-react-app
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
create-react-app
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ
create-react-app
, рдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
npm i -g create-react-app
рдлрд┐рд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
create-react-app react-intro
рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреИрдпрд╛рд░реА рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
cd react-intro npm start
рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдк
http: // localhost: 3000 / рдкрд░ рдмреНрд░рд╛рдЙрдЬрд░ рдкрд░ рдЬрд╛рдХрд░ рдПрдХ рдирдпрд╛ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред
тЦН рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛
рдЖрдЗрдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдЖрдИрдбреАрдИ (рдореИрдВ
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЦреЛрд▓реЗрдВред
Index.html рдлрд╝рд╛рдЗрд▓
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ,
public/index.html
рдкрд░ рд╕реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред рдпрд╣рд╛рдБ рдЖрдк рдРрд╕рд╛ рдХрд░рдХреЗ рджреЗрдЦреЗрдВрдЧреЗред
Index.html рдлрд╝рд╛рдЗрд▓рдпрд╣рд╛рдВ рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрдВрдХреНрддрд┐
<div id="root">
рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рднреА рддрддреНрд╡ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдЧрд╛ред
Index.js рдлрд╝рд╛рдЗрд▓
рдЕрдм
src/index.js
рдЦреЛрд▓реЗрдВред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╡рд╣ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред рдФрд░, рд╡реИрд╕реЗ, рдЖрд╡реЗрджрди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ
src
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
Index.js рдлрд╝рд╛рдЗрд▓рдпрд╣рд╛рдБ рдХреЛрдб рдХреА рд╡рд╣ рдкрдВрдХреНрддрд┐ рд╣реИ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкреГрд╖реНрда рдкрд░ рдПрдХ "рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди" рдХрд╣рддреЗ рд╣реИрдВ:
ReactDOM.render(<App />, document.getElementById('root'));
рдпрд╣ рдкрдВрдХреНрддрд┐ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рд╣рдореЗрдВ
App
рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рд▓реЗрдирд╛ рд╣реИ (рд╣рдо рдмрд╣реБрдд рдЬрд▓реНрдж рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ) рдФрд░ рдЗрд╕реЗ
root
div
, рдЬрд┐рд╕реЗ
index.html
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рдЬрд╛рдВрдЪрд╛ рдерд╛ред
рдЕрдм рд╣рдо
<App />
рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред рдпрд╣ HTML рдХреЛрдб рд╕реЗ рдмрд╣реБрдд рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ JSX рдХреЛрдб рдХрд╛ рдПрдХ рдирдореВрдирд╛ рд╣реИ, рдЬреЛ рд░рд┐рдПрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдПрдХ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░
A
рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓
<App />
, рди рдХрд┐
<app />
ред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдЕрднрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдЗрдХрд╛рдИ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдирд┐рдпрдорд┐рдд HTML рдЯреИрдЧ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдШрдЯрдХ рдирд╛рдо рдкреВрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреГрд╖реНрда рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧреАред
рдпрджрд┐ рдЖрдк рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд
.js
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╣рд╛рдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
import React from 'react';
App.js рдлрд╝рд╛рдЗрд▓
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдШрдЯрдХ рдХреЗ рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
src/App.js
рдЦреЛрд▓реЗрдВред
App.js рдлрд╝рд╛рдЗрд▓рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐
React.Component
рд╡рдВрд╢рдЬ рд╣реЛред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ
class App extends Component
рд▓рд╛рдЗрди рд╕реЙрд▓реНрд╡ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдореЗрдВ
render
рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдШрдЯрдХ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдкреГрд╖реНрда рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП HTML рдорд╛рд░реНрдХрдЕрдк рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
className
рд╡рд┐рд╢реЗрд╖рддрд╛ HTML рдореЗрдВ
class
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рд╕реАрдПрд╕рдПрд╕ рд╡рд░реНрдЧреЛрдВ рдХреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреАрд╡рд░реНрдб
class
рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдЗрдП рджреЛрд╣рд░рд╛рдПрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ:
- рдЙрдирдХреЗ рдирд╛рдо рдПрдХ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ (
App
рдореЗрдВ A
) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред - рд╡реЗ
React.Component
рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред - рдЙрдиреНрд╣реЗрдВ рдПрдХ
render
рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдорд╛рд░реНрдХрдЕрдк рд▓реМрдЯрд╛рддреА рд╣реИред
рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреНрдпрд╛ рдмрдЪреЗрдВред
NotRecommendation No. 1: рд╣рд░ рдЬрдЧрд╣ рдШрдЯрдХ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ
рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдШрдЯрдХ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдШрдЯрдХ рдХрдХреНрд╖рд╛рдУрдВ (рдХреНрд▓рд╛рд╕ рдХрдВрдкреЛрдиреЗрдВрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ (рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд░рд┐рдПрдХреНрдЯ рд╢реБрд░реБрдЖрддреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВред
рд╡рд░реНрдЧ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпреЗ рдШрдЯрдХ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдЦрд░рд╛рдм-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдкреГрдердХреНрдХрд░рдг, рддрд░реНрдХ рдФрд░ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдзреАрди рд╣реИрдВ (рдФрд░ рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИ)ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдШрдЯрдХ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдЖрд▓рдВрдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдмреЛрд▓рддрд╛ рд╣реИ, "рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░рддрд╛ рд╣реИред" рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдиреМрд╕рд┐рдЦрд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдореИрдВ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдХрд┐ рд╡реЗ рдШрдЯрдХ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ? рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рд╣реИред рдпрджрд┐ рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рдШрдЯрдХ рдореЗрдВ
render
рд╡рд┐рдзрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдореЗрдВ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде, рдЖрдЗрдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдХрд┐
App
create-react-app
рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП
App
рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рдХреИрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдП:
function App() { return ( <div className="App"> ... </div> ); } export default App;
рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛? рдЕрд░реНрдерд╛рддреН, рд╣рдордиреЗ рдХреНрд▓рд╛рд╕ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдлреЙрд░реНрдо
function App() {...}
рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде
render
рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рдпрджрд┐ рд╣рдо рдпрд╣рд╛рдВ ES6 рдПрд░реЛ рдлрдВрдХреНрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдФрд░ рднреА рдмреЗрд╣рддрд░ рджрд┐рдЦреЗрдЧрд╛:
const App = () => ( <div className="App"> ... </div> ); export default App;
рд╣рдордиреЗ рдХрдХреНрд╖рд╛ рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬреЛ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдорд╛рд░реНрдХрдЕрдк рджреЗрддрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ рд╢реБрджреНрдз рдорд╛рд░реНрдХрдЕрдк рд╣реИред рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ?
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХрд╛ рдХреЛрдб рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдЖрдкрдХреЛ рдорд╛рдирдХ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рд╕реЗ рдмрд╣реБрдд рдХрдо рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдЕрднреА рдХрд╣рд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдШрдЯрдХ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИрдВ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдШрдЯрдХ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдХреЛрдб рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ рдХрдо рд╕рд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рдореБрдЦ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЦрд╛рддреЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рджреГрдврд╝рддрд╛ рд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП -
рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
ред рдЧреБрдгреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛
рдЧреБрдг (рдкреНрд░реЙрдкреНрд╕) рд░рд┐рдПрдХреНрдЯ рдХреА рдХреЗрдВрджреНрд░реАрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред "рдЧреБрдг" рдХреНрдпрд╛ рд╣реИрдВ? рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЧреБрдг рд╡реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬреЛ рдШрдЯрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
const Greetings = (props) => <div>Hey you! {props.firstName} {props.lastName}!</div>; const App = () => ( <div> <Greetings firstName="John" lastName="Smith" /> </div> );
рдпрд╣рд╛рдВ рд╣рдордиреЗ
Greetings
рдШрдЯрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
App
рдШрдЯрдХ рд╕реЗ
John Smith
рдирд╛рдордХ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдмрдзрд╛рдИ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ред рдпрд╣ рд╕рдм рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд HTML рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛:
<div> <div>Hey you! John Smith!</div> </div>
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
{props.name}
рдЬреИрд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Greetings
рдШрдЯрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдкрд╣рд▓рд╛
firstName
рдФрд░ рдЕрдВрддрд┐рдо
firstName
рдЧреБрдгред рд╣рдо рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ,
props
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реИрдВред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рдПрдХрд▓
props
рдСрдмреНрдЬреЗрдХреНрдЯ
props
, рдкрд╣рд▓реЗ
firstName
рдФрд░ рдЕрдВрддрд┐рдо
firstName
рдЧреБрдгреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдорд╛рди рдирд╣реАрдВред
ES6 рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреБрдирд░реНрдЧрдарди рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░ рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
const Greetings = ({ firstName, lastName }) => <div>Hey you! {firstName} {lastName}!</div>;
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдирд┐рд░реНрдорд╛рдг
(props)
({ firstName, lastName })
рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓
props
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рджреЛ рдЧреБрдгреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рдмрджрд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
props.firstName
рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛
props.firstName
рдФрд░
lastName
рдХреЗ рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд░реНрдЧ-рдЖрдзрд╛рд░рд┐рдд рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
Greetings
рдШрдЯрдХ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
class Greetings extends React.Component { render() { return ( <div>Hey you! {this.props.firstName} {this.props.lastName}!</div> ); } }
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдЖрдкрдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╕рдВрд╡реЗрджрдирд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд╕рд╣рд╛рдпрдХ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдЕрддрд┐рднрд╛рд░рд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
this.props
тЦН рдПрдХрдорд╛рддреНрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдВрдд
рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдВрдд (рдПрд╕рдЖрд░рдкреА) рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╡рд╣ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдЧреБрдгрд╡рддреНрддрд╛ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЕрдХреЗрд▓реЗ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдПрдХ рдмреБрд░реЗ рд╕рдкрдиреЗ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХрдорд╛рддреНрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЕрдзрд┐рдХрддрд░ рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рддрдВрддреНрд░ рдПрдХ рд╣реА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╣рдо рдЕрдХреНрд╕рд░ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВрдЧреЗред
рд╢реБрд░реБрдЖрддреА рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдИ рдШрдЯрдХ рд░рдЦрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
Greetings
рдФрд░
App
рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд╕рдЖрд░рдкреА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрд╣реБрдд рдЫреЛрдЯреЗ рдШрдЯрдХреЛрдВ (рдЬреИрд╕реЗ рд╣рдорд╛рд░реЗ
Greetings
рдШрдЯрдХ) рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
Greetings
рдШрдЯрдХ рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рд░рдЦреЗрдВ:
import React from "react"; const Greetings = ({ firstName, lastName }) => ( <div> Hey you! {firstName} {lastName}! </div> ); export default Greetings;
рдлрд┐рд░ рдЗрд╕ рдШрдЯрдХ рдХрд╛
App
рдШрдЯрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
import Greetings from "./Greetings"; const App = () => ( ... );
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдШрдЯрдХ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣реИ,
App
рдШрдЯрдХ рдХреЗ рдХреЛрдб рдХреЛ
App.js
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП,
Greetings
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
Greetings
рдШрдЯрдХ рдХрд╛ рдХреЛрдб, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
The рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд░рд╛рдЬреНрдп рдПрдХ рдФрд░ рдХреЗрдВрджреНрд░реАрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рдХреНрдпрд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рдкрддреНрд░ рдлрд╝реАрд▓реНрдб рдореЗрдВ рджрд░реНрдЬ рдХреБрдЫ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд░рд╛рдЬреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЧреЗрдо рдореЗрдВ рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЕрдВрдХреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдлрд╝реЙрд░реНрдо рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдирд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдШрдЯрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдкреНрд░рд╢реНрди рдореЗрдВ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рдШрдЯрдХ рдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
import React from "react"; class SimpleForm extends React.Component { render() { return ( <div> <input type="text" name="firstName" /> <Greetings firstName="John" /> </div> ); } } const App = () => ( <div> <SimpleForm /> </div> );
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдкрддреНрд░ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреБрдЫ рджрд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдзреНрдпрд╛рди рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
John
рд╣рдореЗрд╢рд╛ рд╕реНрд╡рд╛рдЧрдд рдкреГрд╖реНрда рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рдЦреБрдж рдХреЛ рдмрд╣реБрдд рдЖрд░рд╛рдорджрд╛рдпрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред
рдлрд╝реАрд▓реНрдб рдореЗрдВ рджрд░реНрдЬ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реАрдзреЗ DOM рддрддреНрд╡реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреЗрдЯ рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред
class SimpleForm extends React.Component { state = { firstName: "", }; onFirstNameChange = event => this.setState({ firstName: event.target.value }); render() { return ( <div> <input type="text" name="firstName" onChange={this.onFirstNameChange} /> <Greetings firstName={this.state.firstName} /> </div> ); } }
рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ,
SimpleForm
рдШрдЯрдХ рдХреЗ рд╡рд░реНрдЧ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ, рд╣рдо
firstName
рдЧреБрдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рд╣рдордиреЗ рдПрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде
firstName
рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реБрд╕рдЬреНрдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╣рд░ рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд░реНрдг рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕ рдореЗрдВ,
onChange
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
onChange
рдкреНрд░реЙрдкрд░реНрдЯреА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ:
this.setState(...)
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИред рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реАрдзреЗ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓
setState
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
firstName
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдПрдХ рдирдпрд╛ рдорд╛рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕реЗ рд░рд╛рдЬреНрдп рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
{ firstName: event.target.value }
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
event.target.value
рд╡рд╣ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдкреНрд░рдкрддреНрд░ рдлрд╝реАрд▓реНрдб рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдЙрд╕рдХрд╛ рдирд╛рдоред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ
onFirstNameChange
рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рди рдХрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВред рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
this
рдлреЙрд░реНрдо рддрддреНрд╡ рд╕реЗ рдмрд╛рдзреНрдп рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрдЧ рдХреЛ рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЫреЛрдЯреА рд╕реА рдмрд╛рдд рдЕрдХреНрд╕рд░ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╣реЛрддреА рд╣реИред рдпрд╣ рдШрдЯрдХ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИред
тЦНрдЪрд░реНрдЪрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдкрддреНрд░ рдкрд░ рджрд░реНрдЬ рдХреА рдЧрдИ
рд╣рдо рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреЙрд░реНрдо рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдкреНрд░рдгрд╛рд▓реА рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рддрдп рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдирд╛рдо рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рддреАрди рдЕрдХреНрд╖рд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдШрдЯрдХ рдкрд░
onBlur
рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕реЗ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЖрд╡реЗрджрди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ -
firstNameError
ред рдпрджрд┐ рдирд╛рдо рджрд░реНрдЬ рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ, рддреЛ рд╣рдо рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рддрд╣рдд рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред
class SimpleForm extends React.Component { state = { firstName: "", firstNameError: "", }; validateName = name => { const regex = /[A-Za-z]{3,}/; return !regex.test(name) ? "The name must contain at least three letters. Numbers and special characters are not allowed." : ""; }; onFirstNameBlur = () => { const { firstName } = this.state; const firstNameError = this.validateName( firstName ); return this.setState({ firstNameError }); }; onFirstNameChange = event => this.setState({ firstName: event.target.value }); render() { const { firstNameError, firstName } = this.state; return ( <div> <div> <label> First name: <input type="text" name="firstName" onChange={this.onFirstNameChange} onBlur={this.onFirstNameBlur} /> {firstNameError && <div>{firstNameError}</div>} </label> </div> <Greetings firstName={firstName} /> </div> ); } }
рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐
рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛, рд╣рдо, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рд░рд╛рдЬреНрдп рдореЗрдВ рдПрдХ рдирдИ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
firstNameError
:
state = { ... firstNameError: "", };
рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рд╕рдорд╛рд░реЛрд╣
рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рд╕рддреНрдпрд╛рдкрди рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рджрд░реНрдЬ рдирд╛рдо рдХреЛ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ:
validateName = name => { const regex = /[A-Za-z]{3,}/; return !regex.test(name) ? "The name must contain at least three letters..." : ""; }
рдпрджрд┐ рдЪреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдирд╛рдо рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред рдпрд╣рд╛рдБ, рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо ternary рдСрдкрд░реЗрдЯрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
OnBlur рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░
onBlur
рдИрд╡реЗрдВрдЯ
onBlur
рдкрд░
onBlur
рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬрд┐рд╕реЗ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдЫреЛрдбрд╝рддрд╛ рд╣реИ:
onFirstNameBlur = () => { const { firstName } = this.state; const firstNameError = this.validateName( firstName ); return this.setState({ firstNameError }); };
рдпрд╣рд╛рдВ рд╣рдо рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рд╡рд┐рдирд╛рд╢ рдХрд░рдиреЗ рдХреА ES6 рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реБрдП, рд░рд╛рдЬреНрдп рд╕реЗ
firstName
рд╕рдВрдкрддреНрддрд┐ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рдЗрд╕ рдХреЛрдб рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
const firstName = this.state.firstName;
рдлрд┐рд░ рд╣рдо рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдкрд╣рд▓реЗ
firstName
, рдФрд░ рд░рд╛рдЬреНрдп рдХреА рд╕рдВрдкрддреНрддрд┐ рдкрд░ рд▓рд┐рдЦреЗрдВ рдкрд╣рд▓реЗ
firstName
рд▓рд┐рдЦреЗрдВ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЪреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рд╡рд╣рд╛рдВ рд▓рд┐рдЦреА рдЬрд╛рдПрдЧреАред
рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐
рдШрдЯрдХ
render()
рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
render() { const { firstNameError, firstName} = this.state; ... }
.
<input ... onBlur={this.onFirstNameBlur} />
onFirstNameBlur
onBlur
.
{firstNameError && <div>{firstNameError}</div>}
JavaScript.
div
, , ,
firstNameError
true
.
тЦН
, , , . , :
render() { const { firstNameError, firstName } = this.state; return ( <div style={{ margin: 50, padding: 10, width: 300, border: "1px solid black", backgroundColor: "black", color: "white" }} > <div style={{marginBottom: 10}}> <label> First name: <input style={{backgroundColor: '#EFEFFF', marginLeft: 10}} type="text" name="firstName" onChange={this.onFirstNameChange} onBlur={this.onFirstNameBlur} /> {firstNameError && <div style={{color: 'red', margin: 5}}>{firstNameError}</div>} </label> </div> <Greetings firstName={firstName} /> </div> ); }
React
style
.
, , , , , . , .
тЦН тДЦ2:
, , React-. , , тАФ
render
, , . ? , . , , .
? , .
style
, . . ,
style.js
:
// style.js: const style = { form: { margin: 50, padding: 10, width: 300, border: "1px solid black", backgroundColor: "black", color: "white" }, inputGroup: { marginBottom: 10 }, input: { backgroundColor: "#EFEFFF", marginLeft: 10 }, error: { color: "red", margin: 5 } }; export default style;
, ,
SimpleComponent
:
import style from './style'; class SimpleForm extends React.Component { ... render() { const { firstNameError, firstName } = this.state; return ( <div style={style.form}> <div style={style.inputGroup}> <label> First name: <input style={style.input} type="text" name="firstName" onChange={this.onFirstNameChange} onBlur={this.onFirstNameBlur} /> {firstNameError && ( <div style={style.error}>{firstNameError}</div> )} </label> </div> <Greetings firstName={firstName} /> </div> ); } } export default SimpleForm;
, . .
тЦН
, :
class SimpleForm extends React.Component { state = { ... lastName: "", lastNameError: "" }; validateName = ...; onFirstNameBlur = ...; onFirstNameChange = ...; onLastNameBlur = () => { const { lastName } = this.state; const lastNameError = this.validateName(lastName); return this.setState({ lastNameError }); }; onLastNameChange = event => this.setState({ lastName: event.target.value }); render() { const { firstNameError, firstName, lastName, lastNameError } = this.state; return ( <div style={style.form}> <div style={style.inputGroup}> <label> First name: <input style={style.input} type="text" name="firstName" onChange={this.onFirstNameChange} onBlur={this.onFirstNameBlur} /> {firstNameError && <div style={style.error}>{firstNameError}</div>} </label> </div> <div style={style.inputGroup}> <label> Last name: <input style={style.input} type="text" name="lastName" onChange={this.onLastNameChange} onBlur={this.onLastNameBlur} /> {lastNameError && <div style={style.error}>{lastNameError}</div>} </label> </div> <Greetings firstName={firstName} lastName={lastName} /> </div> ); } } export default SimpleForm;
тАФ ,
firstName
.
┬л┬╗? тАФ , .
тЦН тДЦ3:
, , , , , . , ,
render
. .
, , , .
TextField
, .
import React from 'react' import style from "./style"; const TextField = ({name, onChange, onBlur, error, label}) => ( <div style={style.inputGroup}> <label> {label} <input style={style.input} type="text" name={name} onChange={onChange} onBlur={onBlur} /> {error && <div style={style.error}>{error}</div>} </label> </div> ); export default TextField;
, ,
render
. , , .
SimpleForm
:
... import TextField from './TextField'; class SimpleForm extends React.Component { ... render() { const { firstNameError, firstName, lastName, lastNameError } = this.state; return ( <div style={style.form}> <TextField name="firstName" label="First name:" onChange={this.onFirstNameChange} onBlur={this.onFirstNameBlur} error={firstNameError} /> <TextField name="lastName" label="Last name:" onChange={this.onLastNameChange} onBlur={this.onLastNameBlur} error={lastNameError} /> <Greetings firstName={firstName} lastName={lastName} /> </div> ); } }
, . ,
TextField
.
FirstNameField
:
import React from 'react'; import TextField from './TextField'; const FirstNameField = ({...rest}) => ( <TextField name="firstName" label="First name:" {...rest} /> ); export default FirstNameField;
, .
({...rest})
( rest, ). , , ,
rest
. , ,
TextField
, ┬л ┬╗, spread (,
{...rest}
, ).
rest
, ,
TextField
.
, : ,
FirstNameField
TextField
.
LastNameField
:
:
... import FirstNameField from './FirstNameField'; import LastNameField from './LastNameField'; class SimpleForm extends React.Component { ... render() { const { firstNameError, firstName, lastName, lastNameError } = this.state; return ( <div style={style.form}> <FirstNameField onChange={this.onFirstNameChange} onBlur={this.onFirstNameBlur} error={firstNameError} /> <LastNameField onChange={this.onLastNameChange} onBlur={this.onLastNameBlur} error={lastNameError} /> <Greetings firstName={firstName} lastName={lastName} /> </div> ); } }
.
тЦН
, , , :
- , , , .
- . , , , , 1000 ( ).
- , . , , .
- , , , . . , , . , , , .
- , , , , .
this
, .
рдкрд░рд┐рдгрд╛рдо
, React- . , , , , . , , , React, , , , UI-.
тЖТ , ,
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! , , React-, .
