2 рджрд┐рдиреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред рджрд┐рди рд╕рдВрдЦреНрдпрд╛ 1

рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЛ рд╢реБрджреНрдз CSS рдФрд░ JS рд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ рддреЛ рд╕рд╛рдЗрдЯ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреАред рдпрд╣ рдЖрд▓реЗрдЦ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рд╕реБрдВрджрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рдЕрдиреБрдХреВрд▓рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рдЬрд╛рддрд╛ рд╣реИред

рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо HTML, CSS, JavaScript, XML, DOM, OOP рдХреЛ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ (рдХрдорд╛рдВрдб рд▓рд╛рдЗрди) рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдХрд╣рд╛рдВ рд╕реЗ рд▓рд╛рдПрдВ?
HTML рдФрд░ CSS рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ htmlbook.ru рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ learn.javascript.ru рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
XML рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ msiter.ru/tutorials/uchebnik-xml-dlya-nachinayushchih рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
рдЖрдк DOM рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ JavaScript рдкрд╛рда learn.javascript.ru/dom-nodes рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
OOP рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡реАрдбрд┐рдпреЛ рдХреЛрд░реНрд╕ proglib.io/p/oop-videocourse рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ
рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП, рдореИрдВ cmd.readthedocs.io/cmd.html рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
рдПрдХ рдореИрдХ рдкрд░ рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ ixrevo.me/mac-os-x-terminal рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
рдпрджрд┐ рдЖрдк рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмреИрд╢ рдФрд░ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдореЗрдВ, рдЖрджрдореА рдпрд╛ рдорджрдж рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧреАред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ learn-reactjs.ru рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ: reactjs.org )ред
рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ bootstrap-4.ru рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреЛ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдкреНрд░рд▓реЗрдЦрди: getbootstrap.com рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ)ред
рджреЛрд╕реНрддреЛрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд▓реЗрдЦ рдорд┐рд▓рд╛ webformyself.com/kak-ispolzovat-bootstrap-s-react

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдХрд╛ рдирд┐рдЪреЛрдбрд╝ рдмрдирд╛рдКрдВрдЧрд╛ рдФрд░ рдРрд╕рд╛ рдЯрд╛рдЗрдорд░ рдмрдирд╛рдКрдВрдЧрд╛:



рд╕реНрдерд╛рдкрдирд╛


рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ npm рдХреЛ рдЪреБрдирд╛, рдФрд░ рдпрд╣ Node.js рдореЗрдВ рд╣реИ
рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдЕрдкрдиреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ Node.js рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ: nodejs.org/en/download ред рдЖрдк рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдмрдВрдЯреВ рдХреЗ рдиреАрдЪреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИ:

sudo apt update sudo apt install nodejs sudo apt install npm 

рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдо рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ Node.js рдФрд░ npm рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ:

 nodejs -v npm -v 

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

Create-react-app рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдирд╛ рд╕рдХреЗрдВ:

 npm install -g create-react-app 

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

 create-react-app new-app cd new-app npm start 

рд╣рдо рдирдпрд╛ рдРрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВред рдирдП рдРрдк рдХреЗ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВред рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ http: // localhost: 3000 рдХреЗ рдкрддреЗ рдкрд░ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП



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

рдЕрдм рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

 npm install bootstrap 

рдпрд╣ рднреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЙрд╕ рдкрд░ jquery рдФрд░ popper.js рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдПрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк JS рднрд╛рдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВрдиреЗ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХреЛрд╢рд┐рд╢ рдХреА - рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд╛ рд╕реАрдПрд╕рдПрд╕ рд╣рд┐рд╕реНрд╕рд╛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ:

 npm install jquery popper.js 

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП, рдирдП-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВ, рдЬрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рдд рд╣реИ, src / index.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ, рдпрд╣ рдкрд╣рд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 import 'bootstrap/dist/css/bootstrap.min.css'; 

рдпрджрд┐ рдЖрдк jQuery, popper.js рдпрд╛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдЬреЗрдПрд╕ рднрд╛рдЧ (рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ, рдПрдирд┐рдореЗрд╢рди, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рддрд╣рдд 3 рдФрд░ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

 import $ from 'jquery'; import Popper from 'popper.js'; import 'bootstrap/dist/js/bootstrap.bundle.min'; 

рдЕрдм рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЪрд▓рд╛рдирд╛ рдмрд╛рдХреА рд╣реИ:

 npm start 

рдФрд░ рдлрд┐рд░, рдмреНрд░рд╛рдЙрдЬрд╝рд░ http: // localhost рдкрд░ рдЦреБрд▓рддрд╛ рд╣реИ : 3000 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде:


рд░рд┐рдПрдХреНрдЯ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди " рд░рд┐рдПрдХреНрдЯрд░ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓реНрд╕ " рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд▓рд┐рдВрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА github.com/facebook/react-devtools рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ
рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯрдЕрдк рдЕрдм рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред

JSX, рдШрдЯрдХ рдФрд░ рдЧреБрдг


рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХреНрд░рд┐рдПрдХреНрдЯ-рд░рд┐рдПрдХреНрд╢рди-рдРрдк рдЬреЗрдирд░реЗрдЯ рд╣реБрдЖ рд╣реИ - рд╕реЛрд░реНрд╕ рдлрд╛рдЗрд▓реНрд╕ src рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо index.js рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ - рдХрдИ рдЖрдпрд╛рдд рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдпрд╣ рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдЬреЛ рд╡реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреАред

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрдВрдХреНрддрд┐:

 ReactDOM.render(<App />, document.getElementById('root')); 

рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЗрдЬ рдХреЛ рдбреНрд░реЙ рдХрд░рддрд╛ рд╣реИред рд╕реНрд░реЛрдд HTML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ <div> рддрддреНрд╡ рд╣реИред рдпрд╣ <div> App рдШрдЯрдХ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ ReactDOM рд╡рд░реНрдЧ рдХреЗ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдШрдЯрдХ XML рдХреЗ рд╕рдорд╛рди рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ JSX (рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм App.js рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ App рд╡рд░реНрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдерд┐рдд рд╣реИ, рдЬреЛ React.Component рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ ред

 class App extends React.Component {     <b>render()</b>,     JSX: <div className="App"> <header className="App-header"> <img src={logo} className="App-logo" alt="logo" /> <p> Edit <code>src/App.js</code> and save to reload. </p> <a className="App-link" href="https://reactjs.org" target="_blank" rel="noopener noreferrer" > Learn React </a> </header> </div> 

JSX HTML рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕ {} рдореЗрдВ JS рдХреЛрдб рдЖрд╡реЗрд╖рдг рд╣реИрдВред рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдореВрд▓ рддрддреНрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, <div>ред

рдмреЗрд╣рддрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░реЗрдВрдбрд░ () рд╡рд┐рдзрд┐ рдХреЗ рд╕рднреА рдХреЛрдб рдорд┐рдЯрд╛ рджреЗрдВрдЧреЗ рдФрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдШрдЯрдХ рд▓рд┐рдЦреЗрдВрдЧреЗ:

 class App extends React.Component { render() { return <h1>, {this.props.name}!</h1>; } } 

рдЕрдм, рд╣рдо index.js рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред

 ReactDOM.render(<App name="" />, document.getElementById('root')); 

рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдкреГрд╖реНрда рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рддрд╛рдЬрд╝рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЕрдм рд╣рдо рд╕рдордЭреЗрдВрдЧреЗред

рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдШрдЯрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рд╡реЗ рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ рд▓реЗрддреЗ рд╣реИрдВ (рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░реЙрдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рд░рд┐рдПрдХреНрдЯ рддрддреНрд╡ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдШрдЯрдХ рдЖрдкрдХреЛ рдпреВрдЖрдИ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░, рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдЬрдм рд░рд┐рдПрдХреНрдЯ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рддрддреНрд╡ рдПрдХ рдХрд╕реНрдЯрдо рдШрдЯрдХ рд╣реИ, рддреЛ рдпрд╣ рдЙрд╕ рдШрдЯрдХ рдХреЗ рд╕рднреА рдЬреЗрдПрд╕рдПрдХреНрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдРрд╕реА рд╡рд╕реНрддреБ рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ <App> рдЯреИрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде " рд╡рд░реНрд▓реНрдб " рдорд╛рдиред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рд╕ рдХреЗ рд░реЗрдВрдбрд░ () рд╡рд┐рдзрд┐ рдореЗрдВ, JSX рдХреЗ рдЕрдВрджрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ, рдШреБрдВрдШрд░рд╛рд▓реЗ рдХреЛрд╖реНрдардХ {} рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ - рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ, рдкреНрд░реЙрдкрд░ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ, рдирд╛рдо - рдСрдмреНрдЬреЗрдХреНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд╛рдоред

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рд▓рд╛рдЗрдл рд╕рд╛рдЗрдХрд▓ рдФрд░ рд╕реНрдЯреЗрдЯ рдЪреЗрдВрдЬ


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

рдЪрд▓реЛ рдПрдХ рдЯрд╛рдЗрдорд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдЯрд╛рдЗрдорд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдЗрдП index.js рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ:

 ReactDOM.render(<App/>, document.getElementById('root')); 

рдФрд░ рдЕрдм App.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдмреАрдЪ рдХреЗ рд╕рднреА рдкрд╛рдареЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 const INTERVAL = 100; class App extends Component { constructor(props) { super(props); this.state = {value: 0}; } increment(){ this.setState({value: this.state.value + 1}); } componentDidMount() { this.timerID = setInterval(() => this.increment(), 1000/INTERVAL); } componentWillUnmount() { clearInterval(this.timerID); } render() { const value = this.state.value return ( <div> <p>:</p> <p> <span>{Math.floor(value/INTERVAL/60/60)} : </span> <span>{Math.floor(value/INTERVAL/60) % 60} : </span> <span>{Math.floor(value/INTERVAL) % 60} . </span> <span>{value % INTERVAL}</span> </p> </div> ); } } 

рдЗрд╕ рдХреЛрдб рдХреЛ рдбрд╛рд▓рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдкреГрд╖реНрда рдкрд░ рдПрдХ рдЯрд╛рдЗрдорд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред рдХрдХреНрд╖рд╛ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдЯрд╛рдЗрдорд░ рдХреА рддрд╛рдЬрд╝рд╛ рджрд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛, рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд┐рд░реНрдорд╛рддрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░реЙрдкрд░ рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореВрд▓ рд╢реНрд░реЗрдгреА рд╕реБрдкрд░ (рдкреНрд░реЙрдкреНрд╕) рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдорд╛рдирдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рд╣реИред рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рд╕реАрдзреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ, рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдпрд╛ рд░рд╛рдЬреНрдп рдХреЛ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯрд╕реНрдЯреЗрдЯ () рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЧрд▓реЗ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ () рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдореВрд▓реНрдп рд╕реНрдерд┐рддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрдИ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЬрдм рд╡реЗ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдШрдЯрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЬрдм рднреА рдкрд╣рд▓реА рдмрд╛рд░ DOM рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдЯрд╛рдЗрдорд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЗрд╕реЗ "рдорд╛рдЙрдВрдЯ / рдЗрдВрд╕реНрдЯреЙрд▓" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдЗрд╕ рдЯрд╛рдЗрдорд░ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ DOM рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЗрд╕реЗ "рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ / рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП, MethodDidMount () рдФрд░ ComponentsWillUnmount () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ, рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ " рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ " рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рддрд░реАрдХреЗ рдХрд╣реЗрдВрдЧреЗред DOM рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рдХрдВрдкреНрд▓реАрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрдВрдкреЛрдиреЗрдВрдЯрдорд╛рдЙрдВрдЯ () рдореЗрдердб рдлрд╛рдпрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЯрд╛рдЗрдорд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИред рд╣рдо рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдШрдЯрдХWillUnmount () рдкрджреНрдзрддрд┐ рдореЗрдВ рдЯрд╛рдЗрдорд░ рдХреЛ рд╕рд╛рдл рдХрд░ рджреЗрдВрдЧреЗред

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

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

рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рд╕рд╛рде рдЙрдкрд╕реНрдерд┐рддрд┐


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

рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ App.css рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 .container-fluid { display: flex; flex-direction: column; } 

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

рдЕрдм рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдмрдЯрдиреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП App.js рдореЗрдВ рд░реЗрдВрдбрд░ () рд╡рд┐рдзрд┐ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рдирд┐рдореНрди рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:

 <div class="container-fluid align-items-center"> <h1 class="display-1"></h1> <h1 class="display-1"> <span><kbd>{Math.floor(value/INTERVAL/60/60)}</kbd> : </span> <span><kbd>{Math.floor(value/INTERVAL/60) % 60}</kbd> : </span> <span><kbd>{Math.floor(value/INTERVAL) % 60}</kbd> . </span> <span><kbd>{value % INTERVAL < 10 ? '0' : ''}{value % INTERVAL}</kbd></span> </h1> <div> <button class="display-4"></button> <button class="display-4"></button> </div> </div> 

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, 2 рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд░реВрдЯ <div> рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛: рдХрдВрдЯреЗрдирд░-рджреНрд░рд╡ (рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛) рдФрд░ рд╕рдВрд░реЗрдЦрд┐рдд-рдЖрдЗрдЯрдо-рдХреЗрдВрджреНрд░ - рдЬреЛ рд╕рд┐рд░реНрдл рдХреЗрдВрджреНрд░ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рдкреНрд░рджрд░реНрд╢рди -1 рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рджреЛ <div> - рдпрд╣ рд╡рд░реНрдЧ рдХреЗрд╡рд▓ рдмрдбрд╝реЗ рдкрд╛рда рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдирдпрд╛ <kbd> рдЯреИрдЧ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ - рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдЙрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рджрдмрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред

рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрдВрддрд┐рдо рдЕрдВрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рджрд┐рдЦрд╛рддреЗ рд╣реБрдП, рд╢реБрд░реБрдЖрдд рдХреЗ 0 рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХрд▓-рдЕрдВрдХ рдЕрдВрдХреЛрдВ (<10) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рджреЛ-рдЕрдВрдХреАрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╕рдВрдЦреНрдпрд╛ рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ рдЪрд┐рдХреЛрдЯреА рди рд▓реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд░реНрдирд░реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╕реНрдерд┐рддрд┐? рд╕рдЪ: рдЭреВрда

рдлрд┐рд░ рдПрдХ рдЕрд▓рдЧ <div> рдореЗрдВ рдореИрдВрдиреЗ рдбрд┐рд╕реНрдкреНрд▓реЗ -4 рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде 2 рдмрдЯрди рд▓рдЧрд╛рдП - рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдЖрдХрд╛рд░ рдореЗрдВ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдмрдЯрди рдЯрд╛рдЗрдорд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛред рдореИрдВрдиреЗ рдмрдЯрди рдХреЗ рдмреАрдЪ рдПрдХ рдЪрд░рд┐рддреНрд░ рдбрд╛рд▓рд╛   - рдЕрднреЗрджреНрдп рд╕реНрдерд╛рди рддрд╛рдХрд┐ рдмрдЯрди рд╡рд┐рд▓рдп рди рдХрд░реЗрдВред

рдЖрдк рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрдЯрди рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЪрд▓реЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред

рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмрдЯрди рдХреЛ рдмрдЯрди рдЖрдЙрдЯрдкреБрдЯ рдХреЛрдб рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 <button class="display-4" onClick={this.stopTimer}></button> <button class="display-4" onClick={this.resetTimer}></button> 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдСрдирдХреНрд▓рд┐рдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ , рдСрдирдХреНрд▓рд┐рдХ рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реИ, рдФрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЛрд╖реНрдардХ рдХреЗ рдмрд┐рдирд╛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВред

рдЕрдм рд╣рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ stopTimer () рдФрд░ resetTimer () рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 stopTimer(){ clearInterval(this.timerID); } resetTimer(){ this.setState({value: 0}); } 

рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрдм рд╕рдорд╛рд░реЛрд╣ рдмреБрд▓рд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрд╛рдзреНрдп рдирд╣реАрдВ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ () рдХреЗ рдмрд╛рдж рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, onClick = {this.resetTimer} , рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

2 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрд╛рдВрдзреЗрдВ:

 this.stopTimer = this.stopTimer.bind(this); this.resetTimer = this.resetTimer.bind(this); 

рдорд╣рд╛рди, рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛! рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕реНрдЯреЙрдк рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ 1 рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдмрдЯрди рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреЙрдкрдЯрд╛рдЗрдорд░ () рдХреЙрд▓ рдХрд░рдХреЗ рд╣рдордиреЗ рдХреНрд▓реАрдпрд░рдЗрдВрдЯрд░рд╡рд▓ () рдХреЙрд▓ рдХрд░рдХреЗ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдиреЗ рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рдХреЛрд╢рд┐рд╢ рдХреА рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ 2 рд▓рд╛рдЗрдиреЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
 stopTimer = () => { this.timerID = setInterval(() => this.increment(), 1000/INTERVAL); } resetTimer = () => { this.setState({value: 0}); } 

рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо "рд╕реНрдЯреЙрдк" рдмрдЯрди "рд░рди" рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

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

 this.state = {value: 0, stopped: false}; 

рдЕрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ stopTimer () рд╡рд┐рдзрд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 this.setState({stopped: !this.state.stopped}); if(this.state.stopped){ clearInterval(this.timerID); } else { this.timerID = setInterval(() => this.increment(), 1000/INTERVAL); }; 

рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕реЗрдЯрд╕реНрдЯреИрдЯ () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реБрдХреА рд╣реБрдИ рдЕрд╡рд╕реНрдерд╛ рдХреЛ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдмрджрд▓реЗрдВ ред

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

рдЖрдкрдХреЛ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ () рдкрджреНрдзрддрд┐ рдХреЛ рднреА рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд░реБрдХреЗ рд╣реБрдП = рд╕рд╣реА рд╣реЛрдиреЗ рдкрд░ рд░реБрдХреЗ :
 increment(){ if(!this.state.stopped) (this.setState({value: this.state.value + 1})); } 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рд░реБрдХреЗ рд╣реБрдП рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдЯрди рдХрд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВ, "рд╕реНрдЯреЙрдк" рдХреЗ рдмрдЬрд╛рдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 {this.state.stopped?'':''} 

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реБрдВрджрд░, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯрд╛рдЗрдорд░ рд╣реИред

рдХреЗрдХ рдкрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╛ рдЪреЗрд░реА рдХреЗ рдмрдЬрд╛рдп


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╛рдирдХ рд╢реАрд░реНрд╖рдХ рдФрд░ рд╡рд┐рдВрдбреЛ рдЖрдЗрдХрди рдмрджрд▓рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЯрд╛рдЗрдЯрд▓ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП document.title рдХреЛ рдХрдВрдкреЛрдиреЗрдВрдЯрдбреАрдбрдорд╛рдЙрдВрдЯ () рдореЗрдердб рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ , рд▓реЗрдХрд┐рди рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ рдФрд░ рдкреЗрдЬ рдЯрд╛рдЗрдЯрд▓ рдбрд┐рд╕рдкреНрд▓реЗ рдХрд╛ рд╕рдордп рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдмрдирд╛рдпреЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

 componentDidUpdate(){ const value = this.state.value; if (this.state.stopped) document.title = ""; else document.title = ": "+Math.floor(value/INTERVAL/60/60)+":" +Math.floor(value/INTERVAL/60) % 60+":"+Math.floor(value/INTERVAL) % 60; } 

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

рдЖрдЗрдХрди рд╕рд░рд▓ рд╣реИред рдпрд╣ jpg , bmp , gif , png рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдЪрд┐рддреНрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбреНрд░реЙрдк рдХрд░реЗрдВ (рдФрд░ src рдирд╣реАрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ), рдирд╛рдо, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, favicon.png рдФрд░ рдлрд╝рд╛рдЗрд▓ public \ index.html рдореЗрдВ рд▓рд╛рдЗрди рдмрджрд▓реЗрдВ:

 <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico"> 

рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐:

 <link rel="shortcut icon" type="image/png" href="/favicon.png"/> 

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

рдЕрдВрдд рдореЗрдВ, рдмрд┐рдЯрдмрдХреЗрдЯ рдореЗрдВ рднрдВрдбрд╛рд░, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛрдб рд╣реИрдВ

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


All Articles