Для программирования софта необходимо знать специализированные языки, их функционал, а также возможности и синтаксис. Неплохим спросом в последнее время пользуется JavaScript. Особенно это касается веб-утилит.
Данный ЯП довольно прост в освоении – с ним сможет совладать даже новичок. Имеет разнообразные инструменты и компоненты, помогающие быстро писать сложное ПО. Результат не заставит себя ждать – программист получит на выходе качественный софт с понятным интерфейсом и мощным функционалом.
JS имеет немало фреймворков и библиотек. Разработчикам, претендующим на звание Джуниоров, нужно разобраться с таким компонентом, как React. Эта «утилита» пригодится в ПО, где нужно внедрить пользовательский интерфейс. Далее технология будет рассмотрена более подробно.
JavaScript – несколько слов о языке
JavaScript – это простой объектно-ориентированный ЯП, который предназначается для разработки клиент-серверных утилит. Софт, составленный с его помощью, включаются в HTML-документы, после чего распространяется совместно с оными.
JS выступает в качестве интерпретируемого ЯП. Применяется в качестве встраиваемого языка для обеспечения программного доступа к объектам контента.
К его особенностям относят:
- относительно простой синтаксис;
- высокую читаемость программного кода;
- мощный инструментарий и функционал;
- наличие фреймворков и библиотек почти на все случаи жизни;
- достойный уровень безопасности.
Пользователь сможет достаточно быстро создавать браузерные и клиент-серверные утилиты через JS. Особенно если задействует React.
Что такое React
React – это элемент программирования. Специализированная технология, применяемая JavaScript при разработке разнообразного контента.
Представляет собой библиотеку для создания пользовательских интерфейсов. Обладает открытым исходным кодом. Впервые React появился в 2013 гожу. Выступает в качестве кроссплатформенной библиотеки.
React можно назвать:
- веб-фреймворком;
- библиотекой функций;
- библиотекой JS.
Сейчас данный компонент имеет поддержку, а также разрабатывается Facebook и Instagram. Им помогает сообщество независимых разработчиков и организаций.
История появления
Технология React была разработана неким Джорданом Валке. Это – один из разработчиков ПО в корпорации Facebook. Идеей послужил XHP. Такое название носит компонентный HTML-фреймворк на PHP.
Изначально React был использован в ленте Фейсбука в 2011 году. Позже он был внедрен в ленту Instagram. Это произошло в 2012. Исходный код стал открытым в мае 2013 году при проведении конференции под названием JSConf US.
React Native получил анонс на конференции React.js Conf в начале 2015. Его исходный код разработчики открыли в конце весны того же года. Соответствующий компонент дает возможность разрабатывать нативные приложения с React, которые работают на iOS, Android и UWP.
А в 2017 году появилась переписанная и оптимизированная версия React, получившая название React Fiber. Это – основа всех будущих функций, а также имеющихся улучшений. Актуальная версия технологии на момент написания статьи – 18.0.0, вышедшая 29 марта 2022 года.
Что знать перед использованием
Перед тем, как приступать к непосредственной работе с Реактом, нужно подготовиться. Новичкам сразу разобраться с ним не так-то просто. Предварительно разработчику необходимо ознакомиться с понятиями и основами работы с:
- HTML;
- JavaScript;
- классами;
- объектами;
- функциями;
- массивами.
Когда соответствующие основы заложены, можно приступать к созданию пользовательского интерфейса при помощи Реакта.
О компонентах
Компонент React – это участок программного кода, представляющий собой часть веб-странички. Каждый компонент выступает в виде JS-функции. Последняя отвечает за возврат куска кодификации, отвечающей за определенный фрагмент страницы.
Собственный компонент разрешается написать через JSX. Для этого необходимо воспользоваться следующей формой записи:
Это – стандартный примем. Нужно просто вызвать компоненты таким образом, словно осуществляется непосредственная работа с HTML.
Особенности и нюансы библиотеки
Для качественного проекта веб-серверной разработки пригодится пользовательских интерфейс. Если разработчик пользуется JS, ему поможет React. Но сначала нужно не только разобраться в особенностях соответствующего ЯП, но и посмотреть, какие нюансы предусматривает рассматриваемая библиотека.
Сюда можно отнести следующие моменты:
- Передача данных однонаправленного типа. Свойства будут передаваться от родительского компонента к дочерним. Они получат свойства в виде множества неизменяемых значений. Это приводит к тому, что компонент не способен напрямую вносить корректировки в имеющиеся параметры.
- Наличие виртуального DOM. Реакту был присвоен собственный виртуальный DOM. Технология создает кэш-структуру в памяти задействованного устройства, что позволяет производить вычисление между предыдущим и текущим состояниями интерфейса.
- Наличие JSX. Это – расширение синтаксиса ДжаваСкрипт, которое дает возможность применять HTML-подобный синтаксис для описания структур интерфейса.
- Применение методов жизненного цикла. Они помогают программеру осуществлять запуск кодификации на разных стадиях «жизни» компонента приложения.
- Не только отрисовка HTML в браузере.
- Наличие React Hooks. За счет Хуков можно использовать состояния и иные возможности изучаемой технологии без прописки классов в коде.
Все это делает Реакт удобным и функциональным инструментом для пользовательских интерфейсов различной сложности. Главное научиться пользоваться подобной библиотекой. С нуля разобраться в вопросе поможет официальная документация и туториалы на русском языке.
Начало работы с React
Для того, чтобы было проще разобраться в рассматриваемом компоненте для пользовательских интерфейсов, нужно сначала рассмотреть базовые навыки работы с оным. Это не так трудно. Информация, представленная далее, покажется полезной и новичкам, и опытным разработчикам.
Инициализация
Первый раз использовать Реакт удастся только после непосредственной установки соответствующего «фреймворка». Добиться желаемого результата удастся двумя способами. Каждый может выбрать свой вариант развития событий.
Через браузер
Это – самый простой подход к решению поставленной задачи. Для него необходимо:
- Открыть исходный стартовый код в новой вкладке интернет-обозревателя.
- В новой вкладке должна быть пустая игровая доска в крестики-нолик, а также кодификация Реакта.
- Отправить запрос на обработку.
Если использован этот вариант, следующий метод инициализации можно пропустить. Взять исходный код технологии предлагается по этой ссылке.
Через локальную среду
Необязательный вариант, который требует от программера определенных навыков и умений. Чтобы справиться с поставленной задачей, необходимо выбрать редактор, а затем:
- Убедиться в том, что на устройстве стоит последняя версия Node.js.
- После��овать инструкции по инициализации Create React App. Это поможет создать новый проект.
- Удалить в папке с именем src/ все документы. Саму папку трогать не нужно.
- Добавить файл с именем index.css с кодом CSS.
- Создать index.js с таким кодом.
Во втором созданном документе вставить в самом начале файла такие строчки:
Теперь можно запускать npm start в папке проекта, а также открыть http://localhost:3000 в интернет-обозревателей. На экране должно появиться пустое поле для игры «крестики-нолики».
Особенности компонентов
Теперь, когда технология, поддерживающая работу с пользовательским интерфейсом, инициализирована, можно приступать к коддингу. Читать специализированную литературу и туториалы на русском в «голой» теории достаточно тяжело. Поэтому далее будут рассмотрены небольшие примеры компонентов Реакта, объясняющие особенности функционирования оных.
Простой компонент
Компоненты React простого типа предусматривают такие особенности:
- Реализуют метод render().
- Указанный метод принимает входные данные и возвращает информацию для отображения.
- В примере задействован XML-подобный синтаксис JSX.
- Входные сведения, передаваемые в компонент, доступы в render() посредством this.props.
Стоит обратить внимание на то, что JSX не является обязательным. В React применять оный нет острой необходимости. Можно задействовать для просмотра необработанного кода JS некий PERL Babel.
С состоянием
Компонент способен поддерживать разнообразные внутренние данные состояния. Они доступы при помощи this.state. Когда данные состояния компонента корректируются, отрисованная разметка обновляется. Происходит это при помощи повторного вызова render().
Выше – наглядный пример кода, который помогает через рассматриваемую особенность создать своеобразный таймер. Утилита будет отсчитывать время, проведенное в ней, после непосредственного запуска.
Приложения
Через props и state можно сделать небольшую программу со списком дел. В приведенном примере нудно учитывать следующие моменты:
- State задействован для того, чтобы отслеживать текущий список имеющийся компонентов.
- Этот метод помогает следить за текстом, введенным пользователем.
- Сбор и реализация осуществляется через делегирование событий.
Выше – пример того, как будет работать и выглядеть соответствующая мини-утилита.
Внешние плагины
В качестве дополнительных возможностей React и его компонентов можно выделить функцию использования в кодификациях внешних плагинов. Это – важный этап разработки программного обеспечения.
Здесь необходимо обратить внимание на такие моменты как:
- React выступает в качестве гибкого элемента программирования и разработки.
- В этой библиотеке имеют место хуки, которые дают возможность настройки взаимодействия с иными фреймворками и библиотеками.
- Предложенный далее пример задействует remarkable. Это – внешняя библиотека для работы с Markdown.
- Подключенная библиотека помогает преобразовывать <textarea> в режиме реального времени.
Выше – пример того, как будет выглядеть элементарное приложение с подключенной сторонней библиотекой. И то, какой интерфейс начнет реализовывать React.
Стартовый код — проверка
Можно изучить немало специализированной литературы на русском языке по React, но без базовых знаний добиться успеха с этим «фреймворком» никак не получится. Далее будут рассмотрены наглядные примеры проверки имеющегося стартового кода.
Полученные ранее знания помогут осуществить запуск Реакта. Начало процесса зависит от ситуации:
- Если была установка через браузер, нужно открыть код в новой вкладке.
- Когда планируется работа через локальную среду, требуется перейти в папке проекта в файл scr/index.js.
- Стартовый код, предложенный в примере – это основа того, что разрабатывает программер. В нем есть стили CSS, поэтому можно сосредоточиться исключительно на React, а также написании игрушки под названием «крестики-нолики».
При рассмотрении кода в Реакте можно заметить, что там есть три компонента: Square, Game, Board. Здесь:
- Square отвечает за отображение одиночной кнопки button.
- Beard будет подсвечивать 9 квадратиков.
- Game отвечает за вывод Board со значениями числе-заполнителей, которые будут откорректированы чуть позже.
Сейчас исходная кодификация не имеет никаких интерактивных компонентов, которые могли бы отображаться на поле.
Передача данных
Для того, чтобы поэкспериментировать, нужно хотя бы немного наглядных примеров корректировки кода. Стоит попробовать передать данные из Board в Square. Тогда:
- В методе renderSquare компонента Board нужно откорректировать кодификацию.
- Внесение изменений нужно для того, чтобы передать свойство с названием value в Square.
- Теперь нужно изменить метод render компонента Square. Результатом должно служить отображение значения.
Вот здесь можно увидеть полный код получившейся программы.
Создание интерактива
Теперь нужно добавить заполнение Square значением X, если пользователь щелкает по оному. Для этого потребуется:
- Изменить тег кнопки, который отвечает за возврат из функции render() компонента Square.
- Сделать так, чтобы компонент Square запомнил, что на него было совершено нажатие. Следствие – заполнил себя значком «крестик». Для этого потребуется задействовать состояние. Инициализация оного происходит через this.state в конструкторах.
- Теперь нужно откорректировать метод render для того, чтобы отобразить значения текущего состояния при нажатии. После внесения корректировок тег button будет меть такой вид:
- При вызове this.setState из обработчика под названием onClick в методе render компонента Square React будет повторно отрисовывать этот Square при каждом клике на его кнопку button.
После запуска setState в компоненте, Реакт автоматически начнет обновление. Дочерние классы, размещенные внутри оного, тоже будут подлежать автокорректировке. А вот полный код получившегося результата.
Инструментарий разработчика
С каждым разделом статьи становится все более ясно, как работать с Реактом и его компонентами. Можно в процессе разработки ПО и его интерфейса применять инструменты разработчика. Пример – React Devtools. Запускается в Chrome и Mozilla. Дает возможность просмотра древа компонентов Реакта через инструментарий разработчика прямо в интернет-обозревателе.
React DevTools позволяет проверять свойства и состояние компонентов утилиты. После установки оного можно просто щелкнуть ПКМ по любому элементу страницы, после чего нажать на кнопку Inspect. Это поможет открыть инструменты разработчика. Вкладка рассматриваемой библиотеки отобразится последней с правой стороны.
Если нужно заставить работать React с CodePen, предстоит:
- Войти или зарегистрироваться в системе.
- Подтвердить электронный ящик.
- Щелкнуть по кнопке Fork.
- Нажать на Change View. Далее – выбрать команду Debug Mode.
Теперь открывшаяся вкладка с инструментами будет обладать новым пунктом – React. Все это пригодится не только для «крестиков-ноликов», но и для другого программного обеспечения с пользовательским интерфейсом.
Что позволит делать пример кода
Рассмотренный пример программного кода с React позволяет:
- играть в игру крестики-нолики;
- видеть, когда пользователь выигрывает у компьютера;
- хранить историю игры;
- смотреть не только историю, но и предыдущие версии игрового поля.
Вот весь код получившейся утилиты. Он и будет ответом на вопрос о том, как правильно использовать библиотеку JS для своих целей.
При наличии дополнительного времени и желания стоит улучшить игрушку. Для этого туда предлагается добавить:
- Отображение местоположения для каждого хода в виде столбец-строка. Информация должна выводиться на экран в списке истории ходов.
- Выделить текущий выбранный компонент в списке.
- Переписать Board так, чтобы можно было задействовать два цикла для создания квадратов без жесткого кодирования.
- Добавить переключатель, который отвечает за сортировку ходов по возрастанию или убыванию.
- Выделять три квадрата, которые привели пользователя к победе.
- Если никто не выиграл, вывести на дисплей устройства сообщение о ничье.
Эти задачи сможет выполнить разработчик, который уже знаком с React и его составляющими. Прописанные «новшества» указаны в порядке сложности. А здесь можно увидеть больше полезной информации о компонентах Реакта. Данные пригодятся опытным программистам.
Как быстро понять JS и React
Чтобы лучше разобраться в extends react, а также языке программирования JavaScript, можно:
- Пойти учиться в техникум или ВУЗ на IT-направление. Программеров нередко обучают основам JS.
- Заняться самообразованием. В Сети полно полезной информации, включая бесплатные видеоуроки и специализированную литературу. Минус такого подхода – невозможность подтвердить навыки и знания документально.
- Закончить дистанционные онлайн курсы.
Последний вариант наиболее успешный и быстрый. За срок до 12 месяцев можно освоить одно или несколько направлений в IT-сфере. Пользователям гарантируется поддержка опытными кураторами, а также бесценный практический опыт. Рассчитаны курсы как на новичков, так и на опытных разработчиков. С их помощью основы React будут изучены быстро и без проблем. В конце обучения каждый ученик сможет получить электронный сертификат, подтверждающий навыки и умения в выбранных направлениях.
Интересует React? Добро пожаловать на специализированный курс в Otus!
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>React: описание и основы работы OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Для программирования софта необходимо знать специализированные языки, их функционал, а также возможности и синтаксис. Неплохим спросом в последнее время пользуется JavaScript. Особенно это касается веб-утилит. Данный ЯП довольно прост в освоении – с ним сможет совладать даже новичок. Имеет разнообразные инструменты и компоненты, помогающие быстро писать сложное ПО. Результат не заставит себя ждать – программист" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/react-opisanie-i-osnovy-raboty/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#article","name":"React: \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0440\u0430\u0431\u043e\u0442\u044b OTUS","headline":"React: \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0440\u0430\u0431\u043e\u0442\u044b","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/05\/oj-1080x720-18.png","width":1080,"height":720},"datePublished":"2022-05-05T20:38:08+00:00","dateModified":"2022-05-05T20:38:09+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, JavaScript, js, React"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#listItem","position":2,"name":"React: \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0440\u0430\u0431\u043e\u0442\u044b","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#webpage","url":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/","name":"React: \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0440\u0430\u0431\u043e\u0442\u044b OTUS","description":"\u0414\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0444\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438, \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441. \u041d\u0435\u043f\u043b\u043e\u0445\u0438\u043c \u0441\u043f\u0440\u043e\u0441\u043e\u043c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f JavaScript. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0431-\u0443\u0442\u0438\u043b\u0438\u0442. \u0414\u0430\u043d\u043d\u044b\u0439 \u042f\u041f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442 \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u2013 \u0441 \u043d\u0438\u043c \u0441\u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0432\u043b\u0430\u0434\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u043d\u043e\u0432\u0438\u0447\u043e\u043a. \u0418\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u041f\u041e. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u0435\u0431\u044f \u0436\u0434\u0430\u0442\u044c \u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/05\/oj-1080x720-18.png","@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/react-opisanie-i-osnovy-raboty\/#mainImage"},"datePublished":"2022-05-05T20:38:08+00:00","dateModified":"2022-05-05T20:38:09+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/3593" /><link rel='shortlink' href='https://otus.ru/journal/?p=3593' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Freact-opisanie-i-osnovy-raboty%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Freact-opisanie-i-osnovy-raboty%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-3593 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-3593" class="the-post post-3593 post type-post status-publish format-standard has-post-thumbnail category-polza tag-javascript tag-js tag-react">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
React: описание и основы работы
</h1>
<a href="https://otus.ru/journal/react-opisanie-i-osnovy-raboty/" class="date-link" data-wpel-link="internal"><time class="post-date">5 мая, 2022</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-18.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="React: описание и основы работы" title="React: описание и основы работы" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-18-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-18-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-18-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-18-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-18-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-18-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#JavaScript_%E2%80%93_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D1%81%D0%BB%D0%BE%D0%B2_%D0%BE_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5" title="JavaScript – несколько слов о языке">JavaScript – несколько слов о языке</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_React" title="Что такое React">Что такое React</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%BF%D0%BE%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F" title="История появления">История появления</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%A7%D1%82%D0%BE_%D0%B7%D0%BD%D0%B0%D1%82%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC" title="Что знать перед использованием">Что знать перед использованием</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9E_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0%D1%85" title="О компонентах">О компонентах</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BD%D1%8E%D0%B0%D0%BD%D1%81%D1%8B_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8" title="Особенности и нюансы библиотеки">Особенности и нюансы библиотеки</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_React" title="Начало работы с React">Начало работы с React</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" title="Инициализация">Инициализация</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%A7%D0%B5%D1%80%D0%B5%D0%B7_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80" title="Через браузер">Через браузер</a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%A7%D0%B5%D1%80%D0%B5%D0%B7_%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D1%81%D1%80%D0%B5%D0%B4%D1%83" title="Через локальную среду">Через локальную среду</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2" title="Особенности компонентов">Особенности компонентов</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82" title="Простой компонент">Простой компонент</a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%A1_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC" title="С состоянием">С состоянием</a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%9F%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F" title="Приложения">Приложения</a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%92%D0%BD%D0%B5%D1%88%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B" title="Внешние плагины">Внешние плагины</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%A1%D1%82%D0%B0%D1%80%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_%E2%80%94_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0" title="Стартовый код — проверка">Стартовый код — проверка</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-17" href="#%D0%9F%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" title="Передача данных">Передача данных</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-18" href="#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%B0" title="Создание интерактива">Создание интерактива</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-19" href="#%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0" title="Инструментарий разработчика">Инструментарий разработчика</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-20" href="#%D0%A7%D1%82%D0%BE_%D0%BF%D0%BE%D0%B7%D0%B2%D0%BE%D0%BB%D0%B8%D1%82_%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BA%D0%BE%D0%B4%D0%B0" title="Что позволит делать пример кода">Что позволит делать пример кода</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-21" href="#%D0%9A%D0%B0%D0%BA_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D1%8C_JS_%D0%B8_React" title="Как быстро понять JS и React">Как быстро понять JS и React</a></li></ul></nav></div>
<p>Для программирования софта необходимо знать специализированные языки, их функционал, а также возможности и синтаксис. Неплохим спросом в последнее время пользуется JavaScript. Особенно это касается веб-утилит.</p>
<p>Данный ЯП довольно прост в освоении – с ним сможет совладать даже новичок. Имеет разнообразные инструменты и компоненты, помогающие быстро писать сложное ПО. Результат не заставит себя ждать – программист получит на выходе качественный софт с понятным интерфейсом и мощным функционалом.</p>
<p>JS имеет немало фреймворков и библиотек. Разработчикам, претендующим на звание Джуниоров, нужно разобраться с таким компонентом, как React. Эта «утилита» пригодится в ПО, где нужно внедрить пользовательский интерфейс. Далее технология будет рассмотрена более подробно.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="JavaScript_%E2%80%93_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D1%81%D0%BB%D0%BE%D0%B2_%D0%BE_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5"></span>JavaScript – несколько слов о языке<span class="ez-toc-section-end"></span></h2>
<p>JavaScript – это простой объектно-ориентированный ЯП, который предназначается для разработки клиент-серверных утилит. Софт, составленный с его помощью, включаются в HTML-документы, после чего распространяется совместно с оными.</p>
<p>JS выступает в качестве интерпретируемого ЯП. Применяется в качестве встраиваемого языка для обеспечения программного доступа к объектам контента.</p>
<p>К его особенностям относят:</p>
<ul><li>относительно простой синтаксис;</li><li>высокую читаемость программного кода;</li><li>мощный инструментарий и функционал;</li><li>наличие фреймворков и библиотек почти на все случаи жизни;</li><li>достойный уровень безопасности.</li></ul>
<p>Пользователь сможет достаточно быстро создавать браузерные и клиент-серверные утилиты через JS. Особенно если задействует React.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_React"></span>Что такое React<span class="ez-toc-section-end"></span></h2>
<p>React – это элемент программирования. Специализированная технология, применяемая JavaScript при разработке разнообразного контента.</p>
<p>Представляет собой библиотеку для создания пользовательских интерфейсов. Обладает открытым исходным кодом. Впервые React появился в 2013 гожу. Выступает в качестве кроссплатформенной библиотеки.</p>
<p>React можно назвать:</p>
<ul><li>веб-фреймворком;</li><li>библиотекой функций;</li><li>библиотекой JS.</li></ul>
<p>Сейчас данный компонент имеет поддержку, а также разрабатывается Facebook и Instagram. Им помогает сообщество независимых разработчиков и организаций.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%BF%D0%BE%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F"></span>История появления<span class="ez-toc-section-end"></span></h3>
<p>Технология React была разработана неким Джорданом Валке. Это – один из разработчиков ПО в корпорации Facebook. Идеей послужил XHP. Такое название носит компонентный HTML-фреймворк на PHP.</p>
<p>Изначально React был использован в ленте Фейсбука в 2011 году. Позже он был внедрен в ленту Instagram. Это произошло в 2012. Исходный код стал открытым в мае 2013 году при проведении конференции под названием JSConf US.</p>
<p>React Native получил анонс на конференции React.js Conf в начале 2015. Его исходный код разработчики открыли в конце весны того же года. Соответствующий компонент дает возможность разрабатывать нативные приложения с React, которые работают на iOS, Android и UWP.</p>
<p>А в 2017 году появилась переписанная и оптимизированная версия React, получившая название React Fiber. Это – основа всех будущих функций, а также имеющихся улучшений. Актуальная версия технологии на момент написания статьи – 18.0.0, вышедшая 29 марта 2022 года.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%BE_%D0%B7%D0%BD%D0%B0%D1%82%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC"></span>Что знать перед использованием<span class="ez-toc-section-end"></span></h2>
<p>Перед тем, как приступать к непосредственной работе с Реактом, нужно подготовиться. Новичкам сразу разобраться с ним не так-то просто. Предварительно разработчику необходимо ознакомиться с понятиями и основами работы с:</p>
<ul><li>HTML;</li><li>JavaScript;</li><li>классами;</li><li>объектами;</li><li>функциями;</li><li>массивами.</li></ul>
<p>Когда соответствующие основы заложены, можно приступать к созданию пользовательского интерфейса при помощи Реакта.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0%D1%85"></span>О компонентах<span class="ez-toc-section-end"></span></h2>
<p>Компонент React – это участок программного кода, представляющий собой часть веб-странички. Каждый компонент выступает в виде JS-функции. Последняя отвечает за возврат куска кодификации, отвечающей за определенный фрагмент страницы.</p>
<p>Собственный компонент разрешается написать через JSX. Для этого необходимо воспользоваться следующей формой записи:</p>
<figure class="wp-block-image size-large"><img decoding="async" width="412" height="33" src="https://otus.ru/journal/wp-content/uploads/2022/05/1-11.jpg" alt="React: описание и основы работы" class="wp-image-3595" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/1-11.jpg 412w, https://otus.ru/journal/wp-content/uploads/2022/05/1-11-300x24.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/1-11-150x12.jpg 150w" sizes="(max-width: 412px) 100vw, 412px" /></figure>
<p>Это – стандартный примем. Нужно просто вызвать компоненты таким образом, словно осуществляется непосредственная работа с HTML.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BD%D1%8E%D0%B0%D0%BD%D1%81%D1%8B_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8"></span>Особенности и нюансы библиотеки<span class="ez-toc-section-end"></span></h2>
<p>Для качественного проекта веб-серверной разработки пригодится пользовательских интерфейс. Если разработчик пользуется JS, ему поможет React. Но сначала нужно не только разобраться в особенностях соответствующего ЯП, но и посмотреть, какие нюансы предусматривает рассматриваемая библиотека.</p>
<p>Сюда можно отнести следующие моменты:</p>
<ol type="1"><li>Передача данных однонаправленного типа. Свойства будут передаваться от родительского компонента к дочерним. Они получат свойства в виде множества неизменяемых значений. Это приводит к тому, что компонент не способен напрямую вносить корректировки в имеющиеся параметры.</li><li>Наличие виртуального DOM. Реакту был присвоен собственный виртуальный DOM. Технология создает кэш-структуру в памяти задействованного устройства, что позволяет производить вычисление между предыдущим и текущим состояниями интерфейса.</li><li>Наличие JSX. Это – расширение синтаксиса ДжаваСкрипт, которое дает возможность применять HTML-подобный синтаксис для описания структур интерфейса.</li><li>Применение методов жизненного цикла. Они помогают программеру осуществлять запуск кодификации на разных стадиях «жизни» компонента приложения.</li><li>Не только отрисовка HTML в браузере.</li><li>Наличие React Hooks. За счет Хуков можно использовать состояния и иные возможности изучаемой технологии без прописки классов в коде.</li></ol>
<p>Все это делает Реакт удобным и функциональным инструментом для пользовательских интерфейсов различной сложности. Главное научиться пользоваться подобной библиотекой. С нуля разобраться в вопросе поможет официальная документация и туториалы на русском языке.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_React"></span>Начало работы с React<span class="ez-toc-section-end"></span></h2>
<p>Для того, чтобы было проще разобраться в рассматриваемом компоненте для пользовательских интерфейсов, нужно сначала рассмотреть базовые навыки работы с оным. Это не так трудно. Информация, представленная далее, покажется полезной и новичкам, и опытным разработчикам.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F"></span>Инициализация<span class="ez-toc-section-end"></span></h3>
<p>Первый раз использовать Реакт удастся только после непосредственной установки соответствующего «фреймворка». Добиться желаемого результата удастся двумя способами. Каждый может выбрать свой вариант развития событий.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D0%B5%D1%80%D0%B5%D0%B7_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80"></span>Через браузер<span class="ez-toc-section-end"></span></h4>
<p>Это – самый простой подход к решению поставленной задачи. Для него необходимо:</p>
<ol type="1"><li>Открыть исходный стартовый код в новой вкладке интернет-обозревателя.</li><li>В новой вкладке должна быть пустая игровая доска в крестики-нолик, а также кодификация Реакта.</li><li>Отправить запрос на обработку.</li></ol>
<p>Если использован этот вариант, следующий метод инициализации можно пропустить. Взять исходный код технологии предлагается по <a href="https://codepen.io/gaearon/pen/oWWQNa?editors=0010" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">этой<span class="wpel-icon wpel-image wpel-icon-6"></span></a> ссылке.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D0%B5%D1%80%D0%B5%D0%B7_%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D1%81%D1%80%D0%B5%D0%B4%D1%83"></span>Через локальную среду<span class="ez-toc-section-end"></span></h4>
<p>Необязательный вариант, который требует от программера определенных навыков и умений. Чтобы справиться с поставленной задачей, необходимо выбрать редактор, а затем:</p>
<ol type="1"><li>Убедиться в том, что на устройстве стоит последняя версия Node.js.</li><li>Последовать <a href="https://learn-reactjs.ru/introduction/create-a-new-react-app#create-react-app" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">инструкции<span class="wpel-icon wpel-image wpel-icon-6"></span></a> по инициализации Create React App. Это поможет создать новый проект.</li><li>Удалить в папке с именем src/ все документы. Саму папку трогать не нужно.</li><li>Добавить файл с именем index.css с <a href="https://codepen.io/gaearon/pen/oWWQNa?editors=0100" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">кодом<span class="wpel-icon wpel-image wpel-icon-6"></span></a> CSS.</li><li>Создать index.js с <a href="https://codepen.io/gaearon/pen/oWWQNa?editors=0010" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">таким<span class="wpel-icon wpel-image wpel-icon-6"></span></a> кодом.</li></ol>
<p>Во втором созданном документе вставить в самом начале файла такие строчки:</p>
<figure class="wp-block-image size-large"><img decoding="async" width="272" height="96" src="https://otus.ru/journal/wp-content/uploads/2022/05/2-10.jpg" alt="React: описание и основы работы" class="wp-image-3596" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/2-10.jpg 272w, https://otus.ru/journal/wp-content/uploads/2022/05/2-10-150x53.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/05/2-10-270x96.jpg 270w" sizes="(max-width: 272px) 100vw, 272px" /></figure>
<p>Теперь можно запускать npm start в папке проекта, а также открыть <a href="http://localhost:3000" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">http://localhost:3000<span class="wpel-icon wpel-image wpel-icon-6"></span></a> в интернет-обозревателей. На экране должно появиться пустое поле для игры «крестики-нолики».</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2"></span>Особенности компонентов<span class="ez-toc-section-end"></span></h3>
<p>Теперь, когда технология, поддерживающая работу с пользовательским интерфейсом, инициализирована, можно приступать к коддингу. Читать специализированную литературу и туториалы на русском в «голой» теории достаточно тяжело. Поэтому далее будут рассмотрены небольшие примеры компонентов Реакта, объясняющие особенности функционирования оных.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82"></span>Простой компонент<span class="ez-toc-section-end"></span></h4>
<p>Компоненты React простого типа предусматривают такие особенности:</p>
<ol type="1"><li>Реализуют метод render().</li><li>Указанный метод принимает входные данные и возвращает информацию для отображения.</li><li>В примере задействован XML-подобный синтаксис JSX.</li><li>Входные сведения, передаваемые в компонент, доступы в render() посредством this.props.</li></ol>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="538" height="307" src="https://otus.ru/journal/wp-content/uploads/2022/05/3-8.jpg" alt="React: описание и основы работы" class="wp-image-3597" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/3-8.jpg 538w, https://otus.ru/journal/wp-content/uploads/2022/05/3-8-300x171.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/3-8-150x86.jpg 150w" sizes="(max-width: 538px) 100vw, 538px" /></figure>
<p>Стоит обратить внимание на то, что JSX не является обязательным. В React применять оный нет острой необходимости. Можно задействовать для просмотра необработанного кода JS некий PERL Babel.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC"></span>С состоянием<span class="ez-toc-section-end"></span></h4>
<p>Компонент способен поддерживать разнообразные внутренние данные состояния. Они доступы при помощи this.state. Когда данные состояния компонента корректируются, отрисованная разметка обновляется. Происходит это при помощи повторного вызова render().</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="715" height="334" src="https://otus.ru/journal/wp-content/uploads/2022/05/4-8.jpg" alt="React: описание и основы работы" class="wp-image-3598" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/4-8.jpg 715w, https://otus.ru/journal/wp-content/uploads/2022/05/4-8-300x140.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/4-8-150x70.jpg 150w" sizes="(max-width: 715px) 100vw, 715px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="527" height="344" src="https://otus.ru/journal/wp-content/uploads/2022/05/5-7.jpg" alt="React: описание и основы работы" class="wp-image-3599" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/5-7.jpg 527w, https://otus.ru/journal/wp-content/uploads/2022/05/5-7-300x196.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/5-7-150x98.jpg 150w" sizes="(max-width: 527px) 100vw, 527px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="528" height="59" src="https://otus.ru/journal/wp-content/uploads/2022/05/6-3.jpg" alt="React: описание и основы работы" class="wp-image-3600" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/6-3.jpg 528w, https://otus.ru/journal/wp-content/uploads/2022/05/6-3-300x34.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/6-3-150x17.jpg 150w" sizes="(max-width: 528px) 100vw, 528px" /></figure>
<p>Выше – наглядный пример кода, который помогает через рассматриваемую особенность создать своеобразный таймер. Утилита будет отсчитывать время, проведенное в ней, после непосредственного запуска.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F"></span>Приложения<span class="ez-toc-section-end"></span></h4>
<p>Через props и state можно сделать небольшую программу со списком дел. В приведенном примере нудно учитывать следующие моменты:</p>
<ol type="1"><li>State задействован для того, чтобы отслеживать текущий список имеющийся компонентов.</li><li>Этот метод помогает следить за текстом, введенным пользователем.</li><li>Сбор и реализация осуществляется через делегирование событий.</li></ol>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="784" height="344" src="https://otus.ru/journal/wp-content/uploads/2022/05/7-3.jpg" alt="React: описание и основы работы" class="wp-image-3601" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/7-3.jpg 784w, https://otus.ru/journal/wp-content/uploads/2022/05/7-3-300x132.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/7-3-150x66.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/05/7-3-768x337.jpg 768w" sizes="(max-width: 784px) 100vw, 784px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="530" height="307" src="https://otus.ru/journal/wp-content/uploads/2022/05/8-2.jpg" alt="React: описание и основы работы" class="wp-image-3602" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/8-2.jpg 530w, https://otus.ru/journal/wp-content/uploads/2022/05/8-2-300x174.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/8-2-150x87.jpg 150w" sizes="(max-width: 530px) 100vw, 530px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="530" height="342" src="https://otus.ru/journal/wp-content/uploads/2022/05/9-2.jpg" alt="React: описание и основы работы" class="wp-image-3603" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/9-2.jpg 530w, https://otus.ru/journal/wp-content/uploads/2022/05/9-2-300x194.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/9-2-150x97.jpg 150w" sizes="(max-width: 530px) 100vw, 530px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="526" height="344" src="https://otus.ru/journal/wp-content/uploads/2022/05/10-2.jpg" alt="React: описание и основы работы" class="wp-image-3604" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/10-2.jpg 526w, https://otus.ru/journal/wp-content/uploads/2022/05/10-2-300x196.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/10-2-150x98.jpg 150w" sizes="(max-width: 526px) 100vw, 526px" /></figure>
<p>Выше – пример того, как будет работать и выглядеть соответствующая мини-утилита.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D0%BD%D0%B5%D1%88%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B"></span>Внешние плагины<span class="ez-toc-section-end"></span></h4>
<p>В качестве дополнительных возможностей React и его компонентов можно выделить функцию использования в кодификациях внешних плагинов. Это – важный этап разработки программного обеспечения.</p>
<p>Здесь необходимо обратить внимание на такие моменты как:</p>
<ol type="1"><li>React выступает в качестве гибкого элемента программирования и разработки.</li><li>В этой библиотеке имеют место хуки, которые дают возможность настройки взаимодействия с иными фреймворками и библиотеками.</li><li>Предложенный далее пример задействует remarkable. Это – внешняя библиотека для работы с Markdown.</li><li>Подключенная библиотека помогает преобразовывать <textarea> в режиме реального времени.</li></ol>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="784" height="338" src="https://otus.ru/journal/wp-content/uploads/2022/05/11-2.jpg" alt="React: описание и основы работы" class="wp-image-3605" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/11-2.jpg 784w, https://otus.ru/journal/wp-content/uploads/2022/05/11-2-300x129.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/11-2-150x65.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/05/11-2-768x331.jpg 768w" sizes="(max-width: 784px) 100vw, 784px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="527" height="342" src="https://otus.ru/journal/wp-content/uploads/2022/05/12-2.jpg" alt="React: описание и основы работы" class="wp-image-3606" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/12-2.jpg 527w, https://otus.ru/journal/wp-content/uploads/2022/05/12-2-300x195.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/12-2-150x97.jpg 150w" sizes="(max-width: 527px) 100vw, 527px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="532" height="259" src="https://otus.ru/journal/wp-content/uploads/2022/05/13-1.jpg" alt="React: описание и основы работы" class="wp-image-3607" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/13-1.jpg 532w, https://otus.ru/journal/wp-content/uploads/2022/05/13-1-300x146.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/13-1-150x73.jpg 150w" sizes="(max-width: 532px) 100vw, 532px" /></figure>
<p>Выше – пример того, как будет выглядеть элементарное приложение с подключенной сторонней библиотекой. И то, какой интерфейс начнет реализовывать React.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D1%82%D0%B0%D1%80%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_%E2%80%94_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0"></span>Стартовый код — проверка<span class="ez-toc-section-end"></span></h2>
<p>Можно изучить немало специализированной литературы на русском языке по React, но без базовых знаний добиться успеха с этим «фреймворком» никак не получится. Далее будут рассмотрены наглядные примеры проверки имеющегося стартового кода.</p>
<p>Полученные ранее знания помогут осуществить запуск Реакта. Начало процесса зависит от ситуации:</p>
<ol type="1"><li>Если была установка через браузер, нужно открыть <a href="https://codepen.io/gaearon/pen/oWWQNa?editors=0010" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">код<span class="wpel-icon wpel-image wpel-icon-6"></span></a> в новой вкладке.</li><li>Когда планируется работа через локальную среду, требуется перейти в папке проекта в файл scr/index.js.</li><li>Стартовый код, предложенный в примере – это основа того, что разрабатывает программер. В нем есть стили CSS, поэтому можно сосредоточиться исключительно на React, а также написании игрушки под названием «крестики-нолики».</li></ol>
<p>При рассмотрении кода в Реакте можно заметить, что там есть три компонента: Square, Game, Board. Здесь:</p>
<ol type="1"><li>Square отвечает за отображение одиночной кнопки button.</li><li>Beard будет подсвечивать 9 квадратиков.</li><li>Game отвечает за вывод Board со значениями числе-заполнителей, которые будут откорректированы чуть позже.</li></ol>
<p>Сейчас исходная кодификация не имеет никаких интерактивных компонентов, которые могли бы отображаться на поле.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85"></span>Передача данных<span class="ez-toc-section-end"></span></h3>
<p>Для того, чтобы поэкспериментировать, нужно хотя бы немного наглядных примеров корректировки кода. Стоит попробовать передать данные из Board в Square. Тогда:</p>
<ul type="1"><li>В методе renderSquare компонента Board нужно откорректировать кодификацию.</li><li>Внесение изменений нужно для того, чтобы передать свойство с названием value в Square.</li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="407" height="111" src="https://otus.ru/journal/wp-content/uploads/2022/05/14-1.jpg" alt="React: описание и основы работы" class="wp-image-3608" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/14-1.jpg 407w, https://otus.ru/journal/wp-content/uploads/2022/05/14-1-300x82.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/14-1-150x41.jpg 150w" sizes="(max-width: 407px) 100vw, 407px" /></figure>
<ul type="1"><li>Теперь нужно изменить метод render компонента Square. Результатом должно служить отображение значения.</li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="497" height="207" src="https://otus.ru/journal/wp-content/uploads/2022/05/15-1.jpg" alt="React: описание и основы работы" class="wp-image-3609" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/15-1.jpg 497w, https://otus.ru/journal/wp-content/uploads/2022/05/15-1-300x125.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/15-1-150x62.jpg 150w" sizes="(max-width: 497px) 100vw, 497px" /></figure>
<p>Вот <a href="https://codepen.io/gaearon/pen/aWWQOG?editors=0010" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">здесь<span class="wpel-icon wpel-image wpel-icon-6"></span></a> можно увидеть полный код получившейся программы.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%B0"></span>Создание интерактива<span class="ez-toc-section-end"></span></h3>
<p>Теперь нужно добавить заполнение Square значением X, если пользователь щелкает по оному. Для этого потребуется:</p>
<ul type="1"><li>Изменить тег кнопки, который отвечает за возврат из функции render() компонента Square.</li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="652" height="203" src="https://otus.ru/journal/wp-content/uploads/2022/05/16-1.jpg" alt="React: описание и основы работы" class="wp-image-3610" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/16-1.jpg 652w, https://otus.ru/journal/wp-content/uploads/2022/05/16-1-300x93.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/16-1-150x47.jpg 150w" sizes="(max-width: 652px) 100vw, 652px" /></figure>
<ul type="1"><li>Сделать так, чтобы компонент Square запомнил, что на него было совершено нажатие. Следствие – заполнил себя значком «крестик». Для этого потребуется задействовать состояние. Инициализация оного происходит через this.state в конструкторах. </li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="598" height="329" src="https://otus.ru/journal/wp-content/uploads/2022/05/17-1.jpg" alt="React: описание и основы работы" class="wp-image-3611" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/17-1.jpg 598w, https://otus.ru/journal/wp-content/uploads/2022/05/17-1-300x165.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/17-1-150x83.jpg 150w" sizes="(max-width: 598px) 100vw, 598px" /></figure>
<ul type="1"><li>Теперь нужно откорректировать метод render для того, чтобы отобразить значения текущего состояния при нажатии. После внесения корректировок тег button будет меть такой вид: </li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="547" height="410" src="https://otus.ru/journal/wp-content/uploads/2022/05/18-1.jpg" alt="React: описание и основы работы" class="wp-image-3612" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/18-1.jpg 547w, https://otus.ru/journal/wp-content/uploads/2022/05/18-1-300x225.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/18-1-150x112.jpg 150w" sizes="(max-width: 547px) 100vw, 547px" /></figure>
<ul type="1"><li>При вызове this.setState из обработчика под названием onClick в методе render компонента Square React будет повторно отрисовывать этот Square при каждом клике на его кнопку button.</li></ul>
<p>После запуска setState в компоненте, Реакт автоматически начнет обновление. Дочерние классы, размещенные внутри оного, тоже будут подлежать автокорректировке. А <a href="https://codepen.io/gaearon/pen/VbbVLg?editors=0010" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">вот полный код<span class="wpel-icon wpel-image wpel-icon-6"></span></a> получившегося результата.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0"></span>Инструментарий разработчика<span class="ez-toc-section-end"></span></h3>
<p>С каждым разделом статьи становится все более ясно, как работать с Реактом и его компонентами. Можно в процессе разработки ПО и его интерфейса применять инструменты разработчика. Пример – React Devtools. Запускается в Chrome и Mozilla. Дает возможность просмотра древа компонентов Реакта через инструментарий разработчика прямо в интернет-обозревателе.</p>
<p>React DevTools позволяет проверять свойства и состояние компонентов утилиты. После установки оного можно просто щелкнуть ПКМ по любому элементу страницы, после чего нажать на кнопку Inspect. Это поможет открыть инструменты разработчика. Вкладка рассматриваемой библиотеки отобразится последней с правой стороны.</p>
<p>Если нужно заставить работать React с CodePen, предстоит:</p>
<ol type="1"><li>Войти или зарегистрироваться в системе.</li><li>Подтвердить электронный ящик.</li><li>Щелкнуть по кнопке Fork.</li><li>Нажать на Change View. Далее – выбрать команду Debug Mode.</li></ol>
<p>Теперь открывшаяся вкладка с инструментами будет обладать новым пунктом – React. Все это пригодится не только для «крестиков-ноликов», но и для другого программного обеспечения с пользовательским интерфейсом.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%BE_%D0%BF%D0%BE%D0%B7%D0%B2%D0%BE%D0%BB%D0%B8%D1%82_%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BA%D0%BE%D0%B4%D0%B0"></span>Что позволит делать пример кода<span class="ez-toc-section-end"></span></h2>
<p>Рассмотренный пример программного кода с React позволяет:</p>
<ul><li>играть в игру крестики-нолики;</li><li>видеть, когда пользователь выигрывает у компьютера;</li><li>хранить историю игры;</li><li>смотреть не только историю, но и предыдущие версии игрового поля.</li></ul>
<p><a href="https://codepen.io/gaearon/pen/gWWZgR?editors=0010" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Вот весь код<span class="wpel-icon wpel-image wpel-icon-6"></span></a> получившейся утилиты. Он и будет ответом на вопрос о том, как правильно использовать библиотеку JS для своих целей.</p>
<p>При наличии дополнительного времени и желания стоит улучшить игрушку. Для этого туда предлагается добавить:</p>
<ol type="1"><li>Отображение местоположения для каждого хода в виде столбец-строка. Информация должна выводиться на экран в списке истории ходов.</li><li>Выделить текущий выбранный компонент в списке.</li><li>Переписать Board так, чтобы можно было задействовать два цикла для создания квадратов без жесткого кодирования.</li><li>Добавить переключатель, который отвечает за сортировку ходов по возрастанию или убыванию.</li><li>Выделять три квадрата, которые привели пользователя к победе.</li><li>Если никто не выиграл, вывести на дисплей устройства сообщение о ничье.</li></ol>
<p>Эти задачи сможет выполнить разработчик, который уже знаком с React и его составляющими. Прописанные «новшества» указаны в порядке сложности. А <a href="https://learn-reactjs.ru/reference/react-component" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">здесь<span class="wpel-icon wpel-image wpel-icon-6"></span></a> можно увидеть больше полезной информации о компонентах Реакта. Данные пригодятся опытным программистам.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D1%8C_JS_%D0%B8_React"></span>Как быстро понять JS и React<span class="ez-toc-section-end"></span></h2>
<p>Чтобы лучше разобраться в extends react, а также языке программирования JavaScript, можно:</p>
<ol type="1"><li>Пойти учиться в техникум или ВУЗ на IT-направление. Программеров нередко обучают основам JS.</li><li>Заняться самообразованием. В Сети полно полезной информации, включая бесплатные видеоуроки и специализированную литературу. Минус такого подхода – невозможность подтвердить навыки и знания документально.</li><li>Закончить дистанционные онлайн курсы.</li></ol>
<p>Последний вариант наиболее успешный и быстрый. За срок до 12 месяцев можно освоить одно или несколько направлений в IT-сфере. Пользователям гарантируется поддержка опытными кураторами, а также бесценный практический опыт. Рассчитаны курсы как на новичков, так и на опытных разработчиков. С их помощью основы React будут изучены быстро и без проблем. В конце обучения каждый ученик сможет получить электронный сертификат, подтверждающий навыки и умения в выбранных направлениях.</p>
<p>Интересует React? Добро пожаловать на <a href="https://otus.ru/lessons/react/?utm_source=oj&utm_medium=affilate&utm_campaign=react" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">специализированный курс<span class="wpel-icon wpel-image wpel-icon-6"></span></a> в Otus! </p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/javascript/" rel="tag" data-wpel-link="internal">JavaScript</a><a href="https://otus.ru/journal/tag/js/" rel="tag" data-wpel-link="internal">js</a><a href="https://otus.ru/journal/tag/react/" rel="tag" data-wpel-link="internal">React</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Freact-opisanie-i-osnovy-raboty%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Freact-opisanie-i-osnovy-raboty%2F&text=React%3A%20%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B8%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Freact-opisanie-i-osnovy-raboty%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Freact-opisanie-i-osnovy-raboty%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2022%2F05%2Foj-1080x720-18.png&description=React%3A%20%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B8%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/izuchenie-python-ot-a-do-ya-vse-o-yazyke-i-ego-osobennostyah/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/izuchenie-python-ot-a-do-ya-vse-o-yazyke-i-ego-osobennostyah/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Изучение Python от А до Я: все о языке и его особенностях" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-17-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-17-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-17-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-17-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-17-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-17-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-17-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-17.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-17-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Изучение Python от А до Я: все о языке и его особенностях" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/izuchenie-python-ot-a-do-ya-vse-o-yazyke-i-ego-osobennostyah/" data-wpel-link="internal">Изучение Python от А до Я: все о языке и его особенностях</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/izuchenie-python-ot-a-do-ya-vse-o-yazyke-i-ego-osobennostyah/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-05-05T20:24:08+00:00">5 мая, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/rust-opisanie-osobennosti-ispolzovanie/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/rust-opisanie-osobennosti-ispolzovanie/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Rust: описание, особенности, использование" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Rust: описание, особенности, использование" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/rust-opisanie-osobennosti-ispolzovanie/" data-wpel-link="internal">Rust: описание, особенности, использование</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/rust-opisanie-osobennosti-ispolzovanie/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-05-05T20:46:02+00:00">5 мая, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/react-opisanie-i-osnovy-raboty\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 15:25:51 GMT -->