React Flashcards

1
Q

Что такое React и его особенности?

A

React - библиотека js, используется для создания UI с виртуальным DOM, подходит для создания SPA.

Особенности React:
1) работает с виртуальным DOM
2) компонентная структура
3) использование JSX (js + XML)
4) необходим компилятор Babel:


How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Виртуальный DOM

A

Виртуальный DOM - легковесная копия обычного DOM с которой работает React, изменения сначала вносятся в него, а затем React находит минимальное количество манипуляций, которые необходимы для обновления реального DOM и производит их:
- высокая производительность
- будут обновляться только конкретные html-узлы, а не весь DOM

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Пример использования React

A

//1. html-элемент, в который будет рендериться виртуальный DOM
const rootNode = document.getElementById(“my_div”);

// 2. получаем корневой элемент
const root = ReactDOM.createRoot(rootNode);

//3. рендеринг в корневой элемент
root.render(<h1>Hello React</h1>);

//получим:

<div>
<h1>Hello React</h1>
</div>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

JSX

A

JSX - необязательный способ описания визуального кода посредством комбинации кода js + XML, для компиляции используется Babel:
- похоже на движок Razor (C# + html)

//пример:
root.render(<h2>2 + 2 = {2 + 2}</h2>);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Подгрузка скрипта JSX из файла

A

Babel подгружает скрипты из файлов .jsx через AJAX-запросы => поэтому приложение React нужно поднять на сервере (например node.js), с которого можно будет запрашивать статические файлы.

//подключение скрипта .jsx


How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Валидация значений в формах

A

Валидация значений - производится с помощью дополнительных методов компонента.

Пример:
class AgeField extends React.Component {
constructor(props) {
super(props);
var isValid = this.validate(props.value);
this.state = {value: props.value, valid: isValid};
this.onChange = this.onChange.bind(this);
}
validate(val){
return val>=0;
}
onChange(e) {
var val = e.target.value;
var isValid = this.validate(val);
this.setState({value: val, valid: isValid});
}
render() {
var color = this.state.valid===true?”green”:”red”;
return <p>
<label>Возраст:</label><br></br>
<input type=”number” value={this.state.value} onChange={this.onChange} style={{borderColor:color}} />
</p>;
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Компоненты React

A

Компоненты React - аналогичны функциям js, возвращают ReactElement, могут быть созданы как функции или классы.
- как функции:
function Hello() {
return <h1>Привет, Eugene</h1>;
}

  • как классы (нужно наследовать React.Component):
    class Hello extends React.Component {
    render() {
    return <h1>Привет, Eugene</h1>;
    }
    }

Использование компонентов:
root.render(<Hello></Hello>);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Props

A

Props - аргумент функции компонента, представляет собой коллекцию пар ключ-значение:

function Hello(props) {
return <div>
<p>Имя: {props.name}</p>
<p>Возраст: {props.age}</p>
</div>;
}

//использование:
root.render(<Hello></Hello>);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

События компонентов

A

//В функциональных компонентах:
function ClickButton(props) {
function press(){
alert(“Hello React!”)
}
return <button onClick={press}>Click</button>;
}

//в компонентах-классах
class ClickButton extends React.Component {
press(){
alert(“Hello React from class-component!”);
}
render() {
return <button onClick={press}>Click</button>;
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Webpack

A

Webpack - упаковщик модулей, позволяющий автоматизировать создание из нескольких файлов один.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

React Маршрутизация с ReactRouterDOM.BrowserRouter

A

React имеет систему маршрутизации, сопоставляющую запросы с компонентами в порядке определения маршрутов (нужен веб-сервер).

ReactRouterDOM.BrowserRouter - позволяет задать сопоставление маршрутов в виде объектов Route.

Пример:
const Router = ReactRouterDOM.BrowserRouter;
const Route = ReactRouterDOM.Route;
const Routes = ReactRouterDOM.Routes;

//компоненты
function About(){
return <h2>О сайте</h2>;
}
function NotFound(){
return <h2>Ресурс не найден</h2>;
}

function Main(){
    return <h2>Главная</h2>;
}

root.render(
    <Router>
        <div>
          <Routes>
            <Route path="/" element={<Main />} />
            <Route path="/about" element={<About />} />
            <Route path="*" element={<NotFound />} />
           </Routes>
        </div>
    </Router> );
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Дочерние маршруты

A

Дочерние маршруты - отсчитываются от родительского маршрута:
- определяются в родительском компоненте или вне с помощью Outlet.

    function Products(){
        return <div>
            <h2>Товары</h2>
                <Routes>
                    <Route path="/phones" element={<Phone />} />
                    <Route path="/tablets" element={<Tablet />} />
                </Routes>
            </div>;
    }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Параметры маршрутов

A

Параметры маршрутов - могут быть получены в компоненте через хук useParams:

//компонент:
function Product(){
// получаем параметры
const params = useParams();
const prodId = params.id;
return <h2>Товар № {prodId}</h2>;
}

//маршрут
<Route path=”:id” element={<Product></Product>} />

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Параметры строки запроса

A

Параметры строки запроса - могут быть получены в компоненте через хук useSearchParams:

//компонент
function Home(){
// получаем параметры маршрута
const params = useParams();
// получаем параметры строки запроса
const [searchParams, setSearchParams]
= useSearchParams();
return <div>
<h2>Главная</h2>
<p>Id: {params.id}</p>
<p>Name: {searchParams.get(“name”)}</p>
<p>Age: {searchParams.get(“age”)}</p>
</div>;
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Переадресация с ReactRouterDOM.Navigate

A

<Router>
<div>
<nav>
<link></link>Home</Link> |
<link></link>Old</Link> |
<link></link>New</Link>
</nav>
<Routes>
<Route path="/" element={<Home></Home>} />
<Route path="/new" element={<New></New>} />
<Route path="/old" element={<Navigate></Navigate>} />
</Routes>
</div>
</Router>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Программная навигация

A

Программная навигация - через хук useNavigate:
//компонент:
function Old(){
const params = useParams();
const id = params.id;
const navigate = useNavigate();
return <div>
<h2>Old {id}</h2>
<button
onClick={async event => {
navigate(/new/${id});
}}
> Navigate</button>
</div>;
}

16
Q

React Состояния компонентов

A

state - изменяемый объект, описывающий внутреннее состояние компонента, определяется внутри компонента и доступен только внутри компонента.

class Hello extends React.Component {
constructor(props) {
super(props);
this.state = {welcome: “Добро пожаловать на сайт!”};
}
render() {
return <h1>{this.state.welcome}</h1>;
}
}

17
Q

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

A

Этапы жизненного цикла:
1) constructor(props): начальная инициализация компонента
2) static getDerivedStateFromProps(props, state): вызывается непосредственно перед рендерингом компонента. Этот метод должен возвращать объект для обновления объекта state или значениеnull, если нечего обновлять.
3) shouldComponentUpdate(nextProps, nextState): вызывается каждый раз при обновлении объекта props или state
4) render(): рендеринг компонента
5) getSnapshotBeforeUpdate(prevProps, prevState): вызывается непосредственно перед обновлением компонента, позволяет компоненту получить информацию из DOM перед возможным обновлением
6) componentDidUpdate(prevProps, prevState, snapshot): вызывается сразу после обновления компонента
7) componentDidMount(): вызывается после рендеринга компонента.
8) componentWillUnmount(): вызывается перед удалением компонента из DOM

18
Q

React Хуки

A

Хуки - функции (позволяют определять и использовать состояние и другие возможности React без создания классов).
Встроенные хуки:
- useState: предназначен для управления состоянием компонентов
- useEffect: предназначен для перехвата различного рода изменений в компонентах, которые нельзя обработать внутри компонентов
- useContext: позволяет подписываться на контекст React
- useReducer: позволяет управлять локальным состоянием сложных компонентов
- useCallback: позволяет управлять функциями обратного вызова
- useMemo: предназначен для управления мемоизированными (грубо говоря кэшированными) значениями
- useRef: возвращать некоторое изменяемое значение, например, ссылку на html-элементы DOM, которыми затем можно управлять в коде JavaScript
- useImperativeHandle: настраивает объект, который передается родительскому компоненту при использовании ref
- useLayoutEffect: аналогичен хукуuseEffect(), но вызывается синхронно после всех изменений в структуре DOM
- useDebugValue: предназначен для отображения некоторого значения в целях отладки
- useId: предназначен для генерации уникального идентификатора
- useTransition: применяется для создания переходов при рендеринге
- useSyncExternalStore: предназначен для синхронизации данных с внешними хранилищами
- useInsertionEffect: предназначен для библиотек, которые используют CSS в JS, для оптимизации при внедрении стилей при рендеринге

19
Q

Ограничения при использовании хуков

A

1) Хуки вызываются только на верхнем уровне компонента (не вызываются внутри вложенных блоков)
2) Хуки можно вызывать только из функциональных компонентов