react Flashcards

1
Q

Для чего нужен Virtual DOM в React?

A

Виртуальный DOM - это концепция программирования, в которой «виртуальное» представление пользовательского интерфейса хранится в памяти и синхронизируется с «настоящим» DOM при помощи библиотеки, такой как ReactDOM. Эта техника позволяет улучшить производительность на клиентской стороне, избегая прямой работы с DOM путем работы с легким JavaScript-объектом, имитирующем DOM-дерево.

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

Какая разница между virtual DOM и shadow DOM?

A

Virtual DOM - полное представление реального DOM. Его самой важной особенностью является группировка изменений и выполнение одиночного повторного рендеринга вместо множества мелких. Виртуальный ДОМ - это библиотека, в которой каждый ДОМ узел - это JS обьект.
Shadow DOM - это нативная реализация в браузере которая позволяет создать свой, изолированный, DOM. Внутри Shadow DOM создается отдельный ““поддокумент””, к которому можно применять свои стили, экранированные от воздействий внешней среды.

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

В чем разница между state и props?

A

props - передается в компонент извне.
state - внутреннее состояние компонента.

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

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

A

У классовых компонентах есть state а у фунцкиональных его нет. Но состояние для функционального компонента можна добавить с помощью хука useState.
У классовых компонентах есть методы жизненного цикла а у функциональных его нет. Но некоторые методы жизненного цикла для функционального компонента можно реализовать с помощью хука useEffect.

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

Какие методы жизненного цикла есть в React?

A

В React есть 3 фазы: монтирование, обновление и размонтирование. В каждой из этих фаз есть свои методы жизненного цикла.

Монтирование
Эти методы вызывают в следующем порядке, когда экземпляр компонента создаётся и добавляется в DOM:
constructor()
static getDerivedStateFromProps()
render()
componentDidMount()

Обновление
Обновление может быть вызвано изменениями в свойствах или состоянии. Эти методы вызываются в следующем порядке, когда компонент повторно отрисовывается:
static getDerivedStateFromProps()
shouldComponentUpdate()
render()
getSnapshotBeforeUpdate()
componentDidUpdate()

Размонтирование
Этот метод вызывается, когда компонент удаляется из DOM:
componentWillUnmount()

Обработка ошибок
Этот метод вызывается при возникновении ошибки во время отрисовки, в методе жизненного цикла или в конструкторе любого дочернего компонента.
static getDerivedStateFromError()
componentDidCatch()
В React есть 3 фазы: монтирование, обновление и размонтирование. В каждой из этих фаз есть свои методы жизненного цикла.

Монтирование
Эти методы вызывают в следующем порядке, когда экземпляр компонента создаётся и добавляется в DOM:
constructor()
static getDerivedStateFromProps()
render()
componentDidMount()

Обновление
Обновление может быть вызвано изменениями в свойствах или состоянии. Эти методы вызываются в следующем порядке, когда компонент повторно отрисовывается:
static getDerivedStateFromProps()
shouldComponentUpdate()
render()
getSnapshotBeforeUpdate()
componentDidUpdate()

Размонтирование
Этот метод вызывается, когда компонент удаляется из DOM:
componentWillUnmount()

Обработка ошибок
Этот метод вызывается при возникновении ошибки во время отрисовки, в методе жизненного цикла или в конструкторе любого дочернего компонента.
static getDerivedStateFromError()
componentDidCatch()

https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/

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

Как обновить state в классовом компоненте?

A

Для того чтобы обновить состояние в классовом компоненте можно использовать метод setState. Этот метод является асинхронным, и React может сгруппировать несколько вызовов setState() в одно обновление для улучшения производительности. Метод setState может принимать функцию, для того, чтобы обновить стейт на основе уже сеществующего стейта. Вызов метода setState всегда приводит к обновлению компонента.

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

Почему setState асинхронная функция?

A

Это нужно для того, чтобы React смог сгруппировать несколько вызовов setState() в одно обновление для улучшения производительности. Вызов setState приводит к обновлению компонента, поэтому setState сделали асинхронной чтобы “дождаться” пока все компоненты вызовут setState() в своих обработчиках событий прежде чем начать повторный рендер. Это избавляет от ненужных повторных рендеров.

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

Что нужно сделать, чтобы компонент обновился?

A

Для того чтобы обновился компонент нужно:
- чтобы изменился state, путем вызова метода setState
- чтобы изменились props
- вызвать метод forceUpdate

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

Как предотвратить лишние обновление компонента?

A

Есть несколько способов.
- реализовать метод жизненного цикла shouldComponentUpdate, которые отменяет рендер, если из него возвратить значение false
- наследоваться от PureComponent при создании классового компонента

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

В чем особенность PureComponent?

A

В большинстве случаев PureComponent можно использовать вместо написания собственного shouldComponentUpdate. Но он делает только поверхностное сравнение.

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

Для чего нужны key?

A

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

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

Для чего нужен компонент Fragment?

A

Реакт компонент всегда должен возвращать только 1 элемента. Но иногда стоит задача возвратить несколько элементов. Фрагменты позволяют формировать список дочерних элементов, не создавая лишних узлов в DOM.

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

Для чего нужны порталы?

A

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

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

Что такое refs?

A

Рефы дают возможность получить доступ к DOM-узлам или React-элементам, созданным в рендер-методе. Так же рефы могут хранить в себе любую другую информацию кроме DOM-узла

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

Что такое context?

A

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

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

Для чего нужны render props?

A

Render props - это возможность компонентов React разделять код между собой с помощью пропа, значение которого является функцией. Компонент с рендер-пропом берёт функцию, которая возвращает React-элемент, и вызывает её вместо реализации собственного рендера.

17
Q

Что такое HOCs?

A

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

18
Q

Как реализовать компонент предохранителя (Error Boundary)?

A

Предохранители - это компоненты React, которые отлавливают ошибки JavaScript в любом месте деревьев их дочерних компонентов, сохраняют их в журнале ошибок и выводят запасной UI вместо рухнувшего дерева компонентов. Классовый компонент является предохранителем, если он реализует хотя бы один из методов жизненного цикла: static getDerivedStateFromError() или componentDidCatch().

19
Q

Какие возможности предоставляют хуки?

A

Хуки позволяю использовать состояние и другие возможности React без написания классов. Хуки позволяют повторно использовать логику состояния, не затрагивая дерево компонентов.

20
Q

Какие правила использования хуков?

A

Хуки - обычные JavaScript-функции, но существует два правила, которым нужно следовать. Не вызывайте хуки внутри циклов, условных операторов или вложенных функций. Вместо этого всегда используйте хуки только внутри React-функций или внутри собственного хука, до возврата какого-либо значения из них. Так же, при создании собственного хука, его имя должно начинаться с «use»

21
Q

Для чего нужен useEffect?

A

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

22
Q

Чем отличается useEffect от useLayoutEffect?

A

useEffect вызывается после рендера и обновления компонента.
useLayoutEffect вызывается синхронно перед рендером и обновлением компонента. useLayoutEffect запускается в той же фазе, что и componentDidMount и componentDidUpdate.

23
Q

Что такое ленивая инициализация состояния в useState и useReducer?

A

Когда начальное состояние является результатом вызова какой-то функции, его можно инициализировать ““лениво”” для того, чтобы при каждом обновлении компонента эта функция не вызвалась. Для этого в useState или useReducer нужно передать функцию, которая возвратит начальное состояние, и будет вызвана только один раз, во время первого рендера.

24
Q

Чем useRef отличается от createRef?

A

Разница в том, что когда нужно создать ref внутри функционального компонента, используя createRef, он будет создаваться каждый раз когда обновляется компонента. Используя useRef, он создаться 1 раз при монтировании.

25
Q

Для чего нужны useMemo и useCallback?

A

Хук useMemo будет повторно вычислять мемоизированное значение только тогда, когда значение какой-либо из зависимостей изменилось. Эта оптимизация помогает избежать дорогостоящих вычислений при каждом рендере.
Хук useCallback вернёт мемоизированную версию колбэка, который изменяется только, если изменяются значения одной из зависимостей. Это полезно при передаче колбэков оптимизированным дочерним компонентам, которые полагаются на равенство ссылок для предотвращения ненужных рендеров.

26
Q

Для чего нужен redux?

A

Redux - это библиотека для управления состоянием приложения. В обычном React приложении компоненты имеют свой state и могут передавать его в качестве props для дочерних компонентов. В React-redux приложениях есть один глобальный state на который подписываются компоненты, которым нужно из него читать данные.

27
Q

Объясните redux data flow.

A

Жизненный цикл данных в любом Redux-приложении включает в себя 5 шагов:
1 - вызывается dispatch(action). Action - это простой javascript-объект, который описывает что случилось.
2 - action попадает в middleware, и если это необходимо, запускает какой-то сайд-эфект.
3 - redux-стор вызывает функцию-редюсер с двумя аргументами: текущее дерево состояния (state) и экшен (action).
4 - главный редюсер может комбинировать результат работы нескольких редюсеров в единственное дерево состояния приложения.
5 - redux-стор сохраняет полное дерево состояния, которое возвращает главный редюсер.

28
Q

Что такое redux middleware?

A

Redux middleware предоставляют стороннюю точку расширения, между отправкой экшена и моментом, когда этот экшен достигает редюсера. Redux-мидлвары часто используют для логирования, сообщения об ошибках, общения с асинхронным API, роутинга и т.д.

29
Q

Где нужно делать side effects в redux?

A

Redux вдохновлен функциональным программированием и из коробки выполнение побочных эффектов в нем не имеет места. В частности, функции редюсера всегда должны быть чистыми функциями типа (state, action) => newState. Однако, мидлвары Redux-а позволяют перехватывать экшены и добавлять к ним сложное поведение, включая побочные эффекты.

30
Q

Что такое next() функция в redux middleware?

A

Вызов next (action) в middleware приведет к тому, что действие будет передано следующему middleware, а затем в редьюсер. Это нужно, чтобы соблюдалась цепочка вызовов middleware.

31
Q

Для чего нужны redux селекторы?

A

Селекторы-это геттеры для состояния redux. Как и геттеры, селекторы инкапсулируют структуру состояния и могут использоваться повторно. Селекторы также могут вычислять производные свойства.

32
Q

Чем отличается action от action creator?

A

action - это объект, который описывает, что произошло.
action creator - это функция, которая может принимать какие-то параметры и возвращает action.