{"id":287600,"date":"2018-08-16T14:12:54","date_gmt":"2018-08-16T10:12:54","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=287600"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=287600","title":{"rendered":"Redux \u043f\u0440\u043e\u0442\u0438\u0432 React Context API"},"content":{"rendered":"\n<div data-io-article-url=\"https:\/\/habr.com\/post\/419449\/\" class=\"post__text post__text-html js-mediator-article\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/fg\/fp\/ik\/fgfpikxzusi8yqxz5vioyhdjgxm.png\"><\/p>\n<p>  \u0412 React 16.3 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 Context API. <i>\u041d\u043e\u0432\u044b\u0439 <\/i>\u0432 \u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u0447\u0442\u043e <i>\u0441\u0442\u0430\u0440\u044b\u0439 <\/i>Context API \u0431\u044b\u043b \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u044e\u0434\u0435\u0439 \u043b\u0438\u0431\u043e \u043d\u0435 \u0437\u043d\u0430\u043b\u0438 \u043e \u0435\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438, \u043b\u0438\u0431\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b\u0430 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c Context API \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e React, \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u0440\u0430\u043d\u044c\u0448\u0435, \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e).<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 React 16.3, \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u0442\u0430\u0442\u044c\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0432\u043e\u0437\u0433\u043b\u0430\u0448\u0430\u043b\u0430\u0441\u044c \u0441\u043c\u0435\u0440\u0442\u044c Redux \u0438\u0437-\u0437\u0430 \u043d\u043e\u0432\u043e\u0433\u043e Context API. \u0415\u0441\u043b\u0438 \u0431\u044b \u0432\u044b \u0441\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0443 Redux, \u044f \u0434\u0443\u043c\u0430\u044e, \u043e\u043d \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u0431\u044b \u2014 \u00ab\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e \u043c\u043e\u0435\u0439 \u0441\u043c\u0435\u0440\u0442\u0438 <a href=\"https:\/\/blog.isquaredsoftware.com\/2018\/03\/redux-not-dead-yet\/\">\u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u044b<\/a>\u00bb.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 Context API, \u0447\u0435\u043c \u043e\u043d \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 Redux, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Context \u0432\u043c\u0435\u0441\u0442\u043e Redux \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 Context \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 Redux \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<p>  <b>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0437\u043e\u0440 Context API, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/daveceddia.com\/context-api-vs-redux\/#how-to-use-the-react-context-api\">\u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/b><\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 React \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>  \u042f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0432 React (props &amp; state), \u043d\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0442, \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 5-\u0434\u043d\u0435\u0432\u043d\u044b\u0439 \u043a\u0443\u0440\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 <a href=\"https:\/\/daveceddia.com\/pure-react-email-course\/\">\u0432\u0430\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c<\/a>.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0432\u0435\u0434\u0435\u0442 \u043d\u0430\u0441 \u043a \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0432 Redux. \u041c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 React, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043e\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 Redux \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0441 Context.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tq\/8q\/ze\/tq8qzesfpe66d4kveo0p6y10cv0.png\"><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445: \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0432 \u043f\u0440\u0430\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0438 \u043d\u0430 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0440\u044f\u0434\u043e\u043c \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c.<\/p>\n<p>  (\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e \u0441 Twitter. \u041d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e! \u041e\u0434\u0438\u043d \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043e\u0442\u0442\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u043d\u0430\u0432\u044b\u043a\u0438 React \u044d\u0442\u043e \u2014 <a href=\"https:\/\/daveceddia.com\/learn-react-with-copywork\/\">\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043b\u0438\u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0430\u0439\u0442\u043e\u0432 \/ \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439)<\/a>.<\/p>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ld\/x0\/3j\/ldx03joils7rg-6cszxkur0dm_u.png\"><\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0447\u0438\u0441\u0442\u044b\u0439 React (\u0442\u043e\u043b\u044c\u043a\u043e props) \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e \u0432 \u0434\u0435\u0440\u0435\u0432\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043d\u0435\u0439 \u043d\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 App.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0442\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043d\u0435\u0439 \u043d\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 Nav \u0438 Body. \u041e\u043d\u0438, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0443\u0442 \u0435\u0433\u043e UserAvatar (\u0443\u0440\u0430!) \u0418 Sidebar. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, Sidebar \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0435 \u0432 UserStats.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043a\u043e\u0434\u0435 (\u044f \u043f\u043e\u043c\u0435\u0449\u0430\u044e \u0432\u0441\u0435 \u0432 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043b\u0435\u0433\u043a\u0438\u043c \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043e \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0441\u043b\u0435\u0434\u0443\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e <a href=\"https:\/\/daveceddia.com\/react-project-structure\/\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435<\/a>).<\/p>\n<pre><code class=\"javascript\">import React from \"react\"; import ReactDOM from \"react-dom\"; import \".\/styles.css\";  const UserAvatar = ({ user, size }) =&gt; (   &lt;img     className={`user-avatar ${size || \"\"}`}     alt=\"user avatar\"     src={user.avatar}   \/&gt; );  const UserStats = ({ user }) =&gt; (   &lt;div className=\"user-stats\"&gt;     &lt;div&gt;       &lt;UserAvatar user={user} \/&gt;       {user.name}     &lt;\/div&gt;     &lt;div className=\"stats\"&gt;       &lt;div&gt;{user.followers} Followers&lt;\/div&gt;       &lt;div&gt;Following {user.following}&lt;\/div&gt;     &lt;\/div&gt;   &lt;\/div&gt; );  const Nav = ({ user }) =&gt; (   &lt;div className=\"nav\"&gt;     &lt;UserAvatar user={user} size=\"small\" \/&gt;   &lt;\/div&gt; );  const Content = () =&gt; &lt;div className=\"content\"&gt;main content here&lt;\/div&gt;;  const Sidebar = ({ user }) =&gt; (   &lt;div className=\"sidebar\"&gt;     &lt;UserStats user={user} \/&gt;   &lt;\/div&gt; );  const Body = ({ user }) =&gt; (   &lt;div className=\"body\"&gt;     &lt;Sidebar user={user} \/&gt;     &lt;Content user={user} \/&gt;   &lt;\/div&gt; );  class App extends React.Component {   state = {     user: {       avatar:         \"https:\/\/www.gravatar.com\/avatar\/5c3dd2d257ff0e14dbd2583485dbd44b\",       name: \"Dave\",       followers: 1234,       following: 123     }   };    render() {     const { user } = this.state;      return (       &lt;div className=\"app\"&gt;         &lt;Nav user={user} \/&gt;         &lt;Body user={user} \/&gt;       &lt;\/div&gt;     );   } }  ReactDOM.render(&lt;App \/&gt;, document.querySelector(\"#root\")); <\/code><\/pre>\n<p>  <a href=\"https:\/\/codesandbox.io\/s\/q8yqx48074\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043d\u0430 CodeSandbox<\/a><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c App <a href=\"https:\/\/daveceddia.com\/where-initialize-state-react\/\">\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 state<\/a>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u201cuser\u201d. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e <a href=\"https:\/\/daveceddia.com\/ajax-requests-in-react\/\">\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u0442\u0435 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/a> \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0438\u0445 \u0432 state \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430.<\/p>\n<p>  \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u044f props (\u201cprop drilling\u201d), <i>\u044d\u0442\u043e \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e<\/i>. \u041e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u00ab\u041f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435 props&#8217;\u043e\u0432\u00bb, \u044d\u0442\u043e \u2014 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437\u0435\u0446 \u0440\u0430\u0431\u043e\u0442\u044b React. \u041d\u043e \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0434\u0435\u0440\u0435\u0432\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438. \u0418 \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u043e\u043b\u0435\u0435, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e props&#8217;\u043e\u0432 (\u0430 \u043d\u0435 \u043e\u0434\u0438\u043d).<\/p>\n<p>  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0438\u043d\u0443\u0441 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438: \u043e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b. \u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Nav \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u201cuser\u201d prop \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 UserAvatar, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 Nav \u0432 \u043d\u0435\u043c \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0422\u0435\u0441\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 props \u0438\u0445 \u0434\u0435\u0442\u044f\u043c), \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0438\u0445 \u043a \u043d\u043e\u0432\u044b\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u043c \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0438\u0445 \u0432 \u043d\u043e\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u044d\u0442\u043e.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Context \u0438\u043b\u0438 Redux&#8230;<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 <i>\u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c<\/i> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 props \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0430\u0448 \u043a\u043e\u0434 \u0447\u0438\u0449\u0435, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u0442\u044c \u043a \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u043c\u0443 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0443 props, <i>Context<\/i>, \u0438\u043b\u0438 <i>Redux<\/i>.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 children props \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c\u0438, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a Nav, Sidebar \u0438 Body. \u0422\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c JSX \u0432 <i>\u043b\u044e\u0431\u043e\u0439 <\/i>prop, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 children \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u00ab\u0441\u043b\u043e\u0442\u0430\u00bb \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 React-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c Nav, Body \u0438 Sidebar \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442 \u0438\u0445 \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0442\u043e\u043c\u0443, \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e, \u043f\u043e \u043c\u0435\u0441\u0442\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 prop \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0435\u0442\u0435\u0439.<\/p>\n<p>  (\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0414\u044d\u043d\u0443 \u0410\u0431\u0440\u0430\u043c\u043e\u0432\u0443 \u0437\u0430 <a href=\"https:\/\/twitter.com\/dan_abramov\/status\/1021850499618955272\">\u044d\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/a>!)<\/p>\n<pre><code class=\"javascript\">import React from \"react\"; import ReactDOM from \"react-dom\"; import \".\/styles.css\";  const UserAvatar = ({ user, size }) =&gt; (   &lt;img     className={`user-avatar ${size || \"\"}`}     alt=\"user avatar\"     src={user.avatar}   \/&gt; );  const UserStats = ({ user }) =&gt; (   &lt;div className=\"user-stats\"&gt;     &lt;div&gt;       &lt;UserAvatar user={user} \/&gt;       {user.name}     &lt;\/div&gt;     &lt;div className=\"stats\"&gt;       &lt;div&gt;{user.followers} Followers&lt;\/div&gt;       &lt;div&gt;Following {user.following}&lt;\/div&gt;     &lt;\/div&gt;   &lt;\/div&gt; );  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c children \u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043c \u0438\u0445. const Nav = ({ children }) =&gt; (   &lt;div className=\"nav\"&gt;     {children}   &lt;\/div&gt; );  const Content = () =&gt; (   &lt;div className=\"content\"&gt;main content here&lt;\/div&gt; );  const Sidebar = ({ children }) =&gt; (   &lt;div className=\"sidebar\"&gt;     {children}   &lt;\/div&gt; );  \/\/ Body \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c sidebar \u0438 content, \u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044f \u0442\u0430\u043a\u043e\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u0443,  \/\/ \u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c. const Body = ({ sidebar, content }) =&gt; (   &lt;div className=\"body\"&gt;     &lt;Sidebar&gt;{sidebar}&lt;\/Sidebar&gt;     {content}   &lt;\/div&gt; );  class App extends React.Component {   state = {     user: {       avatar:         \"https:\/\/www.gravatar.com\/avatar\/5c3dd2d257ff0e14dbd2583485dbd44b\",       name: \"Dave\",       followers: 1234,       following: 123     }   };    render() {     const { user } = this.state;      return (       &lt;div className=\"app\"&gt;         &lt;Nav&gt;           &lt;UserAvatar user={user} size=\"small\" \/&gt;         &lt;\/Nav&gt;         &lt;Body           sidebar={&lt;UserStats user={user} \/&gt;}           content={&lt;Content \/&gt;}         \/&gt;       &lt;\/div&gt;     );   } }  ReactDOM.render(&lt;App \/&gt;, document.querySelector(\"#root\"));<\/code><\/pre>\n<p>  <a href=\"https:\/\/codesandbox.io\/s\/mj19ywz0oy\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043d\u0430 CodeSandbox<\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0435 (\u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440!), \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0434 children. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0440\u043e\u0441 props \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Redux.<\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 Redux<\/h3>\n<p>  \u042f \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 Redux, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Context, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u0447\u0435\u0442\u043a\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043e \u0440\u0430\u0431\u043e\u0442\u0435 Redux, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 <a href=\"https:\/\/daveceddia.com\/how-does-redux-work\/\">\u043c\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 Redux<\/a> (\u0438\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 <a href=\"https:\/\/www.youtube.com\/watch?v=sX3KeP7v7Kg&amp;feature=youtu.be\">\u0432\u0438\u0434\u0435\u043e<\/a>).<\/p>\n<p>  \u0412\u043e\u0442 \u043d\u0430\u0448\u0435 React-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0435 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Redux. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0430 \u0432 store Redux, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e react-redux connect \u0434\u043b\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 user prop \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043d\u0438\u0445 \u043d\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>  \u042d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0431\u0435\u0434\u0430 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438. \u0412\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 Nav, Body \u0438 Sidebar, \u0438 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 user prop. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0433\u0440\u0430\u044e\u0442 \u0432 \u00ab\u0433\u043e\u0440\u044f\u0447\u0443\u044e \u043a\u0430\u0440\u0442\u043e\u0448\u043a\u0443\u00bb \u0441 props\u2019\u0430\u043c\u0438. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439.<\/p>\n<p>  \u0420\u0435\u0434\u044c\u044e\u0441\u0435\u0440 \u0437\u0434\u0435\u0441\u044c \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442; \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043a\u043e\u0435-\u0447\u0442\u043e \u043e \u0442\u043e\u043c, <a href=\"https:\/\/daveceddia.com\/what-is-a-reducer\/\">\u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0440\u0435\u0434\u044c\u044e\u0441\u0435\u0440\u044b Redux<\/a> \u0438 <a href=\"https:\/\/daveceddia.com\/immutable-updates-react-redux\/\">\u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<pre><code class=\"javascript\">import React from \"react\"; import ReactDOM from \"react-dom\";  \/\/ \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 createStore, connect, and Provider: import { createStore } from \"redux\"; import { connect, Provider } from \"react-redux\";  \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c reducer \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. const initialState = {}; function reducer(state = initialState, action) {   switch (action.type) {     \/\/ \u0412 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 action SET_USER \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c state.        case \"SET_USER\":       return {         ...state,         user: action.user       };     default:       return state;   } }  \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c store \u0441 reducer'\u043e\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430. const store = createStore(reducer);  \/\/ Dispatch'\u0438\u043c action \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431 \u0437\u0430\u0434\u0430\u0442\u044c user. store.dispatch({   type: \"SET_USER\",   user: {     avatar: \"https:\/\/www.gravatar.com\/avatar\/5c3dd2d257ff0e14dbd2583485dbd44b\",     name: \"Dave\",     followers: 1234,     following: 123   } });  \/\/ \u042d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f mapStateToProps, \u043e\u043d\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u043a\u043b\u044e\u0447 \u0438\u0437 state (user)  \/\/ \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u043a\u0430\u043a `user` prop. const mapStateToProps = state =&gt; ({   user: state.user });  \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c UserAvatar \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 connect(), \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442  \/\/`user` \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \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\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 2 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435: \/\/   const UserAvatarAtom = ({ user, size }) =&gt; ( ... ) \/\/   const UserAvatar = connect(mapStateToProps)(UserAvatarAtom); const UserAvatar = connect(mapStateToProps)(({ user, size }) =&gt; (   &lt;img     className={`user-avatar ${size || \"\"}`}     alt=\"user avatar\"     src={user.avatar}   \/&gt; ));  \/\/ \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c UserStats \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 connect(), \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442  \/\/ `user` \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. const UserStats = connect(mapStateToProps)(({ user }) =&gt; (   &lt;div className=\"user-stats\"&gt;     &lt;div&gt;       &lt;UserAvatar \/&gt;       {user.name}     &lt;\/div&gt;     &lt;div className=\"stats\"&gt;       &lt;div&gt;{user.followers} Followers&lt;\/div&gt;       &lt;div&gt;Following {user.following}&lt;\/div&gt;     &lt;\/div&gt;   &lt;\/div&gt; ));  \/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 Nav \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u043d\u0430\u0442\u044c \u043e `user`. const Nav = () =&gt; (   &lt;div className=\"nav\"&gt;     &lt;UserAvatar size=\"small\" \/&gt;   &lt;\/div&gt; );  const Content = () =&gt; (   &lt;div className=\"content\"&gt;main content here&lt;\/div&gt; );  \/\/ \u041a\u0430\u043a \u0438 Sidebar. const Sidebar = () =&gt; (   &lt;div className=\"sidebar\"&gt;     &lt;UserStats \/&gt;   &lt;\/div&gt; );  \/\/ \u041a\u0430\u043a \u0438 Body. const Body = () =&gt; (   &lt;div className=\"body\"&gt;     &lt;Sidebar \/&gt;     &lt;Content \/&gt;   &lt;\/div&gt; );  \/\/ \u0412 App \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0447\u0438\u0441\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439. const App = () =&gt; (   &lt;div className=\"app\"&gt;     &lt;Nav \/&gt;     &lt;Body \/&gt;   &lt;\/div&gt; );  \/\/ \u041e\u0431\u0435\u0440\u043d\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 Provider,  \/\/ \u0442\u0435\u043f\u0435\u0440\u044c \u0443 connect() \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a store. ReactDOM.render(   &lt;Provider store={store}&gt;     &lt;App \/&gt;   &lt;\/Provider&gt;,   document.querySelector(\"#root\") ); <\/code><\/pre>\n<p>  <a href=\"https:\/\/codesandbox.io\/s\/943yr0qp3o\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043d\u0430 CodeSandbox<\/a><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0430\u043c \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a Redux \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u044d\u0442\u043e\u0439 \u043c\u0430\u0433\u0438\u0438. \u0423\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u041a\u0430\u043a React \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 props \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u0430 Redux \u043c\u043e\u0436\u0435\u0442 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<p>  \u041e\u0442\u0432\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Redux \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <i>context <\/i>\u0444\u0443\u043d\u043a\u0446\u0438\u044e React (context feature). \u041d\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 Context API (\u0435\u0449\u0435 \u043d\u0435\u0442), \u0430 \u0441\u0442\u0430\u0440\u044b\u0439. \u0422\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 React \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u0438\u0448\u0435\u0442\u0435 \u0441\u0432\u043e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u043b\u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0435.<\/p>\n<p>  \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u0443\u044e \u0448\u0438\u043d\u0443, \u0438\u0434\u0443\u0449\u0443\u044e \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c: \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c (\u0434\u0430\u043d\u043d\u044b\u0435), \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0435, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f. \u0418 react-redux connect \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c Redux \u2014 \u043b\u0438\u0448\u044c \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0430 \u0430\u0439\u0441\u0431\u0435\u0440\u0433\u0430. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043b\u0438\u0448\u044c \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 <i>\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439 <\/i>\u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 Redux. \u0412\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438:<\/p>\n<p>  <b>connect \u2013 \u0447\u0438\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/b><\/p>\n<p>  connect \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u00ab\u0447\u0438\u0441\u0442\u044b\u043c\u0438\u00bb, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438\u0445 props \u2014 \u0442\u043e\u0435\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u0445 \u0441\u0440\u0435\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f Redux. \u042d\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u0440\u0435-\u0440\u0435\u043d\u0434\u0435\u0440 \u0438 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  <b>\u041b\u0435\u0433\u043a\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Redux<\/b><\/p>\n<p>  \u0426\u0435\u0440\u0435\u043c\u043e\u043d\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f actions \u0438 reducers \u0443\u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e Redux \u0432\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442.<\/p>\n<p>  \u0421 <a href=\"https:\/\/github.com\/zalmoxisus\/redux-devtools-extension\">\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c Redux DevTools<\/a> \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0436\u0443\u0440\u043d\u0430\u043b \u0432\u0441\u0435\u0445 actions, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0432\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c. \u0412 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 actions \u0431\u044b\u043b\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b, \u043a\u0430\u043a\u043e\u0439 \u0443 \u043d\u0438\u0445 payload, \u0438 state \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 action\u2019\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/go\/km\/oi\/gokmoivlzezzfb-wjkhujjyxep8.gif\"><\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Redux DevTools \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e <i>\u00ab\u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438\u00bb<\/i>, \u0442\u043e\u0435\u0441\u0442\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 action, \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e. \u041f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 action <i>\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e <\/i>\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 store, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u044f\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u0432\u0430\u043c \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u0430\u043a <a href=\"https:\/\/logrocket.com\/\">LogRocket<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u0430\u044e\u0442 \u0432\u0430\u043c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 Redux DevTools \u0432 <i>\u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435<\/i> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0432\u0430\u0448\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 bug report? \u041d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u044d\u0442\u0443 \u0441\u0435\u0441\u0441\u0438\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 LogRocket, \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d \u0441\u0434\u0435\u043b\u0430\u043b, \u0438 \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e actions \u0431\u044b\u043b\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b. \u0412\u0441\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u043e\u0442\u043e\u043a action\u2019\u043e\u0432 Redux.<\/p>\n<p>  <b>\u0420\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c Redux \u0441 Middleware<\/b><\/p>\n<p>  Redux \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e middleware (\u043f\u0440\u0438\u0447\u0443\u0434\u043b\u0438\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0435 \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 action\u2019\u0430\u00bb). \u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 middleware \u043d\u0435 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0449\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440\u2026<\/p>\n<ul>\n<li>\u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c API-\u0437\u0430\u043f\u0440\u043e\u0441 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0438\u043c\u044f action\u2019a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 FETCH_? \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e middleware.<\/li>\n<li>\u0425\u043e\u0442\u0438\u0442\u0435 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0432\u0430\u0448\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u041f\u041e? Middleware \u2014 \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e.<\/li>\n<li>\u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a action\u2019a \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438? \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e middleware, \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c action, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0442\u043e\u043a\u0435\u043d JWT, \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0432 localStorage? \u0414\u0430, middleware.<\/li>\n<\/ul>\n<p>  \u0412\u043e\u0442 \u0445\u043e\u0440\u043e\u0448\u0430\u044f <a href=\"https:\/\/medium.com\/@jacobp100\/you-arent-using-redux-middleware-enough-94ffe991e6\">\u0441\u0442\u0430\u0442\u044c\u044f <\/a>\u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c Redux middleware.<\/p>\n<h4>\u041a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c React Context API<\/h4>\n<p>  \u041d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u044d\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u0438 Redux. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u0432\u0441\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u043b\u043e, \u0438\u043b\u0438 \u0432\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u041d\u043e\u0432\u044b\u0439 Context API, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0432\u0430\u043c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u042f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0431\u044b\u0441\u0442\u0440\u044b\u0439 <a href=\"https:\/\/egghead.io\/lessons\/react-pass-props-through-multiple-levels-with-react-s-context-api\">\u0443\u0440\u043e\u043a <\/a>\u043f\u043e Context API \u043d\u0430 Egghead, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c (3:43).<\/p>\n<p>  \u0412\u043e\u0442 3 \u0432\u0430\u0436\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 Context API:<\/p>\n<ul>\n<li>\u0424\u0443\u043d\u043a\u0446\u0438\u044f React.createContext, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 context<\/li>\n<li>Provider (\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f createContext), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u00ab\u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0448\u0438\u043d\u0443\u00bb, <br \/>   \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u0440\u0435\u0432\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432<\/li>\n<li>Consumer (\u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f createContext), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043f\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <br \/>   \u00ab\u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0448\u0438\u043d\u0443\u00bb \u0434\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/li>\n<\/ul>\n<p>  Provider \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 Provider \u0432 React-Redux. \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0441\u0435\u043c, \u0447\u0435\u043c \u0445\u043e\u0442\u0438\u0442\u0435 (\u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0430\u0436\u0435 store Redux\u2026 \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0433\u043b\u0443\u043f\u043e). \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043b\u044e\u0431\u044b\u0435 actions, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  Consumer \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f connect \u0432 React-Redux, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f\u0441\u044c \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u0438 \u0441\u0434\u0435\u043b\u0430\u0432 \u0438\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442.<\/p>\n<p>  \u0412\u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b:<\/p>\n<pre><code class=\"javascript\">\/\/ \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 context \/\/ \u042d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 2 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438: { Provider, Consumer } \/\/ \u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f UpperCase, \u043d\u0435 camelCase \/\/ \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \/\/ \u0430 \u0438\u043c\u0435\u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0443\u043a\u0432\u044b. const UserContext = React.createContext();  \/\/ \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 context, \/\/ \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Consumer.  \/\/ Consumer \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \"render props\". const UserAvatar = ({ size }) =&gt; (   &lt;UserContext.Consumer&gt;     {user =&gt; (       &lt;img         className={`user-avatar ${size || \"\"}`}         alt=\"user avatar\"         src={user.avatar}       \/&gt;     )}   &lt;\/UserContext.Consumer&gt; );  \/\/ \u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443, \u0447\u0442\u043e \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \"user prop\", \/\/ \u0442\u0430\u043a \u043a\u0430\u043a Consumer \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u0438\u0437 context. const UserStats = () =&gt; (   &lt;UserContext.Consumer&gt;     {user =&gt; (       &lt;div className=\"user-stats\"&gt;         &lt;div&gt;           &lt;UserAvatar user={user} \/&gt;           {user.name}         &lt;\/div&gt;         &lt;div className=\"stats\"&gt;           &lt;div&gt;{user.followers} Followers&lt;\/div&gt;           &lt;div&gt;Following {user.following}&lt;\/div&gt;         &lt;\/div&gt;       &lt;\/div&gt;     )}   &lt;\/UserContext.Consumer&gt; );  \/\/ ... \u0437\u0434\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b ... \/\/ ... (\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e `user`).  \/\/ \u0412\u043d\u0443\u0442\u0440\u0438 App \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c context \u0432\u043d\u0438\u0437, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Provider. class App extends React.Component {   state = {     user: {       avatar:         \"https:\/\/www.gravatar.com\/avatar\/5c3dd2d257ff0e14dbd2583485dbd44b\",       name: \"Dave\",       followers: 1234,       following: 123     }   };    render() {     return (       &lt;div className=\"app\"&gt;         &lt;UserContext.Provider value={this.state.user}&gt;           &lt;Nav \/&gt;           &lt;Body \/&gt;         &lt;\/UserContext.Provider&gt;       &lt;\/div&gt;     );   } } <\/code><\/pre>\n<p>  <a href=\"https:\/\/codesandbox.io\/s\/q9w2qrw6q4\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043d\u0430 CodeSandbox<\/a><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c 3 \u0447\u0430\u0441\u0442\u0438: \u0441\u0430\u043c context (\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e React.createContext) \u0438 \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u043d\u0438\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 (Provider \u0438 Consumer).<\/p>\n<p>  <b>Provider \u0438 Consumer \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435<\/b><\/p>\n<p>  Provider \u0438 Consumer \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0438 \u043d\u0435\u043e\u0442\u0434\u0435\u043b\u0438\u043c\u044b. \u041e\u043d\u0438 \u0437\u043d\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e, \u043a\u0430\u043a \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 context, \u0441\u043a\u0430\u0436\u0435\u043c, \u00ab\u0421ontext1\u00bb \u0438 \u00ab\u0421ontext2\u00bb, \u0442\u043e\u0433\u0434\u0430 Provider \u0438 Consumer \u0421ontext1 \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 Provider\u2019\u043e\u043c \u0438 Consumer\u2019\u043e\u043c Context2.<\/p>\n<p>  <b>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 state<\/b><\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e context <i>\u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e state<\/i>. \u042d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043a\u0430\u043d\u0430\u043b \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 Provider, \u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442\u0441\u044f \u0432 \u043b\u044e\u0431\u043e\u0439 Consumer, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u0435\u0433\u043e \u0438\u0441\u043a\u0430\u0442\u044c (Provider, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443, \u0447\u0442\u043e \u0438 Consumer).<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 context, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u00ab\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\u00bb \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">const Ctx = React.createContext(yourDefaultValue); <\/code><\/pre>\n<p>  \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e \u2014 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442 Consumer, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d \u0432 \u0434\u0435\u0440\u0435\u0432\u043e \u0431\u0435\u0437 Provider\u2019a \u043d\u0430\u0434 \u043d\u0438\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u0442\u0435 \u0435\u0433\u043e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 undefined. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044d\u0442\u043e <i>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/i>, \u0430 \u043d\u0435 <i>\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435<\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0421ontext \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442; \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0432 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0435.<\/p>\n<p>  <b>Consumer \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d Render Props<\/b><\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f connect Redux \u044d\u0442\u043e \u2014 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 (\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u043e HoC). \u041e\u043d\u0430 \u043e\u0431\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0432 \u043d\u0435\u0433\u043e props.<\/p>\n<p>  Consumer, \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432, \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439. \u0417\u0430\u0442\u0435\u043c \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0438\u043c \u043e\u0442 Provider\u2019a \u0433\u0434\u0435-\u0442\u043e \u043d\u0430\u0434 \u043d\u0438\u043c (\u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0437 context, \u0438\u043b\u0438 undefined, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e).<\/p>\n<p>  <b>Provider \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/b><\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u0430\u043a prop. \u041d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u043d\u0438\u0437, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432\u043d\u0438\u0437.<\/p>\n<h3>Context API \u0433\u0438\u0431\u043a\u0438\u0439<\/h3>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 (Provider \u0438 Consumer), \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043a\u0430\u043a \u043c\u044b \u0445\u043e\u0442\u0438\u043c. \u0412\u043e\u0442 \u043f\u0430\u0440\u0430 \u0438\u0434\u0435\u0439.<\/p>\n<p>  <b>\u041e\u0431\u0435\u0440\u043d\u0438\u0442\u0435 Consumer \u0432 HOC<\/b><\/p>\n<p>  \u041d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438\u0434\u0435\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f UserContext.Consumer \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u043d\u0435\u043c \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f? \u042d\u0442\u043e \u0432\u0430\u0448 \u043a\u043e\u0434! \u0412\u044b \u0432\u043f\u0440\u0430\u0432\u0435 \u0440\u0435\u0448\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 prop, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u0432\u043e\u043a\u0440\u0443\u0433 Consumer\u2019a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">function withUser(Component) {   return function ConnectedComponent(props) {     return (       &lt;UserContext.Consumer&gt;         {user =&gt; &lt;Component {...props} user={user}\/&gt;}       &lt;\/UserContext.Consumer&gt;     );   } } <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 UserAvatar \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 withUser:<\/p>\n<pre><code class=\"javascript\">const UserAvatar = withUser(({ size, user }) =&gt; (   &lt;img     className={`user-avatar ${size || \"\"}`}     alt=\"user avatar\"     src={user.avatar}   \/&gt; )); <\/code><\/pre>\n<p>  \u0418 \u0432\u0443\u0430\u043b\u044f, context \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a connect Redux\u2019a. \u041c\u0438\u043d\u0443\u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0438\u0441\u0442\u043e\u0442\u0430.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/codesandbox.io\/s\/jpy76nm1v\">CodeSandbox <\/a>\u0441 \u044d\u0442\u0438\u043c HOC.<\/p>\n<p>  <b>\u0414\u0435\u0440\u0436\u0438\u0442\u0435 State \u0432 Provider\u2019e<\/b><\/p>\n<p>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e Provider \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043d\u0430\u043b. \u041e\u043d \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0432\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u044e <i>\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e <\/i>\u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 App, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b Provider + Consumer. \u041d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 store. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442:<\/p>\n<pre><code class=\"javascript\">class UserStore extends React.Component {   state = {     user: {       avatar:         \"https:\/\/www.gravatar.com\/avatar\/5c3dd2d257ff0e14dbd2583485dbd44b\",       name: \"Dave\",       followers: 1234,       following: 123     }   };    render() {     return (       &lt;UserContext.Provider value={this.state.user}&gt;         {this.props.children}       &lt;\/UserContext.Provider&gt;     );   } }  \/\/ ... \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0447\u0430\u0441\u0442\u044c ...  const App = () =&gt; (   &lt;div className=\"app\"&gt;     &lt;Nav \/&gt;     &lt;Body \/&gt;   &lt;\/div&gt; );  ReactDOM.render(   &lt;UserStore&gt;     &lt;App \/&gt;   &lt;\/UserStore&gt;,   document.querySelector(\"#root\") ); <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0435\u043c <i>\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c <\/i>\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435. \u041a\u0440\u0443\u0442\u043e. App \u0441\u043d\u043e\u0432\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0447\u0438\u0441\u0442\u044b\u043c (stateless). \u042f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0447\u0438\u0449\u0435.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/codesandbox.io\/s\/jpy76nm1v\">CodeSandbox <\/a>\u0441 \u044d\u0442\u0438\u043c UserStore.<\/p>\n<p>  <b>\u041f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c actions \u0432\u043d\u0438\u0437 \u0447\u0435\u0440\u0435\u0437 context<\/b><\/p>\n<p>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 Provider, \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430\u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0438\u0445 actions.<\/p>\n<p>  \u0412\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043a\u043e\u043c\u043d\u0430\u0442\u0430 \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430 \u2014 \u043e\u0439, \u044f \u0438\u043c\u0435\u044e \u0432 \u0432\u0438\u0434\u0443 \u0441\u0432\u0435\u0442\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/di\/s4\/r1\/dis4r10ujowkvv5pn9mgx9b6jbs.gif\"><\/p>\n<p>  State \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 store, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u0430. \u041a\u0430\u043a state, \u0442\u0430\u043a \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.<\/p>\n<pre><code class=\"javascript\">import React from \"react\"; import ReactDOM from \"react-dom\"; import \".\/styles.css\";  \/\/ \u041f\u0443\u0441\u0442\u043e\u0439 context. const RoomContext = React.createContext();  \/\/ \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435  \/\/ \u0441\u0432\u0435\u0442\u043e\u043c \u0432 \u043a\u043e\u043c\u043d\u0430\u0442\u0435. class RoomStore extends React.Component {   state = {     isLit: false   };    toggleLight = () =&gt; {     this.setState(state =&gt; ({ isLit: !state.isLit }));   };    render() {     \/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c state \u0438 onToggleLight action     return (       &lt;RoomContext.Provider         value={{           isLit: this.state.isLit,           onToggleLight: this.toggleLight         }}       &gt;         {this.props.children}       &lt;\/RoomContext.Provider&gt;     );   } }  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u0441\u0432\u0435\u0442\u043b\u043e \u043b\u0438 \u0432 \u043a\u043e\u043c\u043d\u0430\u0442\u0435,  \/\/ \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u0430 \u0438\u0437 RoomContext. const Room = () =&gt; (   &lt;RoomContext.Consumer&gt;     {({ isLit, onToggleLight }) =&gt; (       &lt;div className={`room ${isLit ? \"lit\" : \"dark\"}`}&gt;         The room is {isLit ? \"lit\" : \"dark\"}.         &lt;br \/&gt;         &lt;button onClick={onToggleLight}&gt;Flip&lt;\/button&gt;       &lt;\/div&gt;     )}   &lt;\/RoomContext.Consumer&gt; );  const App = () =&gt; (   &lt;div className=\"app\"&gt;     &lt;Room \/&gt;   &lt;\/div&gt; );  \/\/ \u041e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 RoomStore, \/\/ \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435. ReactDOM.render(   &lt;RoomStore&gt;     &lt;App \/&gt;   &lt;\/RoomStore&gt;,   document.querySelector(\"#root\") ); <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 <a href=\"https:\/\/codesandbox.io\/s\/jvky9o0nvw\">CodeSandbox<\/a>.<\/p>\n<p>  <b>\u0422\u0430\u043a \u0432\u0441\u0435-\u0442\u0430\u043a\u0438, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, Context \u0438\u043b\u0438 Redux?<\/b><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u043e\u0431\u0430 \u043f\u0443\u0442\u0438 \u2014 \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c? \u042f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u043e \u044f \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u2014 \u00ab\u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0441\u00bb.<\/p>\n<p>  \u042d\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u043b\u0438\u043a\u043e \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u043b\u0438 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u044e\u0434\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u043d\u0438\u043c \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430? \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u044b\u0442\u043d\u044b \u0432\u044b \u0438\u043b\u0438 \u0432\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f Redux (\u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0447\u0438\u0441\u0442\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438).<\/p>\n<p>  \u041f\u0430\u0433\u0443\u0431\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043f\u0440\u043e\u043d\u0438\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0432\u0441\u044e \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443 JavaScript, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u044f <i>\u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438<\/i>. \u0415\u0441\u0442\u044c \u0438\u0434\u0435\u044f, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u2014 \u0438\u0433\u0440\u0430 \u0441 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0443\u043c\u043c\u043e\u0439: \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 <i>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <\/i>A, \u0432\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u0430 <i>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <\/i>\u0411. \u0427\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043d\u043e\u0432\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0435\u043c-\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0442\u0435\u0441\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e. \u0427\u0442\u043e \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u043b\u0438 \/ \u0438\u043b\u0438, \u0447\u0442\u043e \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043b\u0438\u0431\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0435 \u043d\u043e\u0432\u043e\u0435 \u0438 \u043b\u0443\u0447\u0448\u0435\u0435, \u043b\u0438\u0431\u043e \u0431\u044b\u0442\u044c \u043e\u0442\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u043c \u043d\u0430 \u0437\u0430\u0434\u043d\u0438\u0439 \u043f\u043b\u0430\u043d \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e.<\/p>\n<p>  \u041b\u0443\u0447\u0448\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u2014 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u042d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0442\u0432\u0435\u0440\u0442\u043a\u0438 \u0438\u043b\u0438 \u043c\u043e\u0449\u043d\u043e\u0433\u043e \u0448\u0443\u0440\u0443\u043f\u043e\u0432\u0435\u0440\u0442\u0430. \u0414\u043b\u044f 80% \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0448\u0443\u0440\u0443\u043f\u043e\u0432\u0435\u0440\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043b\u0435\u0433\u0447\u0435 \u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043e\u0442\u0432\u0435\u0440\u0442\u043a\u0430. \u041d\u043e \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 20% \u043e\u0442\u0432\u0435\u0440\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c (\u043c\u0430\u043b\u043e \u043c\u0435\u0441\u0442\u0430, \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0442\u043e\u043d\u043a\u0438\u0439). \u041a\u043e\u0433\u0434\u0430 \u044f \u043a\u0443\u043f\u0438\u043b \u0448\u0443\u0440\u0443\u043f\u043e\u0432\u0435\u0440\u0442, \u044f \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u043b \u043e\u0442\u0432\u0435\u0440\u0442\u043a\u0443, \u043e\u043d \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u0435\u0435, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0430\u043b \u043c\u043d\u0435 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0414\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.<\/p>\n<p>  Context \u043d\u0435 \u00ab\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u00bb Redux, \u043d\u0435 \u0431\u043e\u043b\u0435\u0435, \u0447\u0435\u043c React \u00ab\u0437\u0430\u043c\u0435\u043d\u0438\u043b\u00bb Angular \u0438\u043b\u0438 jQuery. \u0427\u0435\u0440\u0442, \u044f \u0432\u0441\u0435 \u0435\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e jQuery, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e. \u042f \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b EJS \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 React. \u0418\u043d\u043e\u0433\u0434\u0430 React \u2014 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 Redux.<\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0435\u0441\u043b\u0438 Redux \u2014 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c context.<\/p>\n<p>  \u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 React \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u044f\u0436\u0435\u043b\u044b\u043c \u2014 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432!<\/p>\n<p>  \u041c\u043e\u0439 \u0441\u043e\u0432\u0435\u0442? \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u0441\u0435 \ud83d\ude42<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u043c\u043e\u044e \u043a\u043d\u0438\u0433\u0443 <a href=\"https:\/\/daveceddia.com\/pure-react\/?utm_campaign=after-post\">\u00abPure React\u00bb<\/a>.<\/div>\n<p>        <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \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\/post\/419449\/\"> https:\/\/habr.com\/post\/419449\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div data-io-article-url=\"https:\/\/habr.com\/post\/419449\/\" class=\"post__text post__text-html js-mediator-article\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/fg\/fp\/ik\/fgfpikxzusi8yqxz5vioyhdjgxm.png\"><\/p>\n<p>  \u0412 React 16.3 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 Context API. <i>\u041d\u043e\u0432\u044b\u0439 <\/i>\u0432 \u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u0447\u0442\u043e <i>\u0441\u0442\u0430\u0440\u044b\u0439 <\/i>Context API \u0431\u044b\u043b \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u044e\u0434\u0435\u0439 \u043b\u0438\u0431\u043e \u043d\u0435 \u0437\u043d\u0430\u043b\u0438 \u043e \u0435\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438, \u043b\u0438\u0431\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b\u0430 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c Context API \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e React, \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u0440\u0430\u043d\u044c\u0448\u0435, \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e).  <\/p>\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-287600","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/287600","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=287600"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/287600\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=287600"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=287600"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=287600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}