Учебник ReactJS для начинающих

⚡ Умное резюме

ReactJS лежит в основе пользовательских интерфейсов бесчисленного множества современных веб-сайтов и мобильных приложений. На этой странице объясняется, что представляет собой эта библиотека, как её настроить и как компоненты, JSX, состояние, свойства и события взаимодействуют друг с другом.

  • 🇧🇷 Foundation: ReactJS — это компонентно-ориентированный движок с открытым исходным кодом. JavaБиблиотека скриптов, созданная в Facebook (теперь Meta) для разработки быстрых и интерактивных пользовательских интерфейсов.
  • 🧩 Компоненты: Многократно используемые строительные блоки, написанные в виде функций или классов, разделяют логику пользовательского интерфейса на независимые, поддерживаемые части.
  • ???? JSX: A JavaРасширение синтаксиса скриптов позволяет писать HTML-подобную разметку и выражения в одном и том же файле.
  • 🔄 Государство и имущество: В состоянии компонента хранятся приватные, изменяющиеся данные, а свойства передают в него данные только для чтения.
  • ⚙️ Пути установки: CDN-скрипты подходят для быстрых экспериментов; npm-пакеты или Vite — для реальных проектов.
  • 🚀 Современная практика: Компоненты-функции с хуками и API createRoot в React 18+ теперь являются рекомендуемым стандартом.
  • 💼 Влияние на карьеру: Навыки работы с React остаются одними из самых востребованных в объявлениях о вакансиях для фронтенд-разработчиков по всему миру.

Учебник по ReactJS для начинающих: изучите основы React шаг за шагом.

Что такое ReactJS?

ReactJS это интерфейс с открытым исходным кодом JavaБиблиотека скриптов для создания пользовательских интерфейсов. ReactJS Он поддерживается компанией Meta (ранее Facebook) и сообществом отдельных разработчиков и компаний. Он широко используется в качестве основы для создания одностраничных и мобильных приложений. Он очень прост в использовании и позволяет пользователям создавать многократно используемые компоненты пользовательского интерфейса.

Прежде чем написать первую строку кода React, полезно понять, чем эта библиотека отличается от обычной. JavaСценарий. В следующем разделе будут рассмотрены его основные функции.

Особенности ReactJS

JSX: JSX — это расширение JavaСкрипт. Хотя использование JSX в React не является обязательным, это одна из его полезных и простых в использовании функций.

Компоненты: Компоненты как чистые JavaСкриптовые функции упрощают написание кода, разделяя логику на многократно используемый независимый фрагмент. Компоненты можно использовать как функции, так и как классы. Компоненты также имеют состояние и свойства, что значительно упрощает работу. В компоненте-классе состояние и свойства хранятся и управляются.

Виртуальный дом: React создает виртуальный DOM, то есть кэш данных в оперативной памяти. Только окончательные изменения впоследствии обновляются в DOM браузера, что обеспечивает быструю отрисовку.

JavaСкриптовые выражения: В JSX-файлах выражения JavaScript можно использовать с помощью фигурных скобок, например, {}.

Преимущества ReactJS

Вот важные преимущества использования ReactJS:

  • ReactJS использует виртуальный DOM, который задействует кэш данных в оперативной памяти, и в DOM браузера обновляются только окончательные изменения. Это делает приложение быстрее.
  • С помощью функции компонентов React вы можете создавать компоненты по своему выбору. Компоненты можно использовать повторно, и они также полезны для сопровождения кода.
  • ReactJS — это проект с открытым исходным кодом. JavaБиблиотека скриптов, так что начать работу с ней очень просто.
  • ReactJS быстро завоевал популярность и используется в таких продуктах, как Facebook и другие. InstagramЕго используют многие известные компании, такие как Apple. Netflix, и т.д.
  • Meta поддерживает библиотеку ReactJS, поэтому она хорошо поддерживается и обновляется.
  • ReactJS можно использовать для разработки насыщенного пользовательского интерфейса как для настольных, так и для мобильных приложений.
  • Легко отлаживать и тестировать, поскольку большая часть кода выполняется в JavaСценарий а не в HTML.

Недостатки ReactJS

Вот минусы и недостатки использования ReactJS:

  • Большая часть кода написана на JSX, то есть HTML и CSS являются его частью. JavaСкрипт. Это может быть довольно запутанно, поскольку большинство других фреймворков предпочитают kee.ping HTML отдельно от JavaКод скрипта.
  • Размер файлов ReactJS сравнительно велик.

Зная все нюансы, вы готовы к настройке React. Самый быстрый способ попробовать — это использовать его напрямую с CDN, что мы рассмотрим в первую очередь; настройка на основе npm для реальных проектов последует позже.

Использование ReactJS из CDN

Чтобы начать работать с React, нам сначала нужно добавить ReactJS на нашу страницу. Вы можете легко начать использовать ReactJS с помощью CDN. JavaСкриптовые файлы, как показано ниже.

Чтобы получить ссылки на CDN, перейдите на старый сайт документации React, например: https://legacy.reactjs.org/docs/cdn-links.htmlИ вы получите необходимые файлы, как показано на следующем изображении.

Использование ReactJS из CDN — страница со ссылками CDN в документации React

Для разработчиков

<script crossorigin src="https://unpkg.com/react@version/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@version/umd/react-dom.development.js"></script>

Для производства

<script crossorigin src="https://unpkg.com/react@version/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@version/umd/react-dom.production.min.js"></script>

Замените версия Укажите желаемую версию React для файлов react.development.js и react-dom.development.js. На этой странице мы используем версию 16, поэтому приведенные ниже примеры работают без изменений.

💡 Примечание: Эти сборки UMD/CDN — устаревший подход, который работает вплоть до React 18 и по-прежнему подходит для обучения. React 19 больше не поставляется со сборками UMD, а React 18+ был заменен. ReactDOM.render с createRoot — См. раздел о версиях React в конце этой страницы.

Если вы планируете использовать CDN-файлы, обязательно сохраните атрибут crossorigin, чтобы избежать проблем с междоменными запросами. Код ReactJS не может быть выполнен непосредственно в браузере и должен быть транспилирован с помощью Babel в обычный код. JavaСкрипт перед выполнением в браузере.

Вот скрипт BabelJS, который можно использовать:

<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>

Вот рабочий пример ReactJS с использованием CDN-файлов и скрипта BabelJS.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Hello World</title>
    <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="text/babel">
      ReactDOM.render(
        <h1>Hello, from Guru99 Tutorials!</h1>,
        document.getElementById('app')
      );
   </script>
  </body>
</html>

Выход:

Результат выполнения примера ReactJS на основе CDN: "Hello World"

В следующей главе мы подробно рассмотрим код; давайте посмотрим, как здесь работают файлы CDN. Использование скрипта Babel напрямую — не лучшая практика, и новичкам пока следует использовать его только для изучения ReactJS. В продакшене вам потребуется установить React с помощью пакета npm.

Использование пакетов NPM

Убедитесь, что у вас установлен Node.js. Если он не установлен, пройдите это руководство по установке Node.js (https://www.guru99.com/node-js-tutorial.html) монтаж.

После установки Node.js создайте папку. реакцияпроект/.

Чтобы начать настройку проекта, выполните команду инициализация нпм.

Вот как будет выглядеть структура папок:

reactproj\
package.json

Теперь установим те пакеты, которые нам нужны.

Вот список пакетов для ReactJS. Мы зафиксировали версию React на 16, поэтому... ReactDOM.render Примеры на этой странице работают точно так, как показано:

npm install react@16 --save
npm install react-dom@16 --save
npm install react-scripts --save

Откройте командную строку и выполните указанные выше команды в папке reactproj/.

Создать папку SRC / Здесь будет размещаться весь JS-код. Весь код для проекта ReactJS будет доступен в папке src/. Создайте файл index.js и импортируйте react и react-dom, как показано ниже.

index.js

import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
<h1>Hello, from Guru99 Tutorials!</h1>,
    document.getElementById('root')
);

Мы написали базовый код для ReactJS. Подробности мы объясним в следующей главе. Мы хотим отобразить Здравствуйте, от Guru99 УчебниковАналогичное значение присваивается элементу DOM с идентификатором «root». Он берется из файла index.html, который является начальным файлом, как показано ниже.

Создайте папку public/ и добавьте в неё файл index.html, как показано ниже.

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
  </head>
  <body>
    <div id = "root"></div>
   </body>
</html>

Пакет react-scripts позаботится о компиляции кода и запуске сервера для отображения HTML-файла, то есть index.html. Вам необходимо добавить команду в файл package.json, которая будет использовать react-scripts для компиляции кода и запуска сервера, как показано ниже:

 "scripts": {
    "start": "react-scripts start"
  }

После установки всех пакетов и добавления указанной выше команды окончательный файл package.json будет выглядеть следующим образом:

Пакет.json

{
  "name": "reactproj",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "react-scripts start"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-scripts": "^3.1.1"
  }
}

Для начала тестирования ReactJS выполните команду:

npm run start
C:\reactproj>npm run start
> reactproj@1.0.0 start C:\reactproj
> react-scripts start

Это откроет браузер с помощью URL http://localhost:3000/ как показано ниже:

общедоступный / index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
  </head>
  <body>
    <div id = "root"></div>
  </body>
</html>

Результат выполнения проекта React на основе npm в браузере.

Мы собираемся использовать тот же процесс для выполнения JavaСкриптовые файлы также будут рассмотрены в следующих главах. Добавьте все ваши файлы .js и .jsx в папку src/. Структура файлов будет следующей:

reactproj/
	 src/
	    index.js
	 node_modules/
	 public/
                index.html
	 package.json

Как создать свою первую настройку проекта React

В этом пошаговом руководстве по ReactJS вы найдете информацию о том, как начать создавать свое первое приложение React.

Шаг 1) Импортируйте пакеты реагирования.
1. Чтобы начать работу с ReactJS, нам нужно сначала импортировать пакеты реагирования следующим образом.

import React from 'react';
import ReactDOM from 'react-dom';

2. Сохраните файл как index.js в папке src/.

Шаг 2) Пишите просто Code.
В этом уроке мы напишем простой код React JS, в котором будем отображать сообщение «Привет от Guru99 уроков!

ReactDOM.render(

<h1>Hello, from Guru99 Tutorials!</h1>,
    document.getElementById('root')
);

ReactDOM.render добавлю тег к элементу с идентификатором root. Вот HTML-файл, который у нас есть:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
  </head>
  <body>
    <div id = "root"></div>
  </body>
</html>

Шаг 3) Скомпилируйте Code.

Далее в этом уроке по React.js нам нужно скомпилировать код, чтобы получить выходные данные в браузере.

Вот структура папок:

reactproj/
     node_modules/
     src/
       index.js
     package.json
     public/
          index.html

Мы добавили команды для компиляции окончательного файла в package.json следующим образом:

"scripts": {
    "start": "react-scripts start"
  },

Для компиляции итогового файла выполните следующую команду:

npm run start

При выполнении указанной выше команды файлы будут скомпилированы, и вы получите уведомление об ошибке. Если всё в порядке, откроется браузер и будет запущена страница по указанному адресу. http://localhost:3000/

Команда: запуск запуска npm:

C:\reactproj>npm run start

> reactproj@1.0.0 start C:\reactproj
> react-scripts start

Шаг 4) Проверьте вывод.
URL http://localhost:3000 После компиляции код откроется в браузере, как показано ниже:

Результат выполнения первого проекта React в браузере

Как настроить React с Vite (современный подход)

Приведенная выше настройка react-scripts взята из Create React App (CRA), который долгие годы был стандартным стартовым инструментом. Команда React официально объявила Create React App устаревшим в феврале 2025 года, поэтому для новых проектов следует использовать современный инструмент сборки. Сегодня наиболее популярным выбором является... Vite, что обеспечивает более быстрый запуск и меньший размер файлов сборки.

Вот как создать новый проект React с помощью Vite:

Шаг 1) Выполните команду создания структуры проекта в терминале:

npm create vite@latest my-react-app -- --template react

Шаг 2) Перейдите в папку и установите зависимости:

cd my-react-app
npm install

Шаг 3) Запустите сервер разработки:

npm run dev

Приложение Vite доступно по адресу: http://localhost:5173/ По умолчанию, и при сохранении файла происходит мгновенная перезагрузка.

Основные отличия от старой версии оформления этой страницы:

  • Входной файл — src/main.jsx вместо src/index.js.
  • Он устанавливает последнюю версию React, которая использует создатьRoot вместо ReactDOM.render.
  • Файл index.html находится в корне проекта, а не в папке public/.
  • Сборки создаются с помощью npm run build в папку dist/.

Для решения задач полного цикла, таких как маршрутизация и рендеринг на сервере, команда React также рекомендует использовать такие фреймворки, как... Next.jsВсе, что вы изучите в главах ниже — JSX, компоненты, состояние и свойства — без изменений применимо в проектах Vite или Next.js.

Что такое JSX?

JSX — это расширение JavaСкрипт. Это шаблонный скрипт, который позволит вам использовать возможности HTML и... JavaНапишите сценарий вместе.

Вот простой пример кода JSX.

const h1tag = "<h1>Hello, from Guru99 Tutorials!</h1>";

Зачем нам нужен JSX в React?

Для пользовательского интерфейса нам нужен HTML, и каждый элемент в DOM будет иметь события, которые необходимо обрабатывать, изменения состояния и т. д.

В случае React это позволяет нам использовать HTML и JavaСоздайте скрипт в том же файле и эффективно отслеживайте изменения состояния DOM.

Выражения в JSX

Вот простой пример использования выражений в JSX.

В более ранних примерах с ReactJS мы писали примерно следующее:

index.js

import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
<h1>Hello, from Guru99 Tutorials!</h1>,
    document.getElementById('root')
);

Теперь изменим приведенный выше код, чтобы добавить выражения. Выражения используются внутри фигурных скобок {} и разворачиваются во время выполнения. Выражения в React аналогичны выражениям в React. JavaСкриптовые выражения.

index.js

import React from 'react';
import ReactDOM from 'react-dom';

const display = "Hello, from Guru99 Tutorials!";
const h1tag = "<h1>{display}</h1>";
ReactDOM.render(
    h1tag,
    document.getElementById('root')
);

Давайте теперь проверим то же самое в браузере.

Выражения в JSX — вывод выражений без замены в браузере

Как видно на скриншоте выше, выражение {display} не заменяется. React не знает, что делать, когда выражение используется внутри файла .js.

Давайте теперь добавим изменения и создадим файл .jsx, как показано ниже:

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';

const display = "Hello, to Guru99 Tutorials";
const h1tag =<h1>{display}</h1>;
export default h1tag;

Мы добавили необходимый код и будем использовать файл test.jsx в index.js. Нам нужно, чтобы h1тег Эта переменная будет использоваться внутри файла index.js, поэтому она экспортируется так же, как показано выше в файле test.jsx.

Вот измененный код в файле index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import h1tag from './test.jsx';

ReactDOM.render(
    h1tag,
    document.getElementById('root')
);

Чтобы использовать файл test.jsx в index.js, необходимо сначала импортировать его, как показано ниже:

import h1tag from './test.jsx';

Теперь мы можем использовать тег h1tag в ReactDOM.render, как показано ниже:

ReactDOM.render(
    h1tag,
    document.getElementById('root')
);

Вот результат, когда мы проверяем то же самое в браузере:

JSX-выражение корректно отображается в браузере.

Что такое компоненты в ReactJS?

Компоненты как чистые JavaФункции скриптов, которые упрощают написание кода, разделяя логику на многократно используемые независимые фрагменты кода.

Компоненты как функции

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';
function Hello() {
    return <h1>Hello, from Guru99 Tutorials!</h1>;
}
const Hello_comp = <Hello />;
export default Hello_comp;

Мы создали функцию под названием Привет Функция возвращает тег h1, как показано выше. Название функции выступает в роли элемента, как показано ниже:

const Hello_comp = <Hello />;
export default Hello_comp;

Компонент Привет используется в качестве HTML-тега, т. е. , назначенный на Привет_комп переменная, и та же самая экспортируется с помощью функции экспорта.

Теперь давайте используем этот компонент в файле index.js, как показано ниже:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './test.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

Вот вывод в браузере:

Вывод функционального компонента в ReactJS

Класс как компонент

Вот пример ReactJS, в котором в качестве компонента используется класс.

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  render() {
    return <h1>Hello, from Guru99 Tutorials!</h1>;
  }
}
export default Hello;

Компонент Hello можно использовать в файле index.js следующим образом:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './test.jsx';

ReactDOM.render(
    <Hello />,
    document.getElementById('root')
);

Компонент Hello используется как HTML-тег, т. е. .

Вот результат того же самого.

Вывод класса как компонента в браузере

Компоненты классов против функциональных компонентов и хуков

Теперь вы рассмотрели оба способа написания компонента, так какой же из них следует использовать? На этой странице рассматриваются классовые компоненты, поскольку они делают концепции состояния и жизненного цикла более понятными, что ценно для начинающих и до сих пор встречается в устаревших кодовых базах. Однако, начиная с React 16.8, где появились хуки, функциональные компоненты также могут хранить состояние, и именно их стиль рекомендуется использовать для всего нового кода.

Аспект Компонент класса Функциональный компонент с хуками
Область this.state и this.setState() хук useState()
Жизненный цикл componentDidMount, componentDidUpdate, componentWillUnmount Хук useEffect() охватывает все три варианта.
Синтаксис Ещё немного шаблонного кода (конструктор, привязка, this) Короче, без этого ключевого слова
Статус Поддерживается, устаревший стиль Рекомендуется для нового кода

Вот пример кода состояния с этой страницы, переписанный с использованием хука useState:

import React, { useState } from 'react';

function Hello() {
  const [msg] = useState("Hello, from Guru99 Tutorials!");
  return <h1>{msg}</h1>;
}
export default Hello;

Обе версии выдают одинаковый результат. Изучите синтаксис классов, используемый в главах ниже, а затем попрактикуйтесь в преобразовании каждого примера в хуки.

Что такое состояние в ReactJS?

Государство – это JavaОбъект скрипта, аналогичный свойствам (props), содержит данные, используемые при рендеринге в ReactJS. Данные состояния являются приватным объектом и используются внутри компонентов в рамках класса.

Пример состояния

Вот рабочий пример использования состояния внутри класса.

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
       msg: "Hello, from Guru99 Tutorials!"
    }
  }
  render() {
    return <h1>{this.state.msg}</h1>;
  }
}
export default Hello;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './test.jsx';

ReactDOM.render(
    <Hello />,
    document.getElementById('root')
);

Вот что мы получаем, когда тестируем это в браузере:

В выводе ReactJS отображается сообщение из состояния.

Что такое реквизиты в ReactJS?

Свойства (props) — это параметры, используемые внутри компонента. Они выступают в роли глобальных объектов или переменных, которые можно использовать внутри компонента.

Реквизит функционального компонента

Вот пример передачи реквизита функциональному компоненту.

import React from 'react';
import ReactDOM from 'react-dom';
function Hello(props) {
    return <h1>{props.msg}</h1>;
}
const Hello_comp = <Hello msg="Hello, from Guru99 Tutorials!" />;
export default Hello_comp;

Как показано выше, мы добавили MSG приписать компонент. Доступ к нему можно получить следующим образом: реквизит внутри функции Hello находится объект, который будет содержать MSG детали атрибута, и то же самое используется в качестве выражения.

Компонент используется в index.js следующим образом:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './test.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

Вот вывод в браузере:

Свойства для вывода функционального компонента в браузере

Реквизит для компонента класса

Для доступа к свойствам класса можно использовать следующий способ:

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  render() {
    return <h1>{this.props.msg}</h1>;
  }
}
export default Hello;

MSG Атрибут передается компоненту в index.js следующим образом:

import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './test.jsx';

ReactDOM.render(
    <Hello msg="Hello, from Guru99 Tutorials!" />,
    document.getElementById('root')
);

Это вывод в браузере:

Благодарность компоненту класса за его вывод в браузере.

Также проверьте: - Учебное пособие по AngularJS для начинающих: изучайте AngularJS шаг за шагом

Жизненный цикл компонента

После рассмотрения компонентов, состояния и свойств, следующим шагом является понимание того, когда React вызывает методы вашего компонента. Жизненный цикл компонента делится на этапы инициализации, монтирования, обновления и размонтирования.

Здесь приведено подробное объяснение каждого этапа.

Компонент в ReactJS имеет следующие этапы:

Инициализация: это первый этап жизненного цикла компонента.

Здесь он будет иметь реквизиты по умолчанию и состояние на начальном уровне.

ИсполнениеНа этом этапе компонент отображается внутри DOM. В состоянии монтирования нам доступны следующие методы:

  • render(): Этот метод есть у всех созданных компонентов. Он возвращает HTML-узел.
  • componentDidMount(): Этот метод вызывается сразу после добавления компонента в DOM.

Обновление ПОВ этом состоянии пользователь взаимодействует с DOM, и он обновляется. Например, вы вводите что-то в текстовое поле, и свойства состояния обновляются.

Ниже перечислены методы, доступные в состоянии обновления:

  • shouldComponentUpdate(): вызывается перед повторной отрисовкой; позволяет решить, следует ли обновлять компонент. Возврат значения true приводит к повторной отрисовке компонента.
  • componentDidUpdate(): вызывается после обновления компонента.

Размонтирование: Это состояние возникает, когда компонент не требуется или удаляется.

Ниже описан метод, доступный в состоянии размонтирования:

  • componentWillUnmount(): вызывается непосредственно перед удалением или уничтожением компонента.

Рабочий пример методов анализа жизненного цикла.

Вот рабочий пример, демонстрирующий методы, вызываемые на каждом этапе.

Пример: complife.jsx

import React from 'react';
import ReactDOM from 'react-dom';
class COMP_LIFE extends React.Component {
  constructor(props) {
    super(props);
    this.state = {name: ''};

    this.UpdateName = this.UpdateName.bind(this);
    this.testclick = this.testclick.bind(this);
  }

  UpdateName(event) {
    this.setState({name: event.target.value});
  }

  testclick(event) {
    alert("The name entered is: "+ this.state.name);
  }

  componentDidMount() {
    console.log('Mounting State : calling method componentDidMount');
  }

  shouldComponentUpdate() {
    console.log('Update  State : calling method shouldComponentUpdate');
    return true;
  }

  componentDidUpdate() {
    console.log('Update  State : calling method componentDidUpdate')
  }
  componentWillUnmount() {
    console.log('UnMounting State : calling method componentWillUnmount');
  }

  render() {
    return (
      <div>
         Enter Your Name:<input type="text" value={this.state.name} onChange={this.UpdateName} /><br/>
        <h2>{this.state.name}</h2>
        <input type="button" value="Click Here" onClick={this.testclick} />
      </div>
    );
  }
}

export default COMP_LIFE;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import COMP_LIFE from './complife.jsx';

ReactDOM.render(
    <COMP_LIFE />,
    document.getElementById('root')
);

При проверке результата в браузере:

Пример жизненного цикла, отображаемый в браузере.

В консоли браузера вы увидите:

Вывод консоли браузера, отображающий сообщение componentDidMount.

Когда пользователь вводит в текстовое поле:

Обновление состояния компонента поля ввода текста

В консоли отображаются следующие сообщения:

Вывод консоли, отображающий срабатывание методов жизненного цикла обновления.

Теперь, когда вы знаете, когда компонент отображается и обновляется, давайте применим состояние и события к практическому примеру: обработке пользовательского ввода через формы.

Работа с формами

В ReactJS HTML-элементы ввода, такие как , Элементы <select /> и <select /> имеют собственное состояние и должны обновляться при взаимодействии пользователя с помощью метода setState().

В этой главе мы рассмотрим, как работать с формами в ReactJS.

Вот рабочий пример:

форма.jsx

import React from 'react';
import ReactDOM from 'react-dom';
class Form extends React.Component {
  constructor(props) {
    super(props);
    this.state = {name: ''};

    this.UpdateName = this.UpdateName.bind(this);
    this.formSubmit = this.formSubmit.bind(this);
  }

  UpdateName(event) {
    this.setState({name: event.target.value});
  }

  formSubmit(event) {
    alert("The name entered is: "+ this.state.name);
  }

  render() {
    return (
      <form>
         Enter Your Name:<input type="text" value={this.state.name} onChange={this.UpdateName} /><br/>
        <h2>{this.state.name}</h2>
        <input type="submit" value="Submit" onClick={this.formSubmit} />
      </form>
    );
  }
}

export default Form;

Для полей ввода нам необходимо поддерживать состояние, поэтому React предоставляет для этого специальный метод, называемый setState, что помогает поддерживать состояние при каждом изменении. В реальном приложении также вызывается . event.preventDefault() Используйте метод `inside formSubmit`, чтобы предотвратить перезагрузку страницы браузером при отправке формы.

Мы использовали события onChange и onClick для текстового поля и кнопки отправки. Когда пользователь вводит текст в текстовое поле, вызывается событие onChange, и поле имени в объекте состояния обновляется, как показано ниже:

UpdateName(event) {
    this.setState({name: event.target.value});
  }

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Form from './form.jsx';

ReactDOM.render(
    <Form />,
    document.getElementById('root')
);

Вывод в браузере следующий:

Работа с формами — первоначальный вывод формы.

Шаг 1) Введите своё имя в текстовое поле:

Работа с формами - имя, введенное в текстовое поле

Шаг 2) Нажмите кнопку «Отправить»:

Работа с формами — после отправки формы появляется предупреждение.

Работа с событиями в ReactJS

Формы — лишь один из способов взаимодействия с пользователем. Работа с событиями в ReactJS ничем не отличается от того, как это делалось бы в других приложениях. JavaСкрипт. Вы можете использовать все обработчики событий, которые используются в JavaСкрипт. Метод setState() используется для обновления состояния при взаимодействии пользователя с любым HTML-элементом.

Вот рабочий пример использования событий в ReactJS.

события.jsx

import React from 'react';
import ReactDOM from 'react-dom';
class EventTest extends React.Component {
  constructor(props) {
    super(props);
    this.state = {name: ''};

    this.UpdateName = this.UpdateName.bind(this);
    this.testclick = this.testclick.bind(this);
  }

  UpdateName(event) {
    this.setState({name: event.target.value});
  }

  testclick(event) {
    alert("The name entered is: "+ this.state.name);
  }

  render() {
    return (
      <div>
         Enter Your Name:<input type="text" value={this.state.name} onChange={this.UpdateName} /><br/>
        <h2>{this.state.name}</h2>
        <input type="button" value="Click Here" onClick={this.testclick} />
      </div>
    );
  }
}

export default EventTest;

Для полей ввода нам необходимо поддерживать состояние, и для этого React предоставляет... setState метод, который помогает поддерживать состояние при каждом изменении.

Мы использовали события по изменению и по щелчку на текстовом поле и кнопке. Когда пользователь вводит текст в текстовое поле, по изменению Событие вызывается, и поле имени внутри объекта состояния обновляется, как показано ниже:

UpdateName(event) {
    this.setState({name: event.target.value});
  }

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import EventTest from './events.jsx';

ReactDOM.render(
    <EventTest />,
    document.getElementById('root')
);

Вот вывод в браузере:

Работа с событиями — первоначальный вывод в браузере.

Когда пользователь вводит имя:

Работа с событиями — имя отображается по мере ввода пользователем данных.

Когда пользователь нажимает кнопку «Нажмите здесь»:

Работа с событиями — всплывающее сообщение при нажатии кнопки.

Работа со встроенным CSS в ReactJS

После того, как ваши компоненты обработают данные и события, последним шагом будет их стилизация. Мы рассмотрим работающий пример, чтобы понять, что такое встроенный CSS в ReactJS.

addstyle.jsx

import React from 'react';
import ReactDOM from 'react-dom';

const h1Style = {
    color: 'red'
};

function Hello(props) {
    return <h1 style={h1Style}>{props.msg}</h1>;
}
const Hello_comp = <Hello msg="Hello, from Guru99 Tutorials!" />;
export default Hello_comp;

Я добавил стиль color: 'red' к тегу h1.

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './addstyle.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

Вывод в браузере следующий:

Работа с встроенными CSS-стилями — вывод с красным заголовком

Вы можете создать объект с нужным стилем для элемента и использовать выражение для добавления стиля, как показано в примере выше.

Работа с внешним CSS в ReactJS

Давайте создадим внешний CSS-файл. Для этого создадим папку css/ и добавим в неё файл style.css.

style.css

.h1tag {
color:red;
}

Добавьте style.css в файл index.html.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div id = "root"></div>
  </body>
</html>

Теперь добавим класс к тегу h1 в файле .jsx.

addstyle.jsx

import React from 'react';
import ReactDOM from 'react-dom';

let classforh1 = 'h1tag';

function Hello(props) {
    return <h1 className={classforh1}>{props.msg}</h1>;
}
const Hello_comp = <Hello msg="Hello, from Guru99 Tutorials!" />;
export default Hello_comp;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './addstyle.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

Атрибут className содержит сведения о классе. Обратите внимание, что JSX использует имя класса вместо атрибута `class` в HTML, поскольку `class` является зарезервированным ключевым словом. JavaСкрипт. Теперь давайте протестируем его в браузере.

Работа с внешними CSS-стилями — стилизованный вывод заголовка

Вот что вы видите, когда проверяете тег h1 в браузере:

Работа с внешними CSS-стилями — проверка тега h1, отображение класса

Как видите, класс "h1tag" успешно добавлен к тегу h1.

Почему ReactDOM.render был заменен на createRoot?

В каждом примере на этой странице приложение монтируется с помощью ReactDOM.render, что корректно для React 16 и 17, версий, на которые ориентирован этот курс. React 18, выпущенный в марте 2022 года, заменил эту точку входа на API createRoot, а React 19 полностью удалил ReactDOM.render. Причина — параллелизм: createRoot позволяет React одновременно подготавливать несколько версий пользовательского интерфейса, прерывать рендеринг с низким приоритетом и поддерживать...ping Анимация плавная. От неё зависят такие функции, как автоматическая пакетная обработка, useTransition и потоковая передача на основе Suspense.

Современный аналог файла index.js, используемого на этой странице, выглядит следующим образом:

import { createRoot } from 'react-dom/client';

const root = createRoot(document.getElementById('root'));
root.render(<h1>Hello, from Guru99 Tutorials!</h1>);

Всё остальное, чему вы здесь научились — компоненты, JSX, состояние, свойства и события — работает так же после этого изменения в одну строку в точке входа. Различия в версиях, подобные этому, часто встречаются в коде. Вопросы для собеседования по React JSПоэтому полезно понимать оба API.

Часто задаваемые вопросы (FAQ)

ReactJS — это библиотека, а не полноценный фреймворк. Он ориентирован исключительно на создание пользовательского интерфейса. Для маршрутизации, получения данных и серверного рендеринга разработчики используют его в паре с такими инструментами, как React Router, или фреймворками, например, React Router. Next.js.

С твердым JavaОсвоив основы программирования, большинство учащихся осваивают компоненты, JSX, состояние и свойства за две-четыре недели регулярной практики. Для подготовки к работе, включая хуки, маршрутизацию и вызовы API, обычно требуется два-три месяца, в течение которых учатся создавать небольшие проекты.

ReactJS использует рендеринг в DOM браузера для создания веб-сайтов, в то время как React Native использует ту же компонентную модель для создания нативных приложений iOS и других приложений. Android приложения. Навыки переносятся между двумя системами, но React Native заменяет HTML-теги нативными компонентами пользовательского интерфейса.

Да. Помощники, такие как Второй пилот GitHub и ChatGPT Может создавать каркасы компонентов, объяснять ошибки и преобразовывать классовые компоненты в хуки. Всегда проверяйте сгенерированный код, поскольку ИИ может предлагать устаревшие API, такие как ReactDOM.render.

В ближайшей перспективе это маловероятно. Искусственный интеллект ускоряет рутинное программирование, но разработчики по-прежнему необходимы для проектирования архитектуры компонентов, управления состоянием приложения, проверки доступности и отладки проблем в производственной среде. Изучение React в сочетании с рабочими процессами, поддерживаемыми ИИ, делает вас более ценным сотрудником, а не менее.

Также проверьте: - 70 лучших вопросов и ответов на собеседовании по React (обновлено)

Подведем итог этой публикации следующим образом: