{"componentChunkName":"component---src-templates-docs-js","path":"/docs/add-react-to-a-website.html","result":{"data":{"markdownRemark":{"html":"<p>Используйте React в том объёме, в котором вам хочется.</p>\n<p>Для внедрения React не надо ничего переписывать. <strong>Его можно использовать как для маленькой кнопки, так и для целого приложения.</strong> Возможно, вы захотите немного «оживить» вашу страницу. React-компоненты подходят для этого как нельзя лучше.</p>\n<p>Большинство сайтов в Интернете является обычными HTML-страницами. Даже если ваш сайт не относится к одностраничным приложениям, вы можете добавить на него React, написав <strong>всего несколько строк кода без каких-либо инструментов сборки</strong>. В зависимости от целей, можно постепенно перенести на React весь сайт или переписать всего несколько виджетов.</p>\n<hr>\n<ul>\n<li><a href=\"#add-react-in-one-minute\">Добавляем React за одну минуту</a></li>\n<li><a href=\"#optional-try-react-with-jsx\">Необязательно: Используем React с JSX</a> (без каких-либо бандлеров!)</li>\n</ul>\n<h2 id=\"add-react-in-one-minute\"><a href=\"#add-react-in-one-minute\" 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 за одну минуту </h2>\n<p>В этом разделе вы научитесь добавлять React на существующую HTML-страницу. Вы можете практиковаться на своём собственном сайте или создать для этого пустой HTML файл.</p>\n<p>Мы не будем пользоваться сложными инструментами сборки или что-то устанавливать. <strong>Всё, что вам нужно — это доступ к Интернету и минута свободного времени</strong>.</p>\n<p>Необязательно: <a href=\"https://gist.github.com/gaearon/6668a1f6986742109c00a581ce704605/archive/f6c882b6ae18bde42dcf6fdb751aae93495a2275.zip\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">скачать готовый пример (архив 2 Кбайт)</a></p>\n<h3 id=\"step-1-add-a-dom-container-to-the-html\"><a href=\"#step-1-add-a-dom-container-to-the-html\" 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>Шаг 1: Добавляем DOM-контейнер в HTML </h3>\n<p>Для начала, откройте HTML файл страницы, которую хотите отредактировать. Добавьте пустой тег <code class=\"gatsby-code-text\">&lt;div&gt;</code> в месте, где вы хотите отобразить что-нибудь с помощью React. Например:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"html\"><pre class=\"gatsby-code-html\"><code class=\"gatsby-code-html\"><span class=\"token comment\">&lt;!-- ... остальной HTML ... --></span>\n\n<span class=\"gatsby-highlight-code-line\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>like_button_container<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></span>\n<span class=\"token comment\">&lt;!-- ... остальной HTML ... --></span></code></pre></div>\n<p>Затем назначьте созданному <code class=\"gatsby-code-text\">&lt;div&gt;</code> уникальный атрибут <code class=\"gatsby-code-text\">id</code>. Это позволит впоследствии найти тег из JavaScript кода и отобразить React-компоненты внутри него.</p>\n<blockquote>\n<p>Совет</p>\n<p>«Контейнер» <code class=\"gatsby-code-text\">&lt;div&gt;</code> можно поместить <strong>где угодно</strong> внутри тега <code class=\"gatsby-code-text\">&lt;body&gt;</code>. Вы можете создать любое количество независимых DOM-контейнеров на одной странице. Эти контейнеры принято оставлять пустыми, так как React в любом случае заменяет всё их содержимое.</p>\n</blockquote>\n<h3 id=\"step-2-add-the-script-tags\"><a href=\"#step-2-add-the-script-tags\" 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>Шаг 2: Добавляем script-теги </h3>\n<p>Теперь добавьте три <code class=\"gatsby-code-text\">&lt;script&gt;</code>-тега перед закрывающим тегом <code class=\"gatsby-code-text\">&lt;/body&gt;</code>:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"html\"><pre class=\"gatsby-code-html\"><code class=\"gatsby-code-html\">  <span class=\"token comment\">&lt;!-- ... остальной HTML ... --></span>\n\n  <span class=\"token comment\">&lt;!-- Загрузим React. --></span>\n  <span class=\"token comment\">&lt;!-- Примечание: для деплоя на продакшен замените окончание «development.js» на «production.min.js». --></span>\n<span class=\"gatsby-highlight-code-line\">  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://unpkg.com/react@16/umd/react.development.js<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">crossorigin</span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://unpkg.com/react-dom@16/umd/react-dom.development.js<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">crossorigin</span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></span>\n  <span class=\"token comment\">&lt;!-- Загрузим наш React-компонент. --></span>\n<span class=\"gatsby-highlight-code-line\">  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>like_button.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>Первые два тега загружают React. Третий тег загружает код вашего собственного компонента.</p>\n<h3 id=\"step-3-create-a-react-component\"><a href=\"#step-3-create-a-react-component\" 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>Шаг 3: Создаём React-компонент </h3>\n<p>Создайте файл с именем <code class=\"gatsby-code-text\">like_button.js</code> рядом с вашим HTML файлом.</p>\n<p>Возьмите <strong><a href=\"https://gist.github.com/gaearon/0b180827c190fe4fd98b4c7f570ea4a8/raw/b9157ce933c79a4559d2aa9ff3372668cce48de7/LikeButton.js\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">этот стартовый код</a></strong> и вставьте его в созданный ранее файл.</p>\n<blockquote>\n<p>Совет</p>\n<p>В данном коде создаётся React-компонент с именем <code class=\"gatsby-code-text\">LikeButton</code>. Не беспокойтесь, если что-то кажется вам непонятным — мы подробно разберём принципы разработки на React позже, в нашем <a href=\"/tutorial/tutorial.html\">практическом руководстве</a> и во <a href=\"/docs/hello-world.html\">введении в основные понятия</a>. Пока же мы просто посмотрим, как это выглядит на экране.</p>\n</blockquote>\n<p>Добавьте ещё 2 строки в конец файла <code class=\"gatsby-code-text\">like_button.js</code>, после <strong><a href=\"https://gist.github.com/gaearon/0b180827c190fe4fd98b4c7f570ea4a8/raw/b9157ce933c79a4559d2aa9ff3372668cce48de7/LikeButton.js\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">стартового кода</a></strong>:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// ... стартовый код ...</span>\n\n<span class=\"gatsby-highlight-code-line\"><span class=\"token keyword\">const</span> domContainer <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'#like_button_container'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span><span class=\"gatsby-highlight-code-line\">ReactDOM<span class=\"token punctuation\">.</span><span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token function\">e</span><span class=\"token punctuation\">(</span>LikeButton<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> domContainer<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span></code></pre></div>\n<p>Этот код ищет контейнер <code class=\"gatsby-code-text\">&lt;div&gt;</code>, который мы добавили на первом шаге, а затем отображает наш React-компонент с кнопкой «Нравится» внутри него.</p>\n<h3 id=\"thats-it\"><a href=\"#thats-it\" 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>Вот и всё! <strong>Вы только что добавили свой первый React-компонент на страницу.</strong></p>\n<p>Перейдите к следующим разделам, если хотите узнать о других способах добавить React.</p>\n<p><strong><a href=\"https://gist.github.com/gaearon/6668a1f6986742109c00a581ce704605\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Посмотреть финальный код примера</a></strong></p>\n<p><strong><a href=\"https://gist.github.com/gaearon/6668a1f6986742109c00a581ce704605/archive/f6c882b6ae18bde42dcf6fdb751aae93495a2275.zip\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Скачать код примера (архив 2 Кбайт)</a></strong></p>\n<h3 id=\"tip-reuse-a-component\"><a href=\"#tip-reuse-a-component\" 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-компонент в нескольких местах одной и той же HTML-страницы. Вот как можно показать сразу три кнопки «Нравится» с разными данными:</p>\n<p><a href=\"https://gist.github.com/gaearon/faa67b76a6c47adbab04f739cba7ceda\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Посмотреть исходный код примера</a></p>\n<p><a href=\"https://gist.github.com/gaearon/faa67b76a6c47adbab04f739cba7ceda/archive/9d0dd0ee941fea05fd1357502e5aa348abb84c12.zip\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Скачать код примера (архив 2 Кбайт)</a></p>\n<blockquote>\n<p>Примечание</p>\n<p>Этот способ лучше всего подходит для страниц, содержащих несколько изолированных участков кода, написанных на React. Внутри чистого React-кода проще использовать <a href=\"/docs/components-and-props.html#composing-components\">композицию компонентов</a>.</p>\n</blockquote>\n<h3 id=\"tip-minify-javascript-for-production\"><a href=\"#tip-minify-javascript-for-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>Совет: Минификация JavaScript для продакшена </h3>\n<p>Публикуя ваш сайт на продакшен, имейте в виду, что несжатый JavaScript значительно замедляет страницу для ваших пользователей.</p>\n<p>Если вы уже минифицируете свои скрипты, то не забудьте подготовить к продакшену сам React. Для этого поменяйте окончания ссылок на React на <code class=\"gatsby-code-text\">production.min.js</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://unpkg.com/react@16/umd/react.production.min.js<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">crossorigin</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://unpkg.com/react-dom@16/umd/react-dom.production.min.js<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">crossorigin</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>Если же вы не настроили минификацию для ваших скриптов, то <a href=\"https://gist.github.com/gaearon/42a2ffa41b8319948f9be4076286e1f3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">вот один из вариантов, как это сделать</a>.</p>\n<h2 id=\"optional-try-react-with-jsx\"><a href=\"#optional-try-react-with-jsx\" 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 с JSX </h2>\n<p>В предыдущих примерах мы не выходили за рамки обычных браузерных возможностей. В частности, мы указываем, что React должен выводить на экран, просто вызывая JavaScript-функцию:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">const</span> e <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span>createElement<span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Отобразить &lt;button> с текстом «Нравится»</span>\n<span class=\"token keyword\">return</span> <span class=\"token function\">e</span><span class=\"token punctuation\">(</span>\n  <span class=\"token string\">'button'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span> <span class=\"token function-variable function\">onClick</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> liked<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">}</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>Однако, React позволяет использовать специальный синтаксис, называющийся <a href=\"/docs/introducing-jsx.html\">JSX</a>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// Отобразить &lt;button> с текстом «Нравится»</span>\n<span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onClick</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> liked<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n    Нравится\n  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Эти два примера делают одно и то же. Несмотря на то, что <strong>JSX является <a href=\"/docs/react-without-jsx.html\">совершенно необязательным</a></strong>, многие разработчики считают его удобным для разработки UI — как с React, так и с другими библиотеками.</p>\n<p>Вы можете попробовать JSX в <a href=\"https://babeljs.io/en/repl#?babili=false&#x26;browsers=&#x26;build=&#x26;builtIns=false&#x26;spec=false&#x26;loose=false&#x26;code_lz=DwIwrgLhD2B2AEcDCAbAlgYwNYF4DeAFAJTw4B88EAFmgM4B0tAphAMoQCGETBe86WJgBMAXJQBOYJvAC-RGWQBQ8FfAAyaQYuAB6cFDhkgA&#x26;debug=false&#x26;forceAllTransforms=false&#x26;shippedProposals=false&#x26;circleciRepo=&#x26;evaluate=false&#x26;fileSize=false&#x26;timeTravel=false&#x26;sourceType=module&#x26;lineWrap=true&#x26;presets=es2015%2Creact%2Cstage-2&#x26;prettier=false&#x26;targets=&#x26;version=7.4.3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">этом онлайн-конвертере</a>.</p>\n<h3 id=\"quickly-try-jsx\"><a href=\"#quickly-try-jsx\" 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>Быстрый старт с JSX </h3>\n<p>Чтобы быстро попробовать JSX, добавьте такой <code class=\"gatsby-code-text\">&lt;script&gt;</code>-тег на страницу:</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"gatsby-code-html\"><code class=\"gatsby-code-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://unpkg.com/babel-standalone@6/babel.min.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>Теперь синтаксис JSX доступен внутри каждого <code class=\"gatsby-code-text\">&lt;script&gt;</code>-тега, у которого есть атрибут <code class=\"gatsby-code-text\">type=&quot;text/babel&quot;</code>. Скачайте <a href=\"https://raw.githubusercontent.com/reactjs/reactjs.org/master/static/html/single-file-example.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">пример HTML-кода с JSX</a>, чтобы поэкспериментировать.</p>\n<p>Такой подход удобен для обучения или создания быстрых демо, но следует помнить, что работа сайта при этом сильно замедляется. Поэтому для продакшена JSX лучше добавить по-другому. Если вам интересно попробовать, удалите добавленный ранее <code class=\"gatsby-code-text\">&lt;script&gt;</code>-тег и все атрибуты <code class=\"gatsby-code-text\">type=&quot;text/babel&quot;</code>. Вместо них мы будем пользоваться препроцессором JSX, который автоматически трансформирует весь код внутри <code class=\"gatsby-code-text\">&lt;script&gt;</code>-тегов.</p>\n<h3 id=\"add-jsx-to-a-project\"><a href=\"#add-jsx-to-a-project\" 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>Добавляем JSX в проект </h3>\n<p>JSX можно добавить в существующий проект и без разных сложных инструментов вроде бандлера или сервера для разработки. По сути, <strong>добавление JSX напоминает добавление препроцессора CSS</strong>. Необходимо лишь убедиться, что на вашем компьютере установлен <a href=\"https://nodejs.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Node.js</a>.</p>\n<p>С помощью терминала перейдите в директорию вашего проекта и запустите следующие команды:</p>\n<ol>\n<li><strong>Шаг 1:</strong> Запустите команду <code class=\"gatsby-code-text\">npm init -y</code> (если появляются ошибки, попробуйте <a href=\"https://gist.github.com/gaearon/246f6380610e262f8a648e3e51cad40d\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">этот способ</a>)</li>\n<li><strong>Шаг 2:</strong> Запустите команду <code class=\"gatsby-code-text\">npm install babel-cli@6 babel-preset-react-app@3</code></li>\n</ol>\n<blockquote>\n<p>Совет</p>\n<p><strong>Мы используем npm только для установки препроцессора JSX.</strong> React и код приложения всё ещё остаются в <code class=\"gatsby-code-text\">&lt;script&gt;</code>-тегах.</p>\n</blockquote>\n<p>Поздравляем! Вы только что добавили в ваш проект <strong>поддержку JSX, готовую к продакшену</strong>.</p>\n<h3 id=\"run-jsx-preprocessor\"><a href=\"#run-jsx-preprocessor\" 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>Запускаем препроцессор JSX </h3>\n<p>Создайте директорию с названием <code class=\"gatsby-code-text\">src</code> и наберите в терминале следующую команду:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"gatsby-code-text\"><code class=\"gatsby-code-text\">npx babel --watch src --out-dir . --presets react-app/prod </code></pre></div>\n<blockquote>\n<p>Примечание</p>\n<p><code class=\"gatsby-code-text\">npx</code> не является опечаткой. Это <a href=\"https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">инструмент запуска пакетов, появившийся в npm версии 5.2+</a>.</p>\n<p>Если у вас появляется сообщение об ошибке, похожее на «You have mistakenly installed the <code class=\"gatsby-code-text\">babel</code> package», то это означает, что вам нужно пройти <a href=\"#add-jsx-to-a-project\">предыдущий шаг</a>, а затем повторить запуск команды.</p>\n</blockquote>\n<p>Дожидаться завершения работы команды не нужно — она работает в режиме наблюдения за изменениями в JSX-коде.</p>\n<p>Попробуйте создать файл с названием <code class=\"gatsby-code-text\">src/like_button.js</code> и вставить в него <strong><a href=\"https://gist.github.com/gaearon/c8e112dc74ac44aac4f673f2c39d19d1/raw/09b951c86c1bf1116af741fa4664511f2f179f0a/like_button.js\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">этот стартовый JSX-код</a></strong>. Препроцессор автоматически трансформирует новый код в чистый JavaScript, пригодный для выполнения в браузере, и сохранит его в новый файл <code class=\"gatsby-code-text\">like_button.js</code>. При редактировании JSX-кода в существующих файлах трансформация также происходит автоматически.</p>\n<p>Кроме препроцессинга JSX, вы в качестве бонуса получаете синтаксические новинки JavaScript, такие как классы, без головной боли с их браузерной поддержкой. Всё это доступно благодаря использованию инструмента под названием Babel, информацию о котором вы можете узнать из <a href=\"https://babeljs.io/docs/en/babel-cli/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">его документации</a>.</p>\n<p>Если вы неплохо разбираетесь в инструментах сборки и хотите создавать приложения на React с их помощью, обратитесь к <a href=\"/docs/create-a-new-react-app.html\">следующему разделу</a>, где описаны некоторые из наиболее популярных способов. Если нет — не беспокойтесь, уже знакомые нам script-теги ничуть не хуже!</p>","frontmatter":{"title":"Добавляем React на сайт","next":"create-a-new-react-app.html","prev":"getting-started.html"},"fields":{"path":"content/docs/add-react-to-a-website.md","slug":"docs/add-react-to-a-website.html"}}},"pageContext":{"slug":"docs/add-react-to-a-website.html"}},"staticQueryHashes":[]}