{"componentChunkName":"component---src-templates-docs-js","path":"/docs/codebase-overview.html","result":{"data":{"markdownRemark":{"html":"<p>В этой главе вы узнаете об устройстве кодовой базы React, используемых соглашениях и реализации.</p>\n<p>Если вы хотите <a href=\"/docs/how-to-contribute.html\">внести свой вклад в React</a>, то мы надеемся, что эта глава вам поможет.</p>\n<p>Мы считаем, что вам не обязательно следовать этим соглашениям в ваших React-приложениях. Многие из этих соглашений существуют по историческим причинам и могут быть изменены со временем.</p>\n<h3 id=\"top-level-folders\"><a href=\"#top-level-folders\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Top-Level Folders </h3>\n<p>После клонирования <a href=\"https://github.com/facebook/react\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">репозитория React</a> вы увидите папки верхнего уровня:</p>\n<ul>\n<li><a href=\"https://github.com/facebook/react/tree/master/packages\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">packages</code></a> содержит метаданные (такие как <code class=\"gatsby-code-text\">package.json</code>) и исходный код (подпапка <code class=\"gatsby-code-text\">src</code>) для каждого пакета из репозитория React. <strong>Большая часть работы с кодом происходит в подпапках <code class=\"gatsby-code-text\">src</code> внутри каждого пакета.</strong></li>\n<li><a href=\"https://github.com/facebook/react/tree/master/fixtures\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">fixtures</code></a> содержит несколько небольших React-приложений для контрибьютеров.</li>\n<li><code class=\"gatsby-code-text\">build</code> содержит скомпилированную версию React. Этого каталога нет в репозитории, но он появится после того, как вы <a href=\"/docs/how-to-contribute.html#development-workflow\">соберёте проект</a> в первый раз.</li>\n</ul>\n<p>Документация расположена в <a href=\"https://github.com/reactjs/reactjs.org\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">отдельном репозитории</a>.</p>\n<p>Существуют ещё несколько вспомогательных верхнеуровневых папок. Но вы, вероятно, не столкнётесь с ними при изменении кода.</p>\n<h3 id=\"colocated-tests\"><a href=\"#colocated-tests\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Тесты </h3>\n<p>У нас нет отдельной верхнеуровневой папки с юнит тестами. Вместо этого, мы помещаем их в папку <code class=\"gatsby-code-text\">__tests__</code>, расположенную рядом с тестируемыми файлами.</p>\n<p>Например, тесты для <a href=\"https://github.com/facebook/react/blob/87724bd87506325fcaf2648c70fc1f43411a87be/src/renderers/dom/client/utils/setInnerHTML.js\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">setInnerHTML.js</code></a> расположены в <a href=\"https://github.com/facebook/react/blob/87724bd87506325fcaf2648c70fc1f43411a87be/src/renderers/dom/client/utils/__tests__/setInnerHTML-test.js\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">__tests__/setInnerHTML-test.js</code></a>.</p>\n<h3 id=\"warnings-and-invariants\"><a href=\"#warnings-and-invariants\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Предупреждения и инварианты </h3>\n<p>Предупреждения в React выводятся через <code class=\"gatsby-code-text\">console.error</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>__DEV__<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Что-то не так.'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Предупреждения включены только в режиме разработки и полностью вырезаны из продакшена. Если вам необходимо запретить выполнение какого-либо кода, тогда используйте модуль <code class=\"gatsby-code-text\">invariant</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">var</span> invariant <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'invariant'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">invariant</span><span class=\"token punctuation\">(</span>\n  <span class=\"token number\">2</span> <span class=\"token operator\">+</span> <span class=\"token number\">2</span> <span class=\"token operator\">===</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">'Ты не пройдёшь!'</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>Если условие внутри <code class=\"gatsby-code-text\">invariant</code> равно <code class=\"gatsby-code-text\">false</code>, тогда выбрасывается исключение.</strong></p>\n<p>«Инварианты» — это всего лишь способ сказать: «Условие всегда истинно». Вы можете думать о них как об утверждениях (assertion).</p>\n<p>Важно чтобы режимы разработки и продакшена имели похожее поведение, поэтому исключения выбрасываются в обоих режимах. Сообщения об ошибках в продакшене автоматически заменяются кодами ошибок, для того, чтобы избежать разрастания бандла.</p>\n<h3 id=\"development-and-production\"><a href=\"#development-and-production\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Режимы разработки и продакшена </h3>\n<p>Вы можете использовать псевдоглобальную переменную <code class=\"gatsby-code-text\">__DEV__</code>, чтобы блок кода присутствовал только в режиме разработки.</p>\n<p>На этапе компиляции добавится проверка <code class=\"gatsby-code-text\">process.env.NODE_ENV !== &#39;production&#39;</code>, определяющая, должен ли данный блок кода присутствовать в сборке CommonJS.</p>\n<p>Выражение будет равно <code class=\"gatsby-code-text\">true</code> в неминифицированной сборке, а в минифицированной будет вырезан весь блок вместе с <code class=\"gatsby-code-text\">if</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>__DEV__<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Этот код будет выполнен только в режиме разработки.</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"flow\"><a href=\"#flow\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Flow </h3>\n<p>Недавно мы представили статический анализатор <a href=\"https://flow.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow</a>. Файлы, помеченные аннотацией <code class=\"gatsby-code-text\">@flow</code> в заголовке после лицензии, будут подвергнуты проверке типов.</p>\n<p>Мы принимаем пулл реквесты <a href=\"https://github.com/facebook/react/pull/7600/files\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">на дополнение аннотаций Flow в уже существующий код</a>. Вот пример кода:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">ReactRef<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">detachRefs</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>\n  <span class=\"token parameter\">instance<span class=\"token operator\">:</span> ReactInstance<span class=\"token punctuation\">,</span>\n  element<span class=\"token operator\">:</span> ReactElement <span class=\"token operator\">|</span> string <span class=\"token operator\">|</span> number <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span> <span class=\"token operator\">|</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span></span>\n<span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token keyword\">void</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Новый код, если это возможно, должен использовать Flow. Вы можете выполнить <code class=\"gatsby-code-text\">yarn</code> <code class=\"gatsby-code-text\">flow</code>, чтобы произвести проверку типов.</p>\n<h3 id=\"multiple-packages\"><a href=\"#multiple-packages\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Множество пакетов </h3>\n<p>React является <a href=\"https://danluu.com/monorepo/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">монолитным репозиторием</a>. Он содержит множество отдельных пакетов, чтобы изменения были согласованными, а проблемы решались в одном месте.</p>\n<h3 id=\"react-core\"><a href=\"#react-core\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Ядро React </h3>\n<p>Ядро включает в себя весь <a href=\"/docs/top-level-api.html#react\">верхнеуровневый API</a>, например:</p>\n<ul>\n<li><code class=\"gatsby-code-text\">React.createElement()</code></li>\n<li><code class=\"gatsby-code-text\">React.Component</code></li>\n<li><code class=\"gatsby-code-text\">React.Children</code></li>\n</ul>\n<p><strong>Ядро включает в себя только API необходимый для объявления компонентов.</strong> Оно не включает <a href=\"/docs/reconciliation.html\">алгоритм согласования</a> или какой-либо платформо-специфический код. Этот код находится в компонентах React DOM и React Native.</p>\n<p>Код ядра расположен в папке <a href=\"https://github.com/facebook/react/tree/master/packages/react\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">packages/react</code></a>. Он доступен в npm в виде пакета <a href=\"https://www.npmjs.com/package/react\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">react</code></a>. Соответствующая сборка для браузера экспортирует глобальную переменную <code class=\"gatsby-code-text\">React</code> и называется <code class=\"gatsby-code-text\">react.js</code>.</p>\n<h3 id=\"renderers\"><a href=\"#renderers\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Рендереры </h3>\n<p>Изначально React создавался для DOM, но позже был адаптирован к другим платформам, таким как <a href=\"https://reactnative.dev/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">React Native</a>. В этом разделе мы расскажем об используемых рендерерах.</p>\n<p><strong>Рендереры превращают React дерево в платформо-специфический код.</strong></p>\n<p>Они расположены в каталоге <a href=\"https://github.com/facebook/react/tree/master/packages/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">packages/</code></a>:</p>\n<ul>\n<li><a href=\"https://github.com/facebook/react/tree/master/packages/react-dom\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">React DOM Renderer</a> рендерит React-компоненты в DOM. Он реализует <a href=\"/docs/react-dom.html\"><code class=\"gatsby-code-text\">ReactDOM</code> API</a> и доступен как пакет <a href=\"https://www.npmjs.com/package/react-dom\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">react-dom</code></a> из npm репозитория. Можно подключать как отдельный бандл <code class=\"gatsby-code-text\">react-dom.js</code>, экспортирующий глобальную переменную <code class=\"gatsby-code-text\">ReactDOM</code>.</li>\n<li><a href=\"https://github.com/facebook/react/tree/master/packages/react-native-renderer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">React Native Renderer</a> рендерит React компоненты в нативные представления. Используется внутри React Native.</li>\n<li><a href=\"https://github.com/facebook/react/tree/master/packages/react-test-renderer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">React Test Renderer</a> рендерит React компоненты в JSON-дерево. Используется при <a href=\"https://facebook.github.io/jest/blog/2016/07/27/jest-14.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">тестировании снимками</a> через фреймворк <a href=\"https://facebook.github.io/jest\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Jest</a> и доступен как пакет <a href=\"https://www.npmjs.com/package/react-test-renderer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">react-test-renderer</a> в npm.</li>\n</ul>\n<p>Мы начали поддерживать единственный неофициальный рендерер <a href=\"https://github.com/facebook/react/tree/master/packages/react-art\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">react-art</code></a>, который раньше находился в отдельном <a href=\"https://github.com/reactjs/react-art\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub-репозитории</a>.</p>\n<blockquote>\n<p><strong>Примечание:</strong></p>\n<p>Технически <a href=\"https://github.com/facebook/react/tree/master/packages/react-native-renderer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">react-native-renderer</code></a> — это очень тонкий слой, который учит React взаимодействовать с React Native. Платформо-специфический код, управляющий нативными представлениями, расположен в <a href=\"https://github.com/facebook/react-native\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">репозитории React Native</a> вместе с его компонентами.</p>\n</blockquote>\n<h3 id=\"reconcilers\"><a href=\"#reconcilers\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Согласователи </h3>\n<p>Даже очень непохожим рендерерам, таким как React DOM и React Native, необходимо разделять много логики. В частности, реализации <a href=\"/docs/reconciliation.html\">алгоритма согласования</a> должны быть настолько похожими, чтобы декларативный рендеринг, пользовательские компоненты, состояние, методы жизненного цикла и рефы работали одинаково между различными платформами.</p>\n<p>В качестве решения, различные рендереры имеют между собой общий код. В React мы называем эту часть «согласователь». Когда запланировано такое обновление, как <code class=\"gatsby-code-text\">setState()</code>, согласователь вызывает <code class=\"gatsby-code-text\">render()</code> в дереве компонентов и монтирует, обновляет либо размонтирует их.</p>\n<p>Согласователи не являются отдельнымы пакетами, потому что не имеют открытого API. Вместо этого они используются исключительно такими рендерерами как React DOM и React Native.</p>\n<h3 id=\"stack-reconciler\"><a href=\"#stack-reconciler\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Согласователь Stack </h3>\n<p>Согласователь «Stack» — это реализация, которая использовалась в React 15 и более ранних версиях. Мы перестали его использовать, но задокументировали в <a href=\"/docs/implementation-notes.html\">следующией главе</a>.</p>\n<h3 id=\"fiber-reconciler\"><a href=\"#fiber-reconciler\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Согласователь Fiber </h3>\n<p>В согласователе «Fiber» мы пытаемся исправить давно существующие ошибки и решить проблемы, появившиеся в согласователе Stack.</p>\n<p>Его основными целями являются:</p>\n<ul>\n<li>Разделение прерываемых задач на подзадачи.</li>\n<li>Дать задачам приоритеты, иметь возможность перемещать их и переиспользовать.</li>\n<li>Иметь возможность перемещаться вперёд и назад между родителями и детьми в разметке React.</li>\n<li>Иметь возможность возвращать множество элементов из метода <code class=\"gatsby-code-text\">render()</code>.</li>\n<li>Улучшенная обработка ошибок.</li>\n</ul>\n<p>Вы можете узнать больше об архитектуре React Fiber <a href=\"https://github.com/acdlite/react-fiber-architecture\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">здесь</a> и <a href=\"https://blog.ag-grid.com/inside-fiber-an-in-depth-overview-of-the-new-reconciliation-algorithm-in-react\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">здесь</a>. Несмотря на то, что он включён в React 16, асинхронная функциональность по умолчанию не включена.</p>\n<p>Исходный код расположен в папке <a href=\"https://github.com/facebook/react/tree/master/packages/react-reconciler\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">packages/react-reconciler</code></a>.</p>\n<h3 id=\"event-system\"><a href=\"#event-system\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Система событий </h3>\n<p>Для большей кроссбраузерной совместимости в React реализован слой, инкапсулирующий работу с нативными событиями. Его исходный код расположен в каталоге <a href=\"https://github.com/facebook/react/tree/master/packages/react-dom/src/events\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">packages/react-dom/src/events</code></a>.</p>\n<h3 id=\"what-next\"><a href=\"#what-next\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Что дальше? </h3>\n<p>В <a href=\"/docs/implementation-notes.html\">следующей главе</a> вы познакомитесь с реализацией согласователя (версий React 15 и ранее) более подробно. Для нового согласователя мы ещё не писали документацию.</p>","frontmatter":{"title":"Устройство кодовой базы","next":"implementation-notes.html","prev":"how-to-contribute.html"},"fields":{"path":"content/docs/codebase-overview.md","slug":"docs/codebase-overview.html"}}},"pageContext":{"slug":"docs/codebase-overview.html"}},"staticQueryHashes":[]}