Similar presentations:
React
1.
Проектирование и разработка веб-приложений. Лекция 3.React
Компоненты. Рендеринг. Состояния. Библиотеки.
Москва, 2024
2.
ReactОсобенности
Области применения
Методы поиска элементов
JSX
Обработка кода реактом
Компоненты
Состояния
Повестка дня
Map
События
Запуск
Библиотеки
3.
Зачем React?React - библиотека для создания пользовательских интерфейсов. С
помощью созданных интерфейсов реализуется последовательное
исполнения функций.
3
4.
Особенности ReactВиртуальный DOM
Разметка и относящаяся к ней логика находятся рядом и связаны друг с
другом. Это упрощает дальнейшую работу с кодом.
Самостоятельные компоненты импортируются отдельно. Это значит, что
можно очень легко их переиспользовать.
Больше не нужно использовать идентификаторы для обращения к DOMэлементам, что также делает код более легко поддерживаемым.
Состояние компонента изолировано: нет никакой возможности
модифицировать значение извне, если мы явно такое не задумывали.
Благодаря этому поток данных в приложении становится более
предсказуемым, что упрощает разработку и отладку.
4
5.
Когда используется?Для групповых проектов,
предрасположенных к расширению
Legacy-проектам, которым предстоит
пройти через рефакторинг.
Не для одностраничных приложений
React в целом потребляет много ресурсов.
5
6.
Поиск элементов<ul>
<li>Этот</li>
getElementById(id)
querySelectorAll(css)
querySelector(css)
<li>тест</li>
</ul>
<ul>
<li>полностью</li>
<li>пройден</li>
getElementsByTagName(tag
)
</ul>
getElementsByName(name)
let elements = document.querySelectorAll('ul > li:last-child');
getElementsByClassName
(className)
<script>
for (let elem of elements) {
alert(elem.innerHTML); // "тест", "пройден"
}
</script>
6
7.
JSXJSX — расширение языка JavaScript.
JSX производит «элементы» React.
const name = ‘Леонтий';
const element = <h1>Здравствуй, {name}!</h1>;
const element = <h1>Привет, мир!</h1>;
7
8.
export const Context = createContext(null);Render-инг
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<Context.Provider value={{
Для рендеринга React-элемента,
сперва нужно передать DOM-элемент
в ReactDOM.createRoot(), далее
верните React-элемент в root.render()
user: new UserStore(),
client: new ClientStore(),
employee: new EmployeeStore(),
studios: new StudioStore(),
orders: new OrderStore(),
Корневой узел
service: new ServiceStore(),
service_execution: new ServiceExecutionStore()
}}>
<App />
</Context.Provider>
8
);
9.
КомпонентыДля чего нужны
Вместо того, чтобы
искусственно разделить
технологии, помещая
разметку и логику в разные
файлы, React разделяет
ответственность с помощью
слабо связанных единиц,
называемых «компоненты»,
которые содержат и разметку,
и логику.
9
10.
КомпонентыЗависимости
Когда React встречает
встроенный элемент,
он собирает все JSXатрибуты и дочерние
элементы в один объект
и передаёт их нашему
компоненту. Этот объект
называется «пропсы» (props).
class Welcome extends React.Component {
render() {
return <h1>Привет, {this.props.name}</h1>;
}
}
10
11.
КомпонентыЭлементы
const divStyle = {
color: 'blue',
backgroundImage: 'url(' + imgUrl + ')',
};
function HelloWorldComponent() {
return <div style={divStyle}>Привет, мир!</div>;
}
className
style
function createMarkup() {
return {__html: 'Первый · Второй'};
}
dangerouslySetInnerHTML
(innerHTML )
function MyComponent() {
return <div dangerouslySetInnerHTML={createMarkup()} />;
}
<div className='layer animation' id='layer1'>
<h1 id='href0'>Containers Legalize</h1>
</div>
11
12.
СостоянияВарианты
Состояние
контролируется
и доступно только
конкретному
компоненту.
12
13.
СостоянияЖизненный цикл
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
constructor(props): конструктор, в
котором происходит начальная
инициализация компонента
componentWillUnmount() {
clearInterval(this.timerID);
}
static getDerivedStateFromProps(props,
state): вызывается непосредственно
перед рендерингом компонента.
tick() {
this.setState({
date: new Date()
});
}
render() {
return (
<div>
<h1>Привет, мир!</h1>
<h2>Сейчас {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
render(): рендеринг компонента
componentDidMount(): вызывается после
рендеринга компонента. Здесь можно
выполнять запросы к удаленным
ресурсам
}
componentWillUnmount(): вызывается
перед удалением компонента из DOM
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Clock />);
13
14.
СостоянияХуки
Хуки — это функции,
с помощью которых вы можете
«подцепиться» к состоянию
и методам жизненного цикла
React из функциональных
компонентов.
useState
useEffect
useContext
14
15.
MobXMobX - это "проверенная в боях" библиотека,
которая делает управление состоянием простым
и масштабируемым за счёт функциональноobserver
реактивного программирования (TFRP).
makeAutoObservable
15
16.
MapMap - функция перебора массива.
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map((number) => number * 2);
console.log(doubled);
Этот код выведет [2, 4, 6, 8, 10] в консоль.
function NumberList(props) {
const numbers = props.numbers;
const listItems = numbers.map((number) =>
<li>{number}</li>
);
return (
<ul>{listItems}</ul>
);
}
const numbers = [1, 2, 3, 4, 5];
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<NumberList numbers={numbers} />);
16
17.
onClickСобытия
Виды
onSubmit
onCopy
onFocus
onChange
onInvalid
onLoad
onMouseEnter
onSelect
onScroll
17
18.
СобытияHTML
<button onclick="activateLasers()">
Обработка
Активировать лазеры
</button>
React
<button onClick={activateLasers}>
Активировать лазеры
</button>
<button onClick={(e) => this.deleteRow(id, e)}>Удалить строку</button>
18
19.
Запускmy-app
├── README.md
├── node_modules
├── package.json
├── .gitignore
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── manifest.json
└── src
├── App.css
├── App.js
├── App.test.js
├── index.css
├── index.js
├── logo.svg
└── serviceWorker.js
└── setupTests.js
npm init react-app my-app
http://localhost:3000
Требования:
Yarn или npm
Сборщик и компилятор (уже включены)
Node.js
Редактор исходного кода
19
20.
БиблиотекиЗависимости
mobx/mobx-react-lite
bootstrap/react-bootstrap
react-dom
react-router-dom
npm install react-bootstrap bootstrap
.
import { Button } from 'react-bootstrap'
axios
<Button variant=‘primary'>
Нажми меня
</Button>
jwt-decode
20
21.
const user = {name: 'Hedy Lamarr',
imageUrl: 'https://i.imgur.com/yXOvdOSs.jpg',
imageSize: 90,
};
Пример
export default function Profile() {
return (
<>
<h1>{user.name}</h1>
<img
className="avatar"
src={user.imageUrl}
alt={'Photo of ' + user.name}
style={{
width: user.imageSize,
height: user.imageSize
}}
/>
</>
);
21
}
22.
Задание №1Написать одностраничное резюме на React:
1) 5 граф с данными: ФИО (посередине колонки) и дата
рождения, образование, навыки (в виде списка), опыт
работы, о себе.
2) У каждой графы есть заголовок с иконкой, причём эта
комбинация должна быть подчёркнута и на одном
уровне. Расстояние между - 3% от подчёркивания.
3) В правом верхнем углу на расстоянии 5 px от границ
страницы вставить фото 80х120.
4) Под фото разместить графу контакты и ограничить её
рамкой.
22
23.
Задание №2С помощью React создать форму создания героя.
1 разработчик:
1. Создать форму из 3 полей: никнейм (не менее 3 и не более 10 символов), выбор расы в виде Radio-кнопок в строку, поле с выпадающим меню для выбора класса.
Сверху над полем отображать его название. Поле с названием объединить в рамку.
2. Создать кнопку тёплого цвета для отправки первых данных. Кнопка должна располагаться посередине относительно полей формы. А внутри предложение
«продолжить». При нажатии на кнопку данные должны с помощью события onChange записываться в объект useState, если они валидны. Если поля не заполнены
или заполнены неверно, необходимо вывести красным шрифтом запись о каждом некорректно заполненным поле.
3. Под формой с появляющимися далее предметами нарисовать кнопку продолжения. Написать функцию для проверки выбранных предметов, если из больше или
меньше трёх - пользователю необходимо также вывести красный текст с ошибкой.
4. Кнопка сброса должна убрать выделение с предметов, чтобы их можно было выбрать заново.
2 разработчик:
1. Создать форму с выбором доступных для героя предметов. Набор предметов зависит от расы и класса игрока. То есть при подтверждении должна вызываться функция
для отбора подходящих лутов. Напишите эту функцию.
2. Доступные предметы должны отобразиться пользователю в виде кнопок, которые он может нажать, снизу должна быть инструкция. Нажатые кнопки меняют цвет
(считаясь выбранными), а снизу вместо надписи «выберите экипировку» должна появиться кнопка сброса выбора. Слева от этих кнопок должна быть информация и
герое.
3. После сохранения данных о предметах, они должны добавить в useState. Далее ниже на странице должна появиться карточка (рамка) с новым профилем игрока: картинка
героя, снизу никнейм, раса и класс. Картинка-иконка героя должна меняться в зависимости от класса, расы и предметов героя. Напишите соответствующую функцию для
генерации.
23
24.
Задание №3С помощью React создать форму с функциями валидации.
1 вариант:
1. Создать форму из 2 числовых поля (одно не менее 5 цифр, другое максимально из 8), поле с мультивыбором (checkbox), 1
строковое и поле со временем для заполнения (указать тип поля). Сверху над полем отображать его название. А внутри
правила заполнения. Поле с названием объединить в рамку.
2. Создать кнопку зелёного цвета для отправки. Кнопка должна располагаться посередине относительно полей формы.
3. При нажатии на кнопку данные должны с помощью состояния useEffect записываться в объект, если они валидны. После
чего выводиться на экран пользователю в любом виде (alert, innerHTML, на др. странице). Если поля не заполнены или
заполнены неверно, необходимо вывести красным шрифтом запись о каждом некорректно заполненным поле.
2 вариант:
1. Создать форму из 2 текстовых полей (одно не менее 3 символов, другое максимально из 20), поля с
вариантами выбора, 1 числового поля и поля в виде даты для заполнения (указать тип поля). Каждое поле с
новой строки посередине страницы. Внутри поля отображать его название (placeholder).
2. При вводе пользователем данных в поле, они должны сразу сохраняться в переменную состояния useState,
и при неправильном заполнении отображать ошибку снизу от кнопки.
3. Создать кнопку отправки данных также посередине с зелёным фоном. При нажатии должно выводиться
сообщение о незаполнение полей, если таковые имеются или об успешном сохранении данных.
24
programming