рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ ReactJSред рднрд╛рдЧ 1

рд╢реБрдн рджреЛрдкрд╣рд░, рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВред



рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрджреНрднреБрдд рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ React.js рдХрд╛ Habr├й рдкрд░ рддреЗрдЬреА рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдЕрдм рдЙрд╕рдХреЗ рд╕рд╛рде 4 рдорд╣реАрдиреЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рдХрд┐ рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рд╕рдмрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреВрд░реНрдг рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╣реИрдмреЗ рдкрд░ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдХрд╛рд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдмрд╣реБрдд рдХрдареЛрд░рддрд╛ рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВред рдореЗрд░рд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдФрд░ рдкреНрд░рдерд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рд╣реИ, рджреНрд╡рд┐рддреАрдпрдХ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреИрд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬреЛ рдЙрдирдХреЗ рдХрд╛рдо рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реБрдПред рдФрд░ рд╣рд╛рдВ, рд░реВрдкрд░реЗрдЦрд╛ рд╕рдореБрджрд╛рдп рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдЫреЛрдЯреЗ рд╕рд╛рд░-рдкрд╛рд▓рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдереАред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВред



* рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдУ'рд░рд┐рд▓реА рдкрдмреНрд▓рд┐рд╢рд┐рдВрдЧ рд╣рд╛рдЙрд╕ рдХреА рдХрд┐рддрд╛рдмреЛрдВ рдХреА рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╢реНрд░реГрдВрдЦрд▓рд╛, рдмрд╣реБрдд рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЕрд░реНрде рд╣реИ: рдЖрдЧреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдмреЛрд▓реЗрдВ (рд▓реЗрдЦрдХ рдХрд╛)



рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреГрд╖реНрда рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рдиреНрдпреВрдирддрдо рдЧрддрд┐рд╢реАрд▓рддрд╛ рд╣реЛрдЧреАред рдмреБрдирд┐рдпрд╛рджреА рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЪрд╛рд▓ рдФрд░ рдХреБрдЫ рдЫреЛрдЯреА рдЪрд╛рд▓ред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдкреВрд░реЗ рдХреЛрдб рдХреЛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд╡рд┐рд╡рд░рдг рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдЫреЛрдЯреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрд░реА рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА: https://github.com/Aetet/react-article

рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдПрдХ рд╕рдВрдЧрдд рдЯреИрдЧ рд╣реЛрддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд░рдг рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред



рд╕рд╛рд░рд╛рдВрд╢



рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреНрдпрд╛ рдЦрд╛рддрд╛ рд╣реИ?



рд░рд┐рдПрдХреНрдЯ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдлреЗрд╕рдмреБрдХ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рд╡реНрдпреВ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рд╣рд╛рдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдереЛрдбрд╝рд╛ рдЖрддреНрдорд╛-рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдиреЗ рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд░рд┐рдПрдХреНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рджреГрд╢реНрдп-рдЙрдиреНрдореБрдЦ рдПрдорд╡реАрд╕реА рд░реВрдкрд░реЗрдЦрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рддрдХ, рдореИрдВ рддреАрдиреЛрдВ рддрддреНрд╡реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реВрдБрдЧрд╛ред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд░рд┐рдПрдХреНрдЯ рдПрдХреНрд╕рдПрдордПрд▓-рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдорд╛рдг рд╕рдорд╛рди рд╣реИрдВ:
<div>Hello {this.props.name}</div>
      
      





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



 React.DOM.div(null, "Hello ", this.props.name);
      
      





рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ:





рдореБрдЦреНрдп рд╢рдмреНрдж:



рд╣реЗрд▓реНрдкрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рд░реВрдкрд╛рдВрддрд░рдг рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рддрд┐рдерд┐ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкрд╛рда рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЖрджрд┐ред

рдкреНрд░рдмрдВрдзрдХ - рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рд╕рд╣реЗрдЬрдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд╛рди рд╣реЛрддрд╛ рд╣реИред

рдкреНрд░реЙрдкреНрд╕ - рд╡рд╣ рдбреЗрдЯрд╛ рдЬреЛ рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рдЬреЗрдЯ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд░рд╛рдЬреНрдп - рд╡рд┐рдЬреЗрдЯ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЦреБрд▓рд╛, рд╕рдХреНрд░рд┐рдп, рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рдЖрджрд┐)

рдШрдЯрдХ - рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред



рдврд╛рдВрдЪреЗ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:



  1. рдШреЛрд╖рдгрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг
  2. рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдШрдЯрдХред
  3. рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░рдирд╛
  4. рдореВрд▓ рдбреЛрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
  5. рдпреВрдирд┐рдХреНрд╕-рд╡реЗ рдХреЗ рдмрд╛рджред
  6. рдШрдЯрдХреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред


рдЕрднреНрдпрд╛рд╕



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



рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди



рд╣рдо рдЙрд╕ рдкрд░ рдХреНрдпрд╛ рд░рдЦреЗрдВрдЧреЗ? рд╡реНрдпрд╡рд╕рд╛рдп рдмреБрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдЖрдЗрдП рдЗрд╕реЗ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ:

  1. рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдирд╛рдо, рдЙрдкрдирд╛рдо, рд▓рд┐рдВрдЧ рдХрд╛ рд╕рдВрдХреЗрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд░реВрдк рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рд╕реНрдерд╛рди рдЖрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред
  2. рдмрдЯрди рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред


рдХрд╛рд░реНрдп рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рдЖрдк рдмреБрдирд┐рдпрд╛рджреА рдорд╛рдорд▓реЛрдВ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЯреВрд▓ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдФрд░ github https://github.com/Aetet/react-article рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рдХрд░рдиреЗ рдХрд╛ рд╕рдордп



рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЧрд▓реНрдк, рд╡реЗрдмрдкреИрдХ, рд╕реНрдЯрд╛рдЗрд▓рд╕, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдкрд░ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдиреНрдпреВрдирддрдо рддреИрдпрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. npm рд╕реНрдерд╛рдкрд┐рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдХрдореАред
  2. рджреМрдбрд╝рдирд╛ред


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



рд╕рдВрдЧрдарди рд╕рдВрд░рдЪрдирд╛ред



рдЕрд░рд╛рдЬрдХрддрд╛ рд╣рдореЗрд╢рд╛ рдЖрджреЗрд╢ рдЬреАрддрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╕рдВрдЧрдард┐рдд рд╣реИред

рдЯреЗрд░реА рдкреНрд░рдЪреЗрдд


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐: рдЯреИрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ ред

рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐: рдкрд╣рд▓рд╛-рд╕реНрдереИрддрд┐рдХ рдЯреИрдЧред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдереИрддрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рддреЗ рд╣реИрдВ:

рд╣рдо рдЖрдзрд╛рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

 /** @jsx React.DOM */ var React = require('react'); var Index = React.createClass({ render: function () { return ( <div> <div>Booking</div> </div> ); } }); React.renderComponent( <Index /> , document.querySelector('.appl'));
      
      







рдПрдХ рдирдпрд╛ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рдХрдИ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:

  1. рд╣рдо React.createClass рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реВрдЪрдХрд╛рдВрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВред
  2. рдПрдХ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реЛред
  3. рд╣рдо рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░реЙрдкреНрд╕ рдбреЗрдЯрд╛ рдФрд░ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдкрд╛рд╕ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рддрддреНрд╡ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдЗрдВрдбреЗрдХреНрд╕ рдорд┐рд▓рд╛ред



рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдФрд░ рдиреАрдЪреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореВрд▓ рддрддреНрд╡ рдШрдЯрдХ рдмреБрдХрд┐рдВрдЧ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреГрд╖реНрда рдкрд░ рджреЛ рдореБрдЦреНрдп рдмреНрд▓реЙрдХ рд╣реИрдВ:

  1. рдпрд╛рддреНрд░реА рд╕реВрдЪрдирд╛ред
  2. рдмрдЯрди рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ


рдЗрд╕рд▓рд┐рдП, рд╣рдо Components'y рдкреИрд╕реЗрдВрдЬрд░рдЗрдиреНрдлреЛ рдФрд░ рд╕рдмрдорд┐рдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рдЕрдВрджрд░ рд╣рдо рд╕рд┐рд░реНрдл рд╕реНрдереИрддрд┐рдХ HTML рдбрд╛рд▓рддреЗ рд╣реИрдВред

 /** * @jsx React.DOM */ var React = require('react'); var PassengerInfo = React.createClass({ render: function () { return ( <div> <span > <label></label> <input type="text" name="firstName" /> </span> <span > <label></label> <input type="text" name="lastName" /> </span> <div className="controls"> <span className="btn-group"> <span className="btn">M</span> <span className="btn">F</span> </span> </div> </div> ); } }); module.exports = PassengerInfo;
      
      







рд░рд╛рдЬреНрдп рдХрд╛ рдирд┐рд░реНрдорд╛рдгред



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

рд╕реНрдЯреАрдлрди рдлреНрд░рд╛рдИ



рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛: рдкрд╣рд▓реА-рд╕реНрдереИрддрд┐рдХ

рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐: initialState-propTypes



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

рдмреБрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП getInitialState рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред

 getInitialState: function () { return { firstName: '', lastName: '', gender: '' }; }
      
      







рдмреБрдХрд┐рдВрдЧ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдкрд╣рд▓реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ, рдпрд╣ рдлрдВрдХреНрд╢рди рд▓реМрдЯрд╛ рд╣реБрдЖ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рднрд░рддрд╛ рд╣реИред рд╣рдо рд╕реНрдЯреЗрдЯ рд╕реЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рдкреИрд╕реЗрдВрдЬрд░рдЗрдиреНрдлреЛ рдореЗрдВ рд╡реИрд▓реНрдпреВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

 <PassengerInfo firstName={this.state.firstName} lastName={this.state.lastName} gender={this.state.gender} />
      
      





рдкрд╣рд▓реЗ рдирд╛рдо, рдЕрдВрддрд┐рдо рдирд╛рдо, рд▓рд┐рдВрдЧ рдЕрдм рдкреИрд╕реЗрдВрдЬрд░рдЗрдиреНрдлреЛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рд░рд╛ рд╣реИред

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рд╣реА рдкреНрд░реЙрдкрд░ рдкреНрд░рдХрд╛рд░ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ, рд╕рддреНрдпрд╛рдкрди рдЬреЛрдбрд╝реЗрдВ:

 propTypes: { firstName: React.PropTypes.string, lastName: React.PropTypes.string, gender: React.PropTypes.string }
      
      





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

рдЪреЗрддрд╛рд╡рдиреА: рдЕрдорд╛рдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡ `firstName` рдкреНрд░рдХрд╛рд░ рдХрд╛ 'рдСрдмреНрдЬреЗрдХреНрдЯ'` рдпрд╛рддреНрд░реАрдЗрдиреНрдлреЛ`, рдЕрдкреЗрдХреНрд╖рд┐рдд `рд╕реНрдЯреНрд░рд┐рдВрдЧ` рдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХреАред



The description of рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ getInitialState рдпрд╣рд╛рдБ:

facebook.github.io/react/docs/component-specs.html#getinitialstate

propTypes:

facebook.github.io/react/docs/component-specs.html#proptypes



рд╕реНрдерд┐рддрд┐ рдмрджрд▓реЗрдВред



рдЕрдЧрд░ рдореЗрд░реА рдмреЗрдЯреА рдореБрдЭреЗ "рдмреЗрд╡рдХреВрдл" рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рд▓реНрд▓рд╛ рджреЗрдЧреА, рддреЛ рдореИрдВ рдЗрд╕реЗ рд▓рдЧрд╛рдКрдВрдЧрд╛ред



рд╣реНрдпреВрдЧ рд▓реЙрд░реА


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐: initialState-propTypes рдЯреИрдЧ

рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐: рд╣реИрдВрдбрд▓ рдЯреИрдЧ



рд╢рд╛рдпрдж рдпрд╣ рдереЛрдбрд╝рд╛ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕реЗ рдХреИрд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред



рдЗрдирдкреБрдЯ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдСрдирдЪреЗрдВрдЬ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ:

 var PassengerInfo = React.createClass({ handleChange: function (e) { var target = e.target, name = target.name, value = target.value; this.props.onChange(name, value); }, render: function () { return ( ... <input onChange={this.handleChange} type="text" name="firstName" value={this.props.firstName} /> ... ); } });
      
      







рд░рд┐рдПрдХреНрдЯ рдореЗрдВ, рдпрд╣ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдСрдирдЪреЗрдВрдЬ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА



рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рддрд░реНрдХ (e)



рдПрдХ SynteticReactEvent рд╣реИ, рди рдХрд┐ рдПрдХ Dventvent, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЙрдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреБрдЫ рдЖрд░рдХреНрд╖рдг рдХреЗ рд╕рд╛рдеред



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



 var Booking = React.createClass({ handleChange: function (name, value) { var state = {}; state[name] = value; this.setState(s tate); }, render: function () { return ( <div> <PassengerInfo firstName={this.state.firstName} lastName={this.state.lastName} gender={this.state.gender} onChange={this.handleChange}/> <Submit /> </div> ); } });
      
      







рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╢реАрд░реНрд╖ рдмреБрдХрд┐рдВрдЧ рд╡рд┐рдЬреЗрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рд╣рдореЗрд╢рд╛ рдЕрджреНрдпрддрд┐рдд рд╣реЛрддреА рд╣реИред рдФрд░ рд░рд╛рдЬреНрдп рдмрд╛рд▓ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред



рдЖрдк рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рддрддреНрд╡ рдпрд╣рд╛рдВ рд╣реИрдВ:

facebook.github.io/react/docs/events.html

facebook.github.io/react/docs/dom-differences.html



рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

facebook.github.io/react/docs/working-with-the-browser.html#browser-support-and-polyfills





рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╡рд┐рдЧреЗрдЯреНрд╕ред



рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдкрд┐рд▓реНрд▓рд╛ рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдХреНрдпрд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рджрд┐рдЦрд╛рд╡рд╛ рднреА рд╣реИред

рдЗрд╕рд╛рдХ рдЕрд╕рд┐рдореЛрд╡


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐: рд╣реИрдВрдбрд▓ рдЯреИрдЧред

рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐: рд▓рд┐рдВрдЧ-рд╕реНрд╡рд┐рдЪрд░ рдЯреИрдЧред



рдирд┐рдЬреА рддреМрд░ рдкрд░, рдореБрдЭреЗ рдЕрдВрджрд░ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдмрд╛рддрдЪреАрдд рдХреЗ рд╕рд╛рде рдЫреЛрдЯреЗ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИрдВред рдкреИрд╕реЗрдВрдЬрд░рдЗрдиреНрдлреЛ рдореЗрдВ, рдореЗрд░реЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓реЗрдЖрдЙрдЯ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЕрд▓рдЧ GenderSwitcher рдореЗрдВ рд▓рд┐рдВрдЧ рдЪрдпрди рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░реВрдБрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдКрдБрдЧрд╛ред рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╡рд┐рдЧреЗрдЯреНрд╕ рдЖрдорддреМрд░ рдкрд░ рдЖрдо / рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред



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



 var GenderSwitcher = React.createClass({ propTypes: { gender: React.PropTypes.string }, handleClick: function (e) { var target = e.target, type = target.dataset.type; this.props.handleGender(type); }, render: function () { return ( <span className="btn-group"> <span data-type="m" className="btn" onClick={this.handleClick} ></span> <span data-type="f" className="btn" onClick={this.handleClick} ></span> </span> ); } });
      
      







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



рдзреНрдпрд╛рди !!! рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

github.com/facebook/react/issues/1259



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



 var PassengerInfo = React.createClass({ ... handleGender: function (type) { this.props.onChange('gender', type); }, ... });
      
      







рдЕрдм, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЬрдм рд▓рд┐рдВрдЧ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, Booking.ssx рдХреЗ рд╢реАрд░реНрд╖ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рд▓рдЧрд╛рдПрдВред рд╣рдо рдкреГрд╖реНрда рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдПрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓рд┐рдВрдЧ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред



рд╕рдордп рдирд┐рдпрдВрддреНрд░рд┐рдд-рдШрдЯрдХ'рд╡ред



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

рдбреЙрдХреНрдЯрд░ рдЬреЛ


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐: рдЬреЗрдВрдбрд░рд╕реНрд╡рд┐рдЪ рдЯреИрдЧ

рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐: рдирд┐рдпрдВрддреНрд░рд┐рдд ред



рдЗрдирдкреБрдЯ рдкреНрд░рджрд░реНрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВред



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдирдкреБрдЯ рдореЗрдВ рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдореВрд▓реНрдп рд▓рд┐рдЦреЗрдВрдЧреЗред

 <input onChange={this.handleChange} type="text" name="firstName" value={this.props.firstName} />
      
      







рдзреНрдпрд╛рди рджреЗрдВ !!! рдЕрдЧрд░ рд╣рдо рдмрд╕ рдХрд░рддреЗ рд╣реИрдВ

 <input type="text" name="firstName" value="Vasya" />
      
      



, рддреЛ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред



рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдЕрдзрд┐рдХ:

facebook.github.io/react/tips/controlled-input-null-value.html



рдореИрдВ рд╕рднреА рдЗрдирдкреБрдЯ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдкрд░ рдЖрдкрдХрд╛ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рд╣реЛред рдпрд╣ рддрддреНрд╡ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЖрддреА рд╣реИрдВред



рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБред



рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╡реЗ рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдЖрдкрдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

рдХреНрд▓рд░реНрдХреЛрдВ


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐: рдирд┐рдпрдВрддреНрд░рд┐рдд рдЯреИрдЧ

рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐: рд╡реНрдпреВрдкрд░ рдЯреИрдЧ



рдЬреЗрдВрдбрд░рд╕реНрд╡рд┐рдЪ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдХреЛрдИ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рд╣реИред рдЦреИрд░, рдЗрд╕реЗ рдЬреЛрдбрд╝реЗрдВред



рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдПрдХ GenderSwitcher рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ рдЗрд╕ .props.gender рдореЗрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ: рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ .props.gender рдЖ рдЧрдпрд╛ рд╣реИ, рд╣рдо рд╕рдХреНрд░рд┐рдп рддрддреНрд╡ рд╡рд░реНрдЧ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдпрд╛ рд╣рдЯрд╛рдПрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдореИрдВ рдЕрднреА рднреА рдпреВрдирд┐рдХреНрд╕-рд╡реЗ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдмрд╛рд╣рд░реА рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░реВрдВрдЧрд╛ред



рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдЧрд╛:

 var GenderViewHelper = { generateMaleClass: function (gender, defaultClasses) { var className = defaultClasses.join(' '), activeClass = (gender === 'm') ? ' btn-primary' : ''; return className + activeClass; } };
      
      







рдЗрд╕реА рддрд░рд╣, рд╣рдо рдорд╣рд┐рд▓рд╛ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред



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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдФрд░ рдЪрд╛рд▓ рд╣реИ:

facebook.github.io/react/docs/class-name-manipulation.html



рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:

 render: function () { var maleClass = GenderViewHelper.generateMaleClass(this.props.gender, ['btn']); var femaleClass = GenderViewHelper.generateFemaleClass(this.props.gender, ['btn']); return ( <span className="btn-group"> <span data-type="m" className={maleClass} onClick={this.handleClick} ></span> <span data-type="f" className={femaleClass} onClick={this.handleClick} ></span> </span> ); }
      
      







рд╕рд░реНрд╡рд░ рдбрд╛рдЯрд╛ рд╕реНрдкрд┐рд░рд┐рдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛



- рдореИрдВ рд░рд╕рд╛рддрд▓ рд╕реЗ рдЖрддреНрдорд╛рдУрдВ рдХреЛ рдмреБрд▓рд╡рд╛ рд╕рдХрддрд╛ рд╣реВрдБ!

"рдФрд░ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ, рдФрд░ рд╣рд░ рдХреЛрдИ рдХрд░ рд╕рдХрддрд╛ рд╣реИред"

рдПрдХрдорд╛рддреНрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рдХреЙрд▓ рдкрд░ рдЖрдПрдВрдЧреЗред

рд╢реЗрдХреНрд╕рдкрд┐рдпрд░ред рд╣реЗрдирд░реА IVред


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐: viewHelper рдЯреИрдЧ

рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐: рд╕реЗрд╡-рд╕рд░реНрд╡рд░ рдЯреИрдЧ



рд▓реЗрдЦ рдлрд┐рдирд┐рд╢ рд▓рд╛рдЗрди рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдореЗрдХрд┐рдд рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрдЯрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ:

 var Submit = React.createClass({ handleClick: function () { this.props.onSubmit(); }, render: function () { return ( <div className="form-actions"> <button className="btn btn-primary" onClick={this.handleClick}>Submit</button> </div> ); } });
      
      







рдФрд░ рд╣рдо рдЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд░реВрдЯ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗред

 var Booking = React.createClass({ ... handleSubmit: function () { var dataForServer = clone(this.state); BookingManager.saveData(dataForServer) .then(function (successMsg) { alert(successMsg); }) .fail(function (err) { console.log('err when save', err); }); }, render: function () { return ( ... <Submit onSubmit={this.handleSubmit}/> ... ); } });
      
      







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

рд▓реЗрдХрд┐рди рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рдмрдЪрд╛рддрд╛ рд╣реИ?



 var Vow = require('vow'); var BookingManager = { saveData: function (data) { var dfd = Vow.defer(); setTimeout(function () { dfd.resolve('Hello, Habra!' + JSON.stringify(data)); }, 1000); return dfd.promise(); } }; module.exports = BookingManager;
      
      







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



рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдШрдЯрдХ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реИ:

  1. рд░реЗрдВрдбрд░ рджреГрд╢реНрдп
  2. рджреГрд╢реНрдп рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВ
  3. рд╣реИрдВрдбрд▓рд░реНрд╕ рд░реВрдЯ рд╡рд┐рдЬреЗрдЯ - рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
  4. рд╣рдо рд╕реНрдЯреЗрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдбрд╛рдЯрд╛ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВред
  5. рд░рд╛рдЬреНрдп рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
  6. рджреГрд╢реНрдп рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред
  7. рдФрд░ рд╕реНрдерд┐рддрд┐ рдПрдХ рдирдП рдШреЗрд░реЗ рдореЗрдВ рдЪрд▓реА рдЧрдИред




рдПрдХ рдЖрдлреНрдЯрд░рд╡рд░реНрдб рдХреЗ рдмрдЬрд╛рдпред



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



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



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

рдЗрд╕рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдореЗрд░реА рдпреЛрдЬрдирд╛ рд╣реИ:

  1. рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧред
  2. рдПрдХ рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рд░реВрдк рдореЗрдВ рдЬрдЯрд┐рд▓ рдЧрддрд┐рд╢реАрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рд╕реНрдХреЗрд▓рд┐рдВрдЧред
  3. рдкреНрд░рдмрдВрдзрдХ рдХреЗ рджреВрд╕рд░реЗ рдЖрдиреЗ рдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИред
  4. рдиреБрдХрд╕рд╛рди рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред
  5. рдХреИрд╕реЗ рдЪрд╛рд▓рд╛рдХ jQuery рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред
  6. UPD: рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдШрдЯрдХ
  7. рд░реВрдЯрд┐рдВрдЧ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЧрдарди
  8. рдлреНрд▓рдХреНрд╕


рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреВрд▓реНрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:

  1. React.JS рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( https://github.com/facebook/react )
  2. рдЧреБрд▓рдк рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА ( https://github.com/gulpjs/gulp )
  3. рд╡реЗрдмрдкреИрдХ рдореЙрдбреНрдпреВрд▓рд░ рдкреНрд░рдгрд╛рд▓реА ( https://github.com/webpack/webpack )
  4. рдХрдиреЗрдХреНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ ( https://github.com/senchalabs/connect )
  5. рд╡рд╛рджреЗ рдФрд░ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп ( https://github.com/dfilatov/vow )


рдкреБрдирд╢реНрдЪ


рдореИрдВ рдпрд╣ рд▓реЗрдЦ рдЕрдкрдиреА рдорд╛рдБ, рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд╢рд┐рдХреНрд╖рдХ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдБред



All Articles