{"id":320564,"date":"2021-03-30T21:00:35","date_gmt":"2021-03-30T21:00:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=320564"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=320564","title":{"rendered":"YAHW \u043d\u0430 React"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0414\u0430, \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0445\u0435\u043b\u043b\u043e-\u0432\u043e\u0440\u043b\u0434 \u043d\u0430 React, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u043d\u0430 \u0441\u0435\u0442\u0438. \u0417\u0430\u0447\u0435\u043c  \u0435\u0449\u0435 \u043e\u0434\u0438\u043d?      \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u0430\u043a, \u043a\u0430\u043a  \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u0435 \u0448\u0430\u0433\u0438 \u043d\u0430 React,  \u0442.\u0435. \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0437\u043d\u0430\u0442\u044c  \u0441\u043d\u0430\u0447\u0430\u043b\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0449\u0438\u0435 \u0434\u0430\u0434\u0443\u0442 \u0441\u0432\u043e\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p> \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0445\u0435\u043b\u043b\u043e\u0432\u043e\u0440\u043b\u0434\u043e\u0432. \u0412\u0441\u0435 (\u043f\u043e\u0447\u0442\u0438) \u0441\u0434\u0435\u043b\u0430\u044e\u0442 \u0437\u0430 \u043d\u0430\u0441.  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439.<\/p>\n<pre><code>node --version  v10.24.0  npm --version 6.14.11 npx --version 10.2.2<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<\/p>\n<pre><code>npx create-react-app hw-app<\/code><\/pre>\n<p>\u0433\u0434\u0435 <code>hw-app<\/code> (helloworld-application) &#8212; \u0438\u043c\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043f\u0430\u043f\u043a\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>hw-app<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0432\u0441\u0435  \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <code>React<\/code> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443  \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0432\u043d\u0443\u0442\u0440\u044c (cd hw-app) \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.   <\/p>\n<p><code>npm start<\/code><\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 <\/p>\n<pre><code>You can now view hw-app in the browser.  http:\/\/localhost:3000  Note that the development build is not optimized. To create a production build, use npm run build.<\/code><\/pre>\n<p>\u043d\u043e \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0434\u0438\u0432\u043e\u0441\u0442\u044c. \u041d\u0430\u0446\u0435\u043b\u0438\u043c \u0441\u0432\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u0443\u0432\u0438\u0434\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/262\/a7e\/abf\/262a7eabf6db0e5da3bae52ba4bb58d4.png\" width=\"372\" height=\"300\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e \u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u043c) \u043d\u0430\u0436\u043c\u0435\u043c <code>Ctr-C<\/code>. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f-\u043f\u0440\u043e\u0435\u043a\u0442\u0430. <\/p>\n<pre><code>ls README.md  node_modules  package-lock.json  package.json  public  src<\/code><\/pre>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043d\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0438 <code>public<\/code> \u0438 <code>src<\/code>.<\/p>\n<pre><code>ls public favicon.ico  index.html  logo192.png  logo512.png  manifest.json  robots.txt  ls src App.css  App.js  App.test.js  index.css  index.js  logo.svg  reportWebVitals.js  setupTests.js&lt;\/pre&gt;&lt;\/code&gt;  <\/code><\/pre>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 public \u043b\u0435\u0436\u0438\u0442 <code>index.html<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f dev-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 <code>index.html<\/code> \u0435\u0441\u0442\u044c <code>div<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441 <code>id='root'<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 React &#171;\u043e\u0442\u0440\u0438\u0441\u0443\u0435\u0442&#187; \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 <code>src\/index.js<\/code><\/p>\n<p><code>ReactDOM.render(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp; &lt;React.StrictMode&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp;&nbsp; &lt;App&nbsp;\/&gt;<br \/>   &nbsp;&nbsp; &lt;\/React.StrictMode&gt;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp; document.getElementById('root')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>&nbsp; );<\/code><\/p>\n<p>\u0438 \u043e\u0442\u0440\u0438\u0441\u0443\u0435\u0442 \u043e\u043d \u0442\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>App<\/code>. \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043b\u0438\u0436\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0444\u0430\u0439\u043b\u044b <code>index.html<\/code> \u0438 <code>App.js<\/code>. \u041f\u0443\u0441\u0442\u044c \u0431\u0440\u0430\u0443\u0437e\u0440 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u044b\u043b\u043e<\/p>\n<p><code>&lt;title&gt;React&nbsp;App&lt;\/title&gt;<\/code><\/p>\n<p>\u0441\u0442\u0430\u043b\u043e<\/p>\n<p><code>&lt;title&gt;My&nbsp;First&nbsp;React&nbsp;App&lt;\/title&gt;<\/code><\/p>\n<p>\u0410 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 App \u043f\u0443\u0441\u0442\u044c \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <code>App.js<\/code>) \u0431\u044b\u043b\u043e:<\/p>\n<p>import&nbsp;logo&nbsp;from&nbsp;&#8216;.\/logo.svg&#8217;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/><code>   &nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;'.\/App.css';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;App()&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;className=\"App\"&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;header&nbsp;className=\"App-header\"&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img&nbsp;src={logo}&nbsp;className=\"App-logo\"&nbsp;alt=\"logo\"&nbsp;\/&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edit&nbsp;&lt;code&gt;src\/App.js&lt;\/code&gt;&nbsp;and&nbsp;save&nbsp;to&nbsp;reload.<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className=\"App-link\"<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href=\"https:\/\/reactjs.org\"<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target=\"_blank\"<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rel=\"noopener&nbsp;noreferrer\"<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Learn&nbsp;React<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/a&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/header&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;);} <\/code><\/p>\n<p>\u0441\u0442\u0430\u043b\u043e:<\/p>\n<p><code>function&nbsp;App()&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Hello&nbsp;React!&lt;\/h1&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;);<br \/>   &nbsp;&nbsp;}<br \/>   &nbsp;&nbsp;export&nbsp;default&nbsp;App;<\/code><\/p>\n<p>\u0442\u0430\u043a\u0436\u0435 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 src \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0444\u0430\u0439\u043b\u044b. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u0438\u043c<\/p>\n<pre><code>ls src\/ App.js index.js<\/code><\/pre>\n<p>\u041f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u0430\u043c\u0438 \u0438 \u0443\u0437\u043d\u0430\u0435\u043c \u0437\u0430\u0447\u0435\u043c \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c. \u0410 \u043f\u043e\u043a\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bf8\/882\/b2f\/bf8882b2fb84bcb6fa2ef76392452896.png\" width=\"592\" height=\"385\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 HelloWorld, \u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u044b \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435  \u0431\u0443\u0434\u0435\u043c \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u0447\u0442\u043e\u0431\u044b  \u043d\u0430\u0448 &#171;Hello&#187; \u043d\u0435 \u0443\u043b\u0435\u0442\u0435\u043b \u0432 \u043f\u0443\u0441\u0442\u043e\u0442\u0443. <\/p>\n<p>\u0412 React \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0438 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 &#8212; \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 JavaScript \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043a\u043e\u0434,  \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 <code>html<\/code>. \u041f\u043e\u0445\u043e\u0436\u0438\u0439, \u043d\u043e \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u0434\u0435\u043b\u0435 \u043a\u043e\u0434\u043e\u043c <code>JSX<\/code> \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e <code>html<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b <code>App.js<\/code> \u043f\u0443\u0441\u0442\u044c \u043e\u043d  \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e  \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b.<\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u0435\u043c \u0443\u0431\u0440\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 <code>src\/index.js<\/code>, \u043e\u043d \u043f\u0440\u0438\u043c\u0435\u0442 \u0432\u0438\u0434 <\/p>\n<p><code>import&nbsp;React&nbsp;from&nbsp;'react';<br \/>&nbsp;import&nbsp;ReactDOM&nbsp;from&nbsp;'react-dom';<br \/>&nbsp;import&nbsp;App&nbsp;from&nbsp;'.\/App';<br \/> &nbsp;<br \/>&nbsp;ReactDOM.render(<br \/>&nbsp; &lt;React.StrictMode&gt;<br \/> &nbsp;&nbsp;&nbsp; &lt;App&nbsp;\/&gt;<br \/> &nbsp;&nbsp;&nbsp; &lt;\/React.StrictMode&gt;,<br \/> &nbsp;&nbsp;&nbsp; document.getElementById('root')<br \/>&nbsp;);<\/code><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 &#8212; \u043f\u0440\u043e\u0441\u0442\u043e  \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438 &#171;\u043a\u043b\u0430\u0441\u0441\u043e\u0432\u044b\u043c\u0438&#187; &#8212; \u044d\u0442\u043e  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0439 JS \u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438  \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.  \u0421\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043e\u0434\u0438\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043e\u0434\u0438\u043d \u0432  \u0432\u0438\u0434\u0435 \u043a\u043b\u0430\u0441\u0441\u0430. \u041e\u0431\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0447\u0442\u043e-\u0442\u043e \u043e \u0441\u0435\u0431\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438  \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. <\/p>\n<p> \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <code>ClickCounter<\/code>, \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u043e \u043d\u0435\u043c\u0443 \u043a\u043b\u0438\u043a\u043d\u0443\u043b\u0438. \u0412\u0442\u043e\u0440\u043e\u0439 &#8212; <code>Machine<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0430\u0448\u0438\u043d\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c, \u043d\u0430\u0436\u0438\u043c\u0430\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443. <\/p>\n<h3>ClickCounter &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/h3>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f. \u042d\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <code>ClickCounter.js<\/code><\/p>\n<p><code>const&nbsp;clickCounter&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>&nbsp; const&nbsp;clickTimes&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp; return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp; &lt;div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;\u042f&nbsp;\u0441\u0447\u0435\u0442\u0447\u0438\u043a&nbsp;\u043a\u043b\u0438\u043a\u043e\u0432&lt;\/p&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;\u041a\u043b\u0438\u043a\u043d\u0443\u0442\u043e&nbsp;{clickTimes}&nbsp;\u0440\u0430\u0437&lt;\/p&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp;&nbsp; &lt;\/div&gt;<br \/>   &nbsp; );<br \/>&nbsp; }&nbsp;&nbsp;&nbsp;<br \/>   &nbsp; export&nbsp;default&nbsp;clickCounter;<\/code><\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f <code>App.js<\/code>.<\/p>\n<p><code>import&nbsp;ClickCounter&nbsp;from&nbsp;'.\/ClickCounter';<br \/>     &nbsp;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;App()&nbsp;{<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Hello&nbsp;React!&lt;\/h1&gt;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ClickCounter&nbsp;\/&gt;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;}<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;default&nbsp;App;<\/code><\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0448 <code>ClickCounter<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c  \u0435\u0433\u043e \u0432 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0433\u0430 &#171;Hello React!&#187;. \u0418 \u0434\u0430, \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442  \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u043a\u0430\u043a \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u0442\u044d\u0433. \u0422\u0443\u0442 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c  \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0431 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0432 \u0444\u0430\u0439\u043b\u0435 <code>ClickCounter.js<\/code> \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c <code>clickCounter<\/code>, \u0432 <code>App.js<\/code> \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c <code>ClickCounter<\/code>, \u0447\u0442\u043e \u0437\u0430 \u0434\u0435\u043b\u0430? \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044c <code>MySupperPupperClickCounter<\/code> \u0438\u0437 <code>'.\/ClickCounter'<\/code> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a<code> &lt;MySupperPupperClickCounter \/&gt; <\/code>, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u0432\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 clickCounter(), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443. (\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435) <\/p>\n<p> \u0418\u0442\u043e\u0433\u043e: \u043f\u043e\u0441\u043b\u0435 \u0441\u043b\u043e\u0432\u0430 <code>import<\/code> \u0441\u0442\u043e\u0438\u0442 \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b  \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 App.js) \u043f\u043e\u0441\u043b\u0435  \u0441\u043b\u043e\u0432\u0430 from \u0441\u0442\u043e\u0438\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c, \u043d\u043e \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <code>'.js'<\/code>. <\/p>\n<p> \u0427\u0442\u043e \u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e  \u0432 <code>\u0421lickCounter.js<\/code>? \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>clickCounter<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f <code>'='<\/code>  \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <code>'()'<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0442\u0435\u043b\u0435 <code>'{}'<\/code>, \u0442\u0430\u043c \u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>clickTimes<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435<\/p>\n<p>  <code>&lt;p&gt;\u041a\u043b\u0438\u043a\u043d\u0443\u0442\u043e&nbsp;{clickTimes}&nbsp;\u0440\u0430\u0437&lt;\/p&gt;<\/code><\/p>\n<p>\u0433\u0434\u0435 \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u043e \u0432 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438. \u041f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e <code>JSX<\/code> \u0438 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c <code>\"\u041a\u043b\u0438\u043a\u043d\u0443\u0442\u043e 0 \u0440\u0430\u0437\"<\/code> \u043a\u0430\u043a \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6d6\/824\/cbf\/6d6824cbf9f0a7c3f4484cc87927d03b.png\" width=\"592\" height=\"385\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u043a\u0430 \u0435\u0449\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0442.\u043a. \u043d\u0435\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u043a\u043b\u0438\u043a\u043e\u0432. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0435\u0433\u043e.  <a href=\"https:\/\/ru.reactjs.org\/docs\/hooks-state.html\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c<\/a> \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0445\u0443\u043a\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u042f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044e, \u043d\u043e \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u0440\u043e \u0441\u0442\u0440\u043e\u043a\u0443 <\/p>\n<pre><code>const [clickTimes, clickIncrement] = useState(0)<\/code><\/pre>\n<p><code>useState(0)<\/code> &#8212; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0435  \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f clickTimes \u0435\u0433\u043e \u0436\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u0430\u043a  \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<br \/><code>clickUpdater<\/code> &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c.<\/p>\n<p>\u042f \u0432\u044b\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>clickIncrementer()<\/code>, \u0447\u0442\u043e\u0431\u044b  \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u0430\u044f)  \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442\u0442\u0443\u0434\u0430.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u0430\u0439\u043b <code>ClickCounter.js<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c:<\/p>\n<p><code>import&nbsp;React,&nbsp;{&nbsp;useState&nbsp;}&nbsp;from&nbsp;'react';<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;ClickCounter&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;[clickTimes,&nbsp;clickUpdater]&nbsp;=&nbsp;useState(0);<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;clickIncrementer&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;clickTimes&nbsp;+&nbsp;1;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;onClick={&nbsp;()&nbsp;=&gt;&nbsp;clickUpdater(clickIncrementer)}&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u042f&nbsp;\u0441\u0447\u0435\u0442\u0447\u0438\u043a&nbsp;\u043a\u043b\u0438\u043a\u043e\u0432&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u041a\u043b\u0438\u043a\u043d\u0443\u0442\u043e&nbsp;{clickTimes}&nbsp;\u0440\u0430\u0437&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;default&nbsp;ClickCounter;<\/code><\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, ClickCounter \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0438\u0448\u0435\u043c \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0443\u043a\u0432\u044b &#8212; \u044d\u0442\u043e  \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043b\u0438\u043a\u0430\u044f \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0435\u0435  \u0447\u0438\u0441\u043b\u043e \u043a\u043b\u0438\u043a\u043e\u0432.<\/p>\n<h3>Machine &#8212; class<\/h3>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438 \u0434\u0430\u043b\u044c\u0448\u0435. \u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0441. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 <code>Machine<\/code> \u0438 \u043e\u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 <code>Machine.js<\/code>. \u041a\u043b\u0430\u0441\u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u0431\u044f\u0437\u0430\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>render()<\/code>,  \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430  \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u0412\u043e\u0442 \u043f\u043e\u043b\u043d\u044b\u0439  \u0442\u0435\u043a\u0441\u0442 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p><code>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;React&nbsp;from&nbsp;'react';<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Machine&nbsp;extends&nbsp;React.Component&nbsp;{<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;=&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;machineState:&nbsp;'STOPPED',<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;machineStarted:&nbsp;0<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;render&nbsp;()&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u042f&nbsp;\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441&nbsp;\u043c\u0430\u0448\u0438\u043d\u044b.&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435&nbsp;\u043c\u0430\u0448\u0438\u043d\u044b:&nbsp;{this.state.machineState}.&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br\/&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;onClick={this.clickButtonHandler}&gt;{this.state.buttonLabel}&lt;\/button&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u041c\u0430\u0448\u0438\u043d\u0443&nbsp;\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438&nbsp;{this.state.machineStartCount}&nbsp;\u0440\u0430\u0437.<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;default&nbsp;Machine;<\/code><\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, <code>render()<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a <code>JS<\/code> \u043a\u043e\u0434, \u0438 \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u043c\u043b\u0435\u043d \u043e\u0434\u043d\u0438\u043c <code>&lt;div&gt;(&lt;span&gt;<\/code> \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 <code>&lt;&gt;<\/code>), \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u043e \u0436\u0435. \u0412 \u0444\u0430\u0439\u043b <code>App.js<\/code> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 <\/p>\n<pre><code>import Machine from '.\/Machine';<\/code><\/pre>\n<p>\u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/p>\n<pre><code>&lt;Machine \/&gt;<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0444\u0430\u0439\u043b\u0430<\/p>\n<p><code>import&nbsp;ClickCounter&nbsp;from&nbsp;'.\/ClickCounter';<br \/>&nbsp;import&nbsp;Machine&nbsp;from&nbsp;'.\/Machine';<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;App()&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Hello&nbsp;React!&lt;\/h1&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ClickCounter&nbsp;\/&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Machine&nbsp;\/&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;default&nbsp;App;<\/code><\/p>\n<p>\u0427\u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435. \u041f\u043e\u043a\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e &#8212; \u043a\u0430\u0448\u0430. \u041d\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0441\u043a\u043e\u0440\u043e \u043c\u044b \u0435\u0435 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/23e\/6d9\/2bd\/23e6d92bd84f06b69b878b37d354501d.png\" width=\"592\" height=\"674\"><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u043f\u043e\u043a\u0430 \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <code>Machine.js<\/code>. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 <code>import React<\/code>. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0438\u0448\u0435\u043c <code>extends React.Component<\/code>. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438<code>import React, { Component } from 'react'<\/code> , \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u0442\u044c <code>extends Component<\/code>. <\/p>\n<p> \u0414\u0430\u043b\u0435\u0435, \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>state<\/code>. \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f (\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435), \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430. \u041e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043d\u0443\u0436\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f <code>this<\/code>. \u041f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 <code>state<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043c\u043d\u0435\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.  <\/p>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e  \u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043d\u0435 \u043c\u043d\u043e\u0433\u043e &#8212;  \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0432 \u043a\u0430\u043a\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0430\u0441\u044c  \u043c\u0430\u0448\u0438\u043d\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b -- STOPPED, \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e START. \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b -- STARTED, \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e STOP. \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u0439 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441 \u043d\u0430\u0434\u043f\u0438\u0441\u044c\u044e START.<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <code>state<\/code> \u043d\u0430\u0434\u043e \u0437\u043d\u0430\u0442\u044c, \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>setState()<\/code>,  \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441 \u043d\u043e\u0432\u044b\u043c\u0438  \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c  \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0434\u043f\u0438\u0441\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>clickButtonHandler<\/code>. <\/p>\n<p><code>clickButtonHandler&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(this.state.machineState)&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'STOPPED':<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;cnt&nbsp;=&nbsp;this.state.machineStartCount;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({machineState:&nbsp;'STARTED',&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buttonLabel:&nbsp;'STOP',<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;machineStartCount:&nbsp;cnt&nbsp;+&nbsp;1});<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'STARTED':<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({machineState:&nbsp;'STOPPED',&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buttonLabel:&nbsp;'START'});<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;}<\/code><\/p>\n<p>\u041a\u043e\u0434 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u043a\u0440\u043e\u043c\u0435 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u044e\u0430\u043d\u0441\u0430 (\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u0441\u0442\u0440\u044f\u043b). \u0420\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b <code>const cnt = this.state.machineStartCount<\/code>. \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e <code>machineStartCount: this.state.machineStartCount + 1<\/code>?  \u041d\u0435\u043b\u044c\u0437\u044f. \u041d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0434\u043b\u044f  \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041f\u0440\u043e\u0441\u0442\u043e. \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e  \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u0438, \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c  \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. <code>setState()<\/code> \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043e\u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0435 \u0442\u0440\u043e\u043d\u0443\u0442\u044b\u043c\u0438 \u0442\u0435, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u043c\u043e\u043b\u0447\u0430\u043b\u0438.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u043b\u0438\u043a\u0430 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438.<\/p>\n<p><code>&lt;button&nbsp;onClick={this.clickButtonHandler}&gt;{this.state.buttonLabel}&lt;\/button&gt;<\/code><\/p>\n<p>\u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0442\u0430\u043a \u0441\u0435\u0431\u0435.<\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0442\u0438\u043b\u044f<\/h3>\n<p>\u0413\u0440\u043e\u043c\u043a\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0438 \u043f\u043e\u043a\u0430\u0436\u0435\u043c \u0438\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u0412\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b <code>src\/App.css<\/code> \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 <code>src\/App.js<\/code> \u0441\u0442\u0440\u043e\u043a\u043e\u0439<\/p>\n<p><code>import&nbsp;'.\/App.css';<\/code><\/p>\n<p>\u0410 \u044d\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <code>App.css<\/code> :   <\/p>\n<pre><code>.Component {       margin: 20px;       border: 1px solid #eee;       box-shadow: 5px 5px 10px #ccc;       padding: 10px;     }<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0438\u043b\u044c \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u043d\u0430\u0434\u043e \u0432 \u0442\u044d\u0433\u0435 <code>div<\/code> \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>className<\/code> \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>&lt;div className='Component'&gt;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/061\/246\/839\/061246839530ab300572b127a40b95cc.gif\" width=\"592\" height=\"674\"><figcaption><\/figcaption><\/figure>\n<h3>&#171;\u041f\u0440\u043e\u043f\u0441\u044b&#187;<\/h3>\n<p>\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c &#8216;\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430&#8217; \u0438\u043b\u0438 &#8216;\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b&#8217;,  \u0432\u0435\u0434\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u041c\u043e\u0436\u0435\u0442  \u0431\u044b\u0442\u044c, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 React-\u0438\u0441\u0442\u043e\u0432(\u0435\u0440\u043e\u0432) \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f  \u043d\u043e\u0432\u044b\u0439 \u0441\u043b\u044d\u043d\u0433? \u0412 \u043e\u0431\u0449\u0435\u043c, \u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0443. <\/p>\n<p>\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 <code>state<\/code> &#8212; \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0438 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c <code>props<\/code>.<\/p>\n<p>\u042d\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443.  &#171;\u041f\u0440\u043e\u043f\u0441\u044b&#187; (\u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u0443\u0441\u0442\u043e\u044f\u0432\u0448\u0438\u0439\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d)  \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0441\u0440\u043e\u043a\u0430  \u0436\u0438\u0437\u043d\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441\u0430\u043c\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c, \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u044d\u0442\u043e &#171;\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b&#187;, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c. \u041f\u043ec\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0435\u0431\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0432\u0435 \u043c\u0430\u0448\u0438\u043d\u044b, \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <code>Machine<\/code>,  \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u0435\u043c-\u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441  \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>props<\/code>.  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432 <code>App<\/code>  \u0434\u0432\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 &#171;\u041f\u0435\u0440\u0432\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430&#187; \u0438 &#171;\u0412\u0442\u043e\u0440\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430&#187; \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/p>\n<p><code>&lt;Machine&nbsp;name='\u041f\u0435\u0440\u0432\u0430\u044f&nbsp;\u043c\u0430\u0448\u0438\u043d\u0430'&nbsp;\/&gt;<br \/>&nbsp;&lt;Machine&nbsp;name='\u0412\u0442\u043e\u0440\u0430\u044f&nbsp;\u043c\u0430\u0448\u0438\u043d\u0430'&nbsp;\/&gt;<\/code><\/p>\n<p><code>name<\/code> \u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u043f\u0441\u043e\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>render()<\/code>  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<p><code>render&nbsp;()&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;className='Component'&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{this.props.name}<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u042f&nbsp;\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441&nbsp;\u043c\u0430\u0448\u0438\u043d\u044b.&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435&nbsp;\u043c\u0430\u0448\u0438\u043d\u044b:&nbsp;{this.state.machineState}.&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br\/&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;onClick={this.clickButtonHandler}&gt;{this.state.buttonLabel}&lt;\/button&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u041c\u0430\u0448\u0438\u043d\u0443&nbsp;\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438&nbsp;{this.state.machineStartCount}&nbsp;\u0440\u0430\u0437.<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;);<br \/>   &nbsp;&nbsp;}<\/code><\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0441\u043b\u0435 <code>div<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0434\u0432\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043e\u043a.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aac\/ec0\/c39\/aacec0c39f4f67b281b792e016aefb8f.png\" width=\"592\" height=\"920\"><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043f\u0441\u0430. \u0412 \u0438\u0433\u0440\u0435 &#171;\u0421\u0430\u043f\u0435\u0440&#187; \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0435. \u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0438\u0442\u043e\u0433 \u0442\u0430\u043a\u043e\u0432:   <\/p>\n<ul>\n<li>\n<p> \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 React;<\/p>\n<\/li>\n<li>\n<p> \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b React;<\/p>\n<\/li>\n<li>\n<p> \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 <\/p>\n<\/li>\n<li>\n<p> \u0443\u0437\u043d\u0430\u043b\u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>state<\/code> \u0438 <code>props<\/code> <\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 &#8212; \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u044b &#171;\u0421\u0430\u043f\u0435\u0440&#187;. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438. \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u043a\u0438 \u0438\u0433\u0440\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441  \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u0442\u044c  \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c redux.  \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<\/p>\n<h3>\u0418\u0433\u0440\u0430 &#171;\u0421\u0430\u043f\u0435\u0440&#187;<\/h3>\n<p> \u0412\u0441\u0435 \u0437\u043d\u0430\u044e\u0442 \u0438\u0433\u0440\u0443 &#171;\u0421\u0430\u043f\u0435\u0440&#187;, \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u043f\u043e\u043b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 <code>M x N<\/code>  \u043d\u0430\u0439\u0442\u0438 <code>X<\/code> \u043c\u0438\u043d. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a\u0443\u044e. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0433\u0440\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50a\/9a4\/d3d\/50a9a4d3def6cc8e8da75bb834de948b.png\" width=\"554\" height=\"607\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0434\u0432\u0430 &#171;\u0431\u043e\u043b\u044c\u0448\u0438\u0445&#187; \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441 &#171;\u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438&#187; (\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043c\u0438\u043d \u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u043e\u043c\u0435\u0440) <code>ControlPanel<\/code><\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 &#171;\u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435&#187; \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u043b\u0438\u043a\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0441 \u043c\u0438\u043d\u0430\u043c\u0438 \u0438\u043b\u0438 \u0431\u0435\u0437<code>MineField<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0435\u0449\u0435 \u0440\u0430\u0437.<\/p>\n<ul>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0434 \u0438\u0433\u0440\u043e\u043a\u043e\u043c \u043f\u043e\u043b\u0435 <code>m<\/code>-\u0441\u0442\u0440\u043e\u043a, <code>n<\/code>-\u043a\u043e\u043b\u043e\u043d\u043e\u043a<\/p>\n<\/li>\n<li>\n<p>\u0438\u0433\u0440\u043e\u043a \u043a\u043b\u0438\u043a\u0430\u0435\u0442 \u043f\u043e \u043b\u044e\u0431\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u043b\u0435\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438     <\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0438\u043a \u0437\u0430 \u0438\u0433\u0440\u0443, \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u043a\u0443\u043d\u0434\u043e\u043c\u0435\u0440<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0443\u0441\u0442\u0430\u044f \u0438 \u0440\u044f\u0434\u043e\u043c \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u043d\u0435\u0442 \u043c\u0438\u043d, \u0442\u043e  \u044f\u0447\u0435\u0439\u043a\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0443  \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0438 \u0441 \u043c\u0438\u043d\u0430\u043c\u0438, \u0442\u043e \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f  \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0435.          \u042f\u0447\u0435\u0439\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u043a\u0430 \u043d\u0435  \u043e\u0442\u043a\u0440\u043e\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u0435\u0437 \u043c\u0438\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439        <\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0438 \u0441 \u043c\u0438\u043d\u0430\u043c\u0438, \u0442\u043e \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0438\u0445 \u043a\u043e\u043b-\u0432\u043e<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0438\u0433\u0440\u043e\u043a \u043a\u043b\u0438\u043a\u043d\u0435\u0442 \u043f\u043e \u044f\u0447\u0435\u0439\u043a\u0435 \u0441 \u043c\u0438\u043d\u043e\u0439, \u0442\u0430\u0439\u043c\u0435\u0440 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043c\u0438\u043d\u044b (\u0438\u0445 \u043c\u0435\u0441\u0442\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f), \u0438\u0433\u0440\u0430 \u043e\u043a\u043e\u043d\u0447\u0435\u043d\u0430<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0438\u0433\u0440\u043e\u043a \u043a\u043b\u0438\u043a\u0430\u0435\u0442 \u043f\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 &#8212;  \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0437\u0430\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043a\u043b\u0438\u043a \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u0442\u043a\u0443, \u043f\u0440\u0438  \u044d\u0442\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043c\u0438\u043d<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u043e\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 &#8212; \u0441\u0435\u043a\u0443\u043d\u0434\u043e\u043c\u0435\u0440 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0438\u0433\u0440\u0430 \u043e\u043a\u043e\u043d\u0447\u0435\u043d\u0430<\/p>\n<\/li>\n<\/ul>\n<h4>\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Game<\/h4>\n<p>\u041f\u0440\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u044f \u043d\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u043d\u043e \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u043b\u0430\u0432\u043d\u044b\u043c, \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u043c\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438 \u043f\u0430\u043d\u0435\u043b\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0427\u0442\u043e \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438  \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0435\u0445 \u0434\u0432\u0443\u0445<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u044f\u0447\u0435\u0439\u043a\u0435<\/p>\n<\/li>\n<li>\n<p>\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 &#171;\u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f&#187; \u043c\u0438\u043d\u044b (\u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448) \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0432\u0441\u0435\u0445 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043e\u0442 \u043c\u0438\u043d \u044f\u0447\u0435\u0435\u043a (\u0432\u044b\u0438\u0433\u0440\u044b\u0448)<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0438\u0433\u0440\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>Game \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u043e\u0442 \u0432 \u0442\u0430\u043a\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435:<\/p>\n<p>state&nbsp;=&nbsp;{<code><br \/> &nbsp;&nbsp;&nbsp;&nbsp;flagCnt:&nbsp;0,<br \/> &nbsp;&nbsp;&nbsp;&nbsp;seconds:&nbsp;0<br \/> &nbsp;&nbsp;};<\/code><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c: <code>flagCnt<\/code> &#8212; \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0444\u043b\u0430\u0436\u043a\u043e\u0432 \u043d\u0430 \u043c\u0438\u043d\u043d\u043e\u043c \u043f\u043e\u043b\u0435, <code>seconds<\/code> &#8212; \u043f\u0440\u043e\u0448\u043b\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0433\u0440\u044b. \u041d\u043e \u0432\u0435\u0434\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0444\u043b\u0430\u0436\u043a\u043e\u0432 \u0438 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 <code>ControlPnael<\/code> , \u043a\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c. <\/p>\n<h4>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 ControlPnael<\/h4>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a <code>Game<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 <code>ControlPanel<\/code><\/p>\n<p><code>&lt;ControlPanel<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;flagCnt={this.state.flagCnt}<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;seconds={this.state.seconds}<br \/>   &nbsp;\/&gt;<\/code><\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u043e\u0434 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <code>ControlPanel<\/code>. \u041e\u043d \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0438 \u044f \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0435\u0433\u043e \u0432\u0435\u0441\u044c. <\/p>\n<p>const&nbsp;zeroPad&nbsp;=&nbsp;(num,&nbsp;places)&nbsp;=&gt;&nbsp;String(num).padStart(places,&nbsp;&#8216;0&#8217;);<br \/><code> &nbsp;<br \/> const&nbsp;controlPanel&nbsp;=&nbsp;(props)&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;const&nbsp;min&nbsp;=&nbsp;Math.floor(props.seconds&nbsp;\/&nbsp;60);<br \/> &nbsp;&nbsp;const&nbsp;secs&nbsp;=&nbsp;props.seconds&nbsp;%&nbsp;60;<br \/> &nbsp;<br \/> &nbsp;&nbsp;return&nbsp;(<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;className='Control'<br \/> &nbsp;&nbsp;&nbsp;&nbsp;style={{color:&nbsp;'#adadad'}}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&gt;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;Flag&nbsp;count:{zeroPad(props.flagCnt)}&nbsp;&nbsp;Time:{zeroPad(min,&nbsp;2)}:{zeroPad(secs,&nbsp;2)}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/> &nbsp;&nbsp;);<br \/> }<br \/> &nbsp;<br \/> export&nbsp;default&nbsp;controlPanel;<\/code><\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>props<\/code>, <code>Game<\/code> \u0432 \u043f\u0440\u043e\u043f\u0441\u0430\u0445 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u0441\u0432\u043e\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445) <code>this.state.flagCnt<\/code> \u0438 <code>this.state.seconds<\/code>, \u0430 <code>ControlPanel<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435 \u0438\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u043f\u0441\u043e\u0432 <code>flagCnt<\/code> \u0438 <code>seconds<\/code>. \u041f\u0440\u043e\u0441\u0442\u043e? \u0421\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043f\u0441\u043e\u0432, \u0437\u0430 \u043d\u0435\u0433\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043f\u0440\u0438\u0447\u0435\u043c \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>setState()<\/code> (\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f <code>state<\/code> \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430). \u0410 \u0442\u0430\u043a \u043a\u0430\u043a <code>setState<\/code> \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438 \u0435\u0433\u043e \u0434\u043e\u0447\u0435\u043a, \u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 <code>ControlPanel<\/code>.<\/p>\n<p>\u041a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438,  \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 &#171;\u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f&#187; \u043e\u0442 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043a  \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443. \u0422\u0430\u043a\u043e\u0439 \u0444\u043e\u043a\u0443\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 <code>Game<\/code>  \u0438 <code>MineField<\/code> . <\/p>\n<h4>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 Game \u0438 MineField<\/h4>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <code>MineField<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432 <code>Game<\/code> :<\/p>\n<p><code>&lt;MineField<br \/> &nbsp;&nbsp;&nbsp;&nbsp;rows='8'<br \/> &nbsp;&nbsp;&nbsp;&nbsp;cols='8'<br \/> &nbsp;&nbsp;&nbsp;&nbsp;mines='10'<br \/> &nbsp;&nbsp;&nbsp;&nbsp;gameStarted={this.startGame}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;gameOver={this.stopGame}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;changeFlagCount={this.setFlag}<br \/> &nbsp;&nbsp;\/&gt;<\/code><\/p>\n<p>\u0418\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u043f\u0441\u043e\u0432, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0435: <code>rows<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u044f\u0447\u0435\u0435\u043a, <code>cols<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043b\u043e\u043d\u043e\u043a, <code>mines<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0438\u043d, \u0441 \u044d\u0442\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>MineField<\/code> \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442 \u043c\u0438\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 &#171;\u043d\u0430\u0432\u0435\u0440\u0445&#187;. \u041a\u0430\u043a <code>Game<\/code> \u0443\u0437\u043d\u0410\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0433\u0440\u0430 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c, \u0447\u0442\u043e \u0431\u044b\u043b \u0443\u0436\u0435 \u043a\u043b\u0438\u043a \u043f\u043e \u044f\u0447\u0435\u0439\u043a\u0435? \u041f\u0440\u043e\u0441\u0442\u043e, <code>MineField<\/code> \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0432 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>gameSarted<\/code> &#8212; \u044d\u0442\u043e \u0438\u043c\u044f \u043f\u0440\u043e\u043f\u0441\u0430, \u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>startGame<\/code> \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <code>Game<\/code> &#8212; \u044d\u0442\u043e \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043a \u0435\u0436\u0435\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>tick()<\/code>, \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>seconds<\/code>, \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 <code>MineField<\/code> \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>gameOver(true|false)<\/code>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>stopGame<\/code> \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <code>Game<\/code>. <code>Game<\/code> \u043f\u043e\u043a\u0430\u0436\u0435\u0442 <code>alert<\/code> \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e (\u043f\u043e\u0434\u043d\u044f\u0442\u043e\u0433\u043e?)\u0438\u0437 <code>MineField<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u0412\u043e\u0442 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 <code>Game<\/code> (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0441\u044c \u043a\u043e\u0434):<\/p>\n<p><code>&nbsp;&nbsp;start&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.timerID&nbsp;=&nbsp;setInterval(()&nbsp;=&gt;&nbsp;this.tick(),&nbsp;1000);<br \/> &nbsp;&nbsp;}<br \/> &nbsp;<br \/> &nbsp;&nbsp;stop&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;clearInterval(this.timerID)<br \/> &nbsp;&nbsp;}<br \/> &nbsp;<br \/> &nbsp;&nbsp;tick()&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;oldsec&nbsp;=&nbsp;this.state.seconds;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.setState({seconds:&nbsp;oldsec&nbsp;+&nbsp;1});<br \/> &nbsp;&nbsp;}<br \/> &nbsp;<br \/> &nbsp;&nbsp;startGame&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.start();<br \/> &nbsp;&nbsp;}<br \/> &nbsp;<br \/> &nbsp;&nbsp;stopGame&nbsp;=&nbsp;(isGameWon)&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isGameWon)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(\"You&nbsp;win\");<br \/> &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(\"You&nbsp;lose\");<br \/> &nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.stop();<br \/> &nbsp;&nbsp;}<\/code><\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a \u043f\u043e\u043b\u044f \u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043f\u043e\u043b\u0435\u043c<\/h4>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u044f\u0447\u0435\u0435\u043a \u043f\u0440\u043e\u0441\u0442 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>Cell<\/code>.  \u041f\u0435\u0440\u0432\u043e\u0435 \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0430 &#8212; \u044d\u0442\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0432  \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c: \u0437\u0430\u043a\u0440\u044b\u0442\u0430, \u043e\u0442\u043a\u0440\u044b\u0442\u0430, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u0444\u043b\u0430\u0433\u043e\u043c. \u0422\u0443\u0442  \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u043c \u0432 \u044f\u0447\u0435\u0439\u043a\u0435  \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c, \u0430 \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u043f\u0441 \u043e\u0442 <code>MineField<\/code>. <\/p>\n<p><code>render&nbsp;()&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;cellSize&nbsp;=&nbsp;40;&nbsp;\/\/px<br \/> &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;width&nbsp;=&nbsp;cellSize&nbsp;+&nbsp;'px';<br \/> &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;height&nbsp;=&nbsp;cellSize&nbsp;+&nbsp;'px';<br \/> &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;left&nbsp;=&nbsp;this.props.col&nbsp;&nbsp;(cellSize&nbsp;+&nbsp;4)&nbsp;+&nbsp;'px'; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;top&nbsp;=&nbsp;this.props.row&nbsp;&nbsp;(cellSize&nbsp;+&nbsp;4)&nbsp;+&nbsp;'px';<br \/> &nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;backgroundColor&nbsp;=&nbsp;this.props.opened&nbsp;?&nbsp;'#adadad'&nbsp;:&nbsp;'#501b1d';<br \/> &nbsp;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;rendstate&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.props.checked)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img&nbsp;className='flag'&nbsp;src={flag}&nbsp;alt=''\/&gt;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.props.opened)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.props.hasBomb&nbsp;?&nbsp;&lt;img&nbsp;className='bomb'&nbsp;src={bomb}&nbsp;alt=''\/&gt;&nbsp;:&nbsp;(this.props.bombNbr&nbsp;&gt;&nbsp;0&nbsp;?&nbsp;this.props.bombNbr&nbsp;:&nbsp;''));<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;className='Cell'<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style={{width,&nbsp;height,&nbsp;left,&nbsp;top,&nbsp;backgroundColor}}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onClick={this.leftClickHandler}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onContextMenu={this.rightClickHandler}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{rendstate()}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;);<br \/> &nbsp;&nbsp;}<\/code><\/p>\n<p>\u0414\u0430, \u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043d\u043e\u0433\u043e &#171;\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445&#187; \u0447\u0438\u0441\u0435\u043b (40, 4, 4), \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043a\u043e\u0434  \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0438\u0449\u0435. \u041d\u043e \u043f\u043e \u0438\u043c\u0435\u043d\u0430\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0432\u0441\u0435  \u043f\u043e\u043d\u044f\u0442\u043d\u043e: <code>cellSize<\/code> &#8212; \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044f\u0447\u0435\u0439\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. <code>width, height<\/code> &#8212; \u0432\u044b\u0441\u043e\u0442\u0430 \u0448\u0438\u0440\u0438\u043d\u0430 <code>top, left<\/code> &#8212; \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0433\u043b\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 \u043f\u043e\u043b\u0435, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u043e\u0442 <code>MineField<\/code> \u0432 \u043f\u0440\u043e\u043f\u0441\u0430\u0445. <code>bomb, flag<\/code> &#8212; \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 \u0440\u0438\u0441\u0443\u043d\u043a\u0438. \u0418\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u0435\u0431\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0430 <code>MineField<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0435\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u043f\u0441\u044b:<\/p>\n<ul>\n<li>\n<p><code>col<\/code> &#8212; \u043a\u043e\u043b\u043e\u043d\u043a\u0430 <\/p>\n<\/li>\n<li>\n<p><code>row<\/code> &#8212; \u0441\u0442\u0440\u043e\u043a\u0430 <\/p>\n<\/li>\n<li>\n<p><code>checked<\/code> &#8212; \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u0444\u043b\u0430\u0433\u043e\u043c <\/p>\n<\/li>\n<li>\n<p><code>opened<\/code> &#8212; \u043e\u0442\u043a\u0440\u044b\u0442\u0430 <\/p>\n<\/li>\n<li>\n<p><code>bombNbr<\/code> &#8212; \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d (\u0431\u043e\u043c\u0431) \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u044f\u0447\u0435\u0439\u043a\u0430\u0445   <\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u043c\u044b\u0448\u0438. \u0417\u0430  \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043e\u043d\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432  \u0442\u044d\u0433\u0435 <code>div<\/code> : <\/p>\n<p>&nbsp;<code>&nbsp;leftClickHandler&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.props.clickLeft(this.props.row,&nbsp;this.props.col);<br \/> &nbsp;&nbsp;}<br \/> &nbsp;<br \/> &nbsp;&nbsp;rightClickHandler&nbsp;=&nbsp;(e)&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;e.preventDefault();<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.props.clickRight(this.props.row,&nbsp;this.props.col);<br \/> &nbsp;&nbsp;}<\/code><\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b  \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c &#171;\u043d\u0430\u0432\u0435\u0440\u0445&#187; \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u043b\u0438\u043a\u043d\u0443\u043b\u0438. \u041f\u043e\u0441\u043b\u0435 \u043a\u043b\u0438\u043a\u0430,  \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u043f\u0441\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0440\u0430\u0431\u043e\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0432  \u043a\u043b\u0430\u0441\u0441\u0435 <code>MineField <\/code> \u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u0432\u043d\u0438\u0437, \u043d\u0430\u0437\u0430\u0434 \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043f\u0441\u0430 <code>opened<\/code>  \u0438\u043b\u0438 <code>checked<\/code>.<\/p>\n<h3>\u041a\u043b\u0430\u0441\u0441 MineField<\/h3>\n<p>\u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 &#171;\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u044b\u0439 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0439&#187; \u043a\u043b\u0430\u0441\u0441, \u0432\u0435\u0441\u044c \u043a\u043e\u0434  \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u043c \u0431\u043e\u043b\u0435\u0435 200 \u0441\u0442\u0440\u043e\u043a. \u041a\u043b\u0430\u0441\u0441 \u0438\u043c\u0435\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c  \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 <code>rows x cols<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0442\u0438\u043f\u0430 <code>cellData<\/code> . \u0412\u043e\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <code>cellData<\/code>.<\/p>\n<p><code>class&nbsp;cellData&nbsp;{<br \/> &nbsp;&nbsp;constructor&nbsp;(row,&nbsp;col)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.row&nbsp;=&nbsp;row;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.col&nbsp;=&nbsp;col;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.hasBomb&nbsp;=&nbsp;false;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.checked&nbsp;=&nbsp;false;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.opened&nbsp;=&nbsp;false;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.bombNbr&nbsp;=&nbsp;0;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.nbrs&nbsp;=&nbsp;[...Array(0)];<br \/> &nbsp;&nbsp;}<br \/> }<\/code><\/p>\n<p>\u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043c\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438  \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u043f\u0441\u043e\u0432 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044f\u0447\u0435\u0439\u043a\u0438. \u042f \u043f\u0440\u043e \u043d\u0438\u0445 \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b.<\/p>\n<p>&nbsp;constructor(props)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;super(props);<br \/><code> &nbsp;&nbsp;&nbsp;&nbsp;this.closedCells&nbsp;=&nbsp;props.rows&nbsp;*&nbsp;props.cols&nbsp;-&nbsp;props.mines;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.flagCount&nbsp;=&nbsp;0;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;this.state&nbsp;=&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field:&nbsp;this.createMap(this.props.rows,&nbsp;this.props.cols,&nbsp;this.props.mines),<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gameState:&nbsp;'waiting',<br \/> &nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;&nbsp;}<\/code><\/p>\n<p>\u0412 \u043f\u043e\u043b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <code>state.field<\/code>  \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043a\u0430\u0440\u0442\u0443 \u043c\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>createMap(this.props.rows, this.props.cols, this.props.mines)<\/code>  . \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u043e\u0434 (\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0433\u0440\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438)  \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435  \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u043c\u0438\u043d\u0430\u043c\u0438 \u0438 \u0440\u0430\u0441\u0447\u0435\u0442 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0441 \u043c\u0438\u043d\u0430\u043c\u0438 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430  \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0432 \u043e\u0431\u0449\u0435\u043c, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u043e\u0432 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0443, \u043d\u043e  \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0435\u0433\u043a\u043e (\u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435). \u0427\u0442\u043e \u0436\u0435, \u0432\u043e\u0442 \u0438 \u043a\u043e\u0434 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <code>MineField<\/code>  \u0438  \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u044f\u0447\u0435\u0435\u043a \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u043f\u0441\u0430\u043c\u0438, \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c  \u0447\u0442\u043e \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044f\u0447\u0435\u0435\u043a \u043b\u0435\u0436\u0430\u0442 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435:<\/p>\n<p><code>&nbsp;render()&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;className='MineField'&gt;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.state.field.map(function(row){<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;row.map(function&nbsp;(cell)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Cell<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row={cell.row}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;col={cell.col}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hasBomb={cell.hasBomb}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bombNbr={cell.bombNbr}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key={cell.row&nbsp;+&nbsp;\"-\"&nbsp;+&nbsp;cell.col}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checked={cell.checked}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opened={cell.opened}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clickLeft={this.cellLeftClicked}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clickRight={this.cellRightClicked}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/&gt;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;this);<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;this)<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;);<br \/> &nbsp;&nbsp;}<\/code><\/p>\n<p>\u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>map<\/code>  \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043a\u043b\u0430\u0441\u0441,  \u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430. \u0412\u0441\u0435, \u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0438  \u0433\u043e\u0442\u043e\u0432\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043b\u0438\u043a\u0438 \u043c\u044b\u0448\u043a\u043e\u0439. \u041f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u043c\u043d\u0438\u043c, \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f  \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 <code>MineField<\/code> , \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u043c\u0438\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u0435\u043c, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c, \u043f\u043e\u0442\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (<code>setState())<\/code>  , \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430 \u044f\u0447\u0435\u0435\u043a, \u043f\u0440\u043e\u043f\u0441\u044b \u0432\u0435\u0434\u044c \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c, \u0430  \u0442\u0430\u043a \u0436\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u0444\u043b\u0430\u0436\u043a\u043e\u0432. \u0412\u043e\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439  \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043b\u0438\u043a\u043e\u0432:<\/p>\n<p><code>&nbsp;cellLeftClicked&nbsp;=&nbsp;(row,&nbsp;col)&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(this.state.gameState)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'waiting':<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.props.gameStarted();<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({gameState:&nbsp;'started'});<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/*&nbsp;falls&nbsp;through&nbsp;*\/<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'started':<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;newField&nbsp;=&nbsp;[...this.state.field];<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.openCell(newField,&nbsp;row,&nbsp;col);<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({field:&nbsp;newField});<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'finished':<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;&nbsp;}<\/code><\/p>\n<p><code>&nbsp;&nbsp;cellRightClicked&nbsp;=&nbsp;(row,&nbsp;col)&nbsp;=&gt;&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(this.state.gameState)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'waiting':<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'started':<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.state.field[row][col].opened)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;newField&nbsp;=&nbsp;[...this.state.field];<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;flagCntDiff&nbsp;=&nbsp;newField[row][col].checked&nbsp;?&nbsp;-1&nbsp;:&nbsp;1;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((this.flagCount&nbsp;+&nbsp;flagCntDiff)&nbsp;&lt;&nbsp;0&nbsp;||&nbsp;(this.flagCount&nbsp;+&nbsp;flagCntDiff)&nbsp;&gt;&nbsp;this.props.mines)&nbsp;{<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.flagCount&nbsp;+=&nbsp;flagCntDiff;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.props.changeFlagCount(flagCntDiff);<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newField[row][col].checked&nbsp;=&nbsp;!newField[row][col].checked;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({field:&nbsp;newField});<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'finished':<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/> &nbsp;&nbsp;&nbsp;&nbsp;}<br \/> &nbsp;&nbsp;}<\/code><\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0438\u0433\u0440\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>waiting -&gt; started -&gt; finished<\/code> . <code>waiting <\/code> &#8212; \u044d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>started <\/code> \u043c\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438, \u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>finished<\/code>  \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u043c\u0438\u043d\u043e\u0439 \u0438\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0432\u0441\u0435\u0445 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u0417\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u044f\u0447\u0435\u0435\u043a \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>openCell()<\/code> , \u043e\u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u0431\u044f \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u044f\u0447\u0435\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0433\u0440\u0430\u043d\u0438\u0447\u0430\u0442 \u0437\u0430\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <code>finished<\/code> \u043c\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u043c \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0438\u0433\u0440\u0443 (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443) \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c.<\/p>\n<p>\u0415\u0449\u0435 \u0440\u0430\u0437 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043c\u0438\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u0435\u043c &#8212; <code>state.field<\/code> . \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043a\u043b\u0438\u043a\u0430 \u043c\u044b\u0448\u043a\u043e\u0439 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043e\u043f\u0438\u044e \u043f\u043e\u043b\u044f. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0441 \u043d\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0438 \u043f\u043e\u0442\u043e\u043c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>setState()<\/code>  \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441 \u043d\u043e\u0432\u044b\u043c, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u0435\u043c.<\/p>\n<h3>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0435<\/h3>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e <a href=\"https:\/\/github.com\/primus2010\/article_hbr\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<br \/>\u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 React, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0425\u043e\u0442\u044f \u043c\u043e\u0433\u043b\u043e  \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0438 \u0442\u0430\u043a, \u0447\u0442\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u0435\u0449\u0438 \u0443\u0436\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435  \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b. \u042f \u0442\u0430\u043a\u0436\u0435 \u043f\u0438\u0441\u0430\u043b \u0437\u0434\u0435\u0441\u044c \u0432 \u0442\u0435\u043a\u0441\u0442\u0435, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e\u0439 \u0436\u0435  \u0438\u0433\u0440\u044b \u043f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 <code>redux<\/code> , \u043d\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043e\u043d\u0430 (\u0438\u0433\u0440\u0430) \u0442\u043e\u0433\u043e \u043d\u0435  \u0441\u0442\u043e\u0438\u0442. \u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u0441  \u0431\u0438\u0440\u0436\u0438, \u043f\u043e\u0443\u0447\u0438\u043c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0432\u043e\u0442 \u0442\u0443\u0442  \u0434\u043e\u0439\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f <code>redux<\/code> , \u0431\u0443\u0434\u0435\u0442 \u043a \u043c\u0435\u0441\u0442\u0443, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c, \u0432\u0441\u0435\u043c \u0432\u0441\u0435\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e!<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/549842\/\"> https:\/\/habr.com\/ru\/post\/549842\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0414\u0430, \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0445\u0435\u043b\u043b\u043e-\u0432\u043e\u0440\u043b\u0434 \u043d\u0430 React, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u043d\u0430 \u0441\u0435\u0442\u0438. \u0417\u0430\u0447\u0435\u043c  \u0435\u0449\u0435 \u043e\u0434\u0438\u043d?      \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u0430\u043a, \u043a\u0430\u043a  \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u0435 \u0448\u0430\u0433\u0438 \u043d\u0430 React,  \u0442.\u0435. \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0437\u043d\u0430\u0442\u044c  \u0441\u043d\u0430\u0447\u0430\u043b\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0449\u0438\u0435 \u0434\u0430\u0434\u0443\u0442 \u0441\u0432\u043e\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p> \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0445\u0435\u043b\u043b\u043e\u0432\u043e\u0440\u043b\u0434\u043e\u0432. \u0412\u0441\u0435 (\u043f\u043e\u0447\u0442\u0438) \u0441\u0434\u0435\u043b\u0430\u044e\u0442 \u0437\u0430 \u043d\u0430\u0441.  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439.<\/p>\n<pre><code>node --version  v10.24.0  npm --version 6.14.11 npx --version 10.2.2<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<\/p>\n<pre><code>npx create-react-app hw-app<\/code><\/pre>\n<p>\u0433\u0434\u0435 <code>hw-app<\/code> (helloworld-application) &#8212; \u0438\u043c\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043f\u0430\u043f\u043a\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>hw-app<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0432\u0441\u0435  \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <code>React<\/code> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443  \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0432\u043d\u0443\u0442\u0440\u044c (cd hw-app) \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.   <\/p>\n<p><code>npm start<\/code><\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 <\/p>\n<pre><code>You can now view hw-app in the browser.  http:\/\/localhost:3000  Note that the development build is not optimized. To create a production build, use npm run build.<\/code><\/pre>\n<p>\u043d\u043e \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0434\u0438\u0432\u043e\u0441\u0442\u044c. \u041d\u0430\u0446\u0435\u043b\u0438\u043c \u0441\u0432\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u0443\u0432\u0438\u0434\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e \u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u043c) \u043d\u0430\u0436\u043c\u0435\u043c <code>Ctr-C<\/code>. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f-\u043f\u0440\u043e\u0435\u043a\u0442\u0430. <\/p>\n<pre><code>ls README.md  node_modules  package-lock.json  package.json  public  src<\/code><\/pre>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043d\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0438 <code>public<\/code> \u0438 <code>src<\/code>.<\/p>\n<pre><code>ls public favicon.ico  index.html  logo192.png  logo512.png  manifest.json  robots.txt  ls src App.css  App.js  App.test.js  index.css  index.js  logo.svg  reportWebVitals.js  setupTests.js&lt;\/pre&gt;&lt;\/code&gt;  <\/code><\/pre>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 public \u043b\u0435\u0436\u0438\u0442 <code>index.html<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f dev-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 <code>index.html<\/code> \u0435\u0441\u0442\u044c <code>div<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441 <code>id='root'<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 React &#171;\u043e\u0442\u0440\u0438\u0441\u0443\u0435\u0442&#187; \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 <code>src\/index.js<\/code><\/p>\n<p><code>ReactDOM.render(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp; &lt;React.StrictMode&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp;&nbsp; &lt;App&nbsp;\/&gt;<br \/>   &nbsp;&nbsp; &lt;\/React.StrictMode&gt;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp; document.getElementById('root')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>&nbsp; );<\/code><\/p>\n<p>\u0438 \u043e\u0442\u0440\u0438\u0441\u0443\u0435\u0442 \u043e\u043d \u0442\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>App<\/code>. \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043b\u0438\u0436\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0444\u0430\u0439\u043b\u044b <code>index.html<\/code> \u0438 <code>App.js<\/code>. \u041f\u0443\u0441\u0442\u044c \u0431\u0440\u0430\u0443\u0437e\u0440 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u044b\u043b\u043e<\/p>\n<p><code>&lt;title&gt;React&nbsp;App&lt;\/title&gt;<\/code><\/p>\n<p>\u0441\u0442\u0430\u043b\u043e<\/p>\n<p><code>&lt;title&gt;My&nbsp;First&nbsp;React&nbsp;App&lt;\/title&gt;<\/code><\/p>\n<p>\u0410 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 App \u043f\u0443\u0441\u0442\u044c \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <code>App.js<\/code>) \u0431\u044b\u043b\u043e:<\/p>\n<p>import&nbsp;logo&nbsp;from&nbsp;&#8216;.\/logo.svg&#8217;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/><code>   &nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;'.\/App.css';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;App()&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;className=\"App\"&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;header&nbsp;className=\"App-header\"&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img&nbsp;src={logo}&nbsp;className=\"App-logo\"&nbsp;alt=\"logo\"&nbsp;\/&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edit&nbsp;&lt;code&gt;src\/App.js&lt;\/code&gt;&nbsp;and&nbsp;save&nbsp;to&nbsp;reload.<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className=\"App-link\"<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href=\"https:\/\/reactjs.org\"<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target=\"_blank\"<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rel=\"noopener&nbsp;noreferrer\"<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Learn&nbsp;React<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/a&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/header&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;);} <\/code><\/p>\n<p>\u0441\u0442\u0430\u043b\u043e:<\/p>\n<p><code>function&nbsp;App()&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Hello&nbsp;React!&lt;\/h1&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;);<br \/>   &nbsp;&nbsp;}<br \/>   &nbsp;&nbsp;export&nbsp;default&nbsp;App;<\/code><\/p>\n<p>\u0442\u0430\u043a\u0436\u0435 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 src \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0444\u0430\u0439\u043b\u044b. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u0438\u043c<\/p>\n<pre><code>ls src\/ App.js index.js<\/code><\/pre>\n<p>\u041f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u0430\u043c\u0438 \u0438 \u0443\u0437\u043d\u0430\u0435\u043c \u0437\u0430\u0447\u0435\u043c \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c. \u0410 \u043f\u043e\u043a\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 HelloWorld, \u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u044b \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435  \u0431\u0443\u0434\u0435\u043c \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u0447\u0442\u043e\u0431\u044b  \u043d\u0430\u0448 &#171;Hello&#187; \u043d\u0435 \u0443\u043b\u0435\u0442\u0435\u043b \u0432 \u043f\u0443\u0441\u0442\u043e\u0442\u0443. <\/p>\n<p>\u0412 React \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0438 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 &#8212; \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 JavaScript \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043a\u043e\u0434,  \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 <code>html<\/code>. \u041f\u043e\u0445\u043e\u0436\u0438\u0439, \u043d\u043e \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u0434\u0435\u043b\u0435 \u043a\u043e\u0434\u043e\u043c <code>JSX<\/code> \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e <code>html<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b <code>App.js<\/code> \u043f\u0443\u0441\u0442\u044c \u043e\u043d  \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e  \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b.<\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u0435\u043c \u0443\u0431\u0440\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 <code>src\/index.js<\/code>, \u043e\u043d \u043f\u0440\u0438\u043c\u0435\u0442 \u0432\u0438\u0434 <\/p>\n<p><code>import&nbsp;React&nbsp;from&nbsp;'react';<br \/>&nbsp;import&nbsp;ReactDOM&nbsp;from&nbsp;'react-dom';<br \/>&nbsp;import&nbsp;App&nbsp;from&nbsp;'.\/App';<br \/> &nbsp;<br \/>&nbsp;ReactDOM.render(<br \/>&nbsp; &lt;React.StrictMode&gt;<br \/> &nbsp;&nbsp;&nbsp; &lt;App&nbsp;\/&gt;<br \/> &nbsp;&nbsp;&nbsp; &lt;\/React.StrictMode&gt;,<br \/> &nbsp;&nbsp;&nbsp; document.getElementById('root')<br \/>&nbsp;);<\/code><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 &#8212; \u043f\u0440\u043e\u0441\u0442\u043e  \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438 &#171;\u043a\u043b\u0430\u0441\u0441\u043e\u0432\u044b\u043c\u0438&#187; &#8212; \u044d\u0442\u043e  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0439 JS \u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438  \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.  \u0421\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043e\u0434\u0438\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043e\u0434\u0438\u043d \u0432  \u0432\u0438\u0434\u0435 \u043a\u043b\u0430\u0441\u0441\u0430. \u041e\u0431\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0447\u0442\u043e-\u0442\u043e \u043e \u0441\u0435\u0431\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438  \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. <\/p>\n<p> \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <code>ClickCounter<\/code>, \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u043e \u043d\u0435\u043c\u0443 \u043a\u043b\u0438\u043a\u043d\u0443\u043b\u0438. \u0412\u0442\u043e\u0440\u043e\u0439 &#8212; <code>Machine<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0430\u0448\u0438\u043d\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c, \u043d\u0430\u0436\u0438\u043c\u0430\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443. <\/p>\n<h3>ClickCounter &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/h3>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f. \u042d\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <code>ClickCounter.js<\/code><\/p>\n<p><code>const&nbsp;clickCounter&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>&nbsp; const&nbsp;clickTimes&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp; return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp; &lt;div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;\u042f&nbsp;\u0441\u0447\u0435\u0442\u0447\u0438\u043a&nbsp;\u043a\u043b\u0438\u043a\u043e\u0432&lt;\/p&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;\u041a\u043b\u0438\u043a\u043d\u0443\u0442\u043e&nbsp;{clickTimes}&nbsp;\u0440\u0430\u0437&lt;\/p&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp;&nbsp; &lt;\/div&gt;<br \/>   &nbsp; );<br \/>&nbsp; }&nbsp;&nbsp;&nbsp;<br \/>   &nbsp; export&nbsp;default&nbsp;clickCounter;<\/code><\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f <code>App.js<\/code>.<\/p>\n<p><code>import&nbsp;ClickCounter&nbsp;from&nbsp;'.\/ClickCounter';<br \/>     &nbsp;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;App()&nbsp;{<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Hello&nbsp;React!&lt;\/h1&gt;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ClickCounter&nbsp;\/&gt;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;}<br \/>     &nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;default&nbsp;App;<\/code><\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0448 <code>ClickCounter<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c  \u0435\u0433\u043e \u0432 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0433\u0430 &#171;Hello React!&#187;. \u0418 \u0434\u0430, \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442  \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u043a\u0430\u043a \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u0442\u044d\u0433. \u0422\u0443\u0442 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c  \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0431 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0432 \u0444\u0430\u0439\u043b\u0435 <code>ClickCounter.js<\/code> \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c <code>clickCounter<\/code>, \u0432 <code>App.js<\/code> \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c <code>ClickCounter<\/code>, \u0447\u0442\u043e \u0437\u0430 \u0434\u0435\u043b\u0430? \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044c <code>MySupperPupperClickCounter<\/code> \u0438\u0437 <code>'.\/ClickCounter'<\/code> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a<code> &lt;MySupperPupperClickCounter \/&gt; <\/code>, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u0432\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 clickCounter(), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443. (\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435) <\/p>\n<p> \u0418\u0442\u043e\u0433\u043e: \u043f\u043e\u0441\u043b\u0435 \u0441\u043b\u043e\u0432\u0430 <code>import<\/code> \u0441\u0442\u043e\u0438\u0442 \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b  \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 App.js) \u043f\u043e\u0441\u043b\u0435  \u0441\u043b\u043e\u0432\u0430 from \u0441\u0442\u043e\u0438\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c, \u043d\u043e \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <code>'.js'<\/code>. <\/p>\n<p> \u0427\u0442\u043e \u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e  \u0432 <code>\u0421lickCounter.js<\/code>? \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>clickCounter<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f <code>'='<\/code>  \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <code>'()'<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0442\u0435\u043b\u0435 <code>'{}'<\/code>, \u0442\u0430\u043c \u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>clickTimes<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435<\/p>\n<p>  <code>&lt;p&gt;\u041a\u043b\u0438\u043a\u043d\u0443\u0442\u043e&nbsp;{clickTimes}&nbsp;\u0440\u0430\u0437&lt;\/p&gt;<\/code><\/p>\n<p>\u0433\u0434\u0435 \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u043e \u0432 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438. \u041f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e <code>JSX<\/code> \u0438 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c <code>\"\u041a\u043b\u0438\u043a\u043d\u0443\u0442\u043e 0 \u0440\u0430\u0437\"<\/code> \u043a\u0430\u043a \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435. <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u043a\u0430 \u0435\u0449\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0442.\u043a. \u043d\u0435\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u043a\u043b\u0438\u043a\u043e\u0432. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0435\u0433\u043e.  <a href=\"https:\/\/ru.reactjs.org\/docs\/hooks-state.html\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c<\/a> \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0445\u0443\u043a\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u042f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044e, \u043d\u043e \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u0440\u043e \u0441\u0442\u0440\u043e\u043a\u0443 <\/p>\n<pre><code>const [clickTimes, clickIncrement] = useState(0)<\/code><\/pre>\n<p><code>useState(0)<\/code> &#8212; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0435  \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f clickTimes \u0435\u0433\u043e \u0436\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u0430\u043a  \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<br \/><code>clickUpdater<\/code> &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c.<\/p>\n<p>\u042f \u0432\u044b\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>clickIncrementer()<\/code>, \u0447\u0442\u043e\u0431\u044b  \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u0430\u044f)  \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442\u0442\u0443\u0434\u0430.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u0430\u0439\u043b <code>ClickCounter.js<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c:<\/p>\n<p><code>import&nbsp;React,&nbsp;{&nbsp;useState&nbsp;}&nbsp;from&nbsp;'react';<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;ClickCounter&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;[clickTimes,&nbsp;clickUpdater]&nbsp;=&nbsp;useState(0);<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;clickIncrementer&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;clickTimes&nbsp;+&nbsp;1;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;onClick={&nbsp;()&nbsp;=&gt;&nbsp;clickUpdater(clickIncrementer)}&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u042f&nbsp;\u0441\u0447\u0435\u0442\u0447\u0438\u043a&nbsp;\u043a\u043b\u0438\u043a\u043e\u0432&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u041a\u043b\u0438\u043a\u043d\u0443\u0442\u043e&nbsp;{clickTimes}&nbsp;\u0440\u0430\u0437&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;default&nbsp;ClickCounter;<\/code><\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, ClickCounter \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0438\u0448\u0435\u043c \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0443\u043a\u0432\u044b &#8212; \u044d\u0442\u043e  \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043b\u0438\u043a\u0430\u044f \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0435\u0435  \u0447\u0438\u0441\u043b\u043e \u043a\u043b\u0438\u043a\u043e\u0432.<\/p>\n<h3>Machine &#8212; class<\/h3>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438 \u0434\u0430\u043b\u044c\u0448\u0435. \u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0441. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 <code>Machine<\/code> \u0438 \u043e\u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 <code>Machine.js<\/code>. \u041a\u043b\u0430\u0441\u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u0431\u044f\u0437\u0430\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>render()<\/code>,  \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430  \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u0412\u043e\u0442 \u043f\u043e\u043b\u043d\u044b\u0439  \u0442\u0435\u043a\u0441\u0442 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p><code>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;React&nbsp;from&nbsp;'react';<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Machine&nbsp;extends&nbsp;React.Component&nbsp;{<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;=&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;machineState:&nbsp;'STOPPED',<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;machineStarted:&nbsp;0<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;render&nbsp;()&nbsp;{<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u042f&nbsp;\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441&nbsp;\u043c\u0430\u0448\u0438\u043d\u044b.&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435&nbsp;\u043c\u0430\u0448\u0438\u043d\u044b:&nbsp;{this.state.machineState}.&nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br\/&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;onClick={this.clickButtonHandler}&gt;{this.state.buttonLabel}&lt;\/button&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/p&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u041c\u0430\u0448\u0438\u043d\u0443&nbsp;\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438&nbsp;{this.state.machineStartCount}&nbsp;\u0440\u0430\u0437.<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/div&gt;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;}<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;default&nbsp;Machine;<\/code><\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, <code>render()<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a <code>JS<\/code> \u043a\u043e\u0434, \u0438 \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u043c\u043b\u0435\u043d \u043e\u0434\u043d\u0438\u043c <code>&lt;div&gt;(&lt;span&gt;<\/code> \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 <code>&lt;&gt;<\/code>), \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u043e \u0436\u0435. \u0412 \u0444\u0430\u0439\u043b <code>App.js<\/code> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 <\/p>\n<pre><code>import Machine from '.\/Machine';<\/code><\/pre>\n<p>\u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/p>\n<pre><code>&lt;Machine \/&gt;<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0444\u0430\u0439\u043b\u0430<\/p>\n<p><code>import&nbsp;ClickCounter&nbsp;from&nbsp;'.\/ClickCounter';<br \/>&nbsp;import&nbsp;Machine&nbsp;from&nbsp;'.\/Machine';<br \/>   &nbsp;<br \/>   &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;App(<\/br><\/br><\/br><\/code><\/p>\n<p><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/code><\/p>\n<p><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/code><\/p>\n<\/p>\n<p><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/code><\/p>\n<p><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/code><\/p>\n<p><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/code><\/p>\n<p><\/br><\/br><\/br><\/br><\/br><\/code><\/p>\n<p><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/br><\/code><\/br><\/p>\n<p><\/br><\/br><\/br><\/code><\/p>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-320564","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/320564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=320564"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/320564\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=320564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=320564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=320564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}