Hooks Flashcards

1
Q

Что такое хук?

A

Хук - это функция, которая расширяет функциональность компонента-функции.
Хуки возможно использовать только в функциональных компонентах.
Хуки должны быть безусловно вызваны между перерисовками.

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

Зачем сделали хуки?

A

У классовых компонентов есть ряд недостатков:
1. Сложность переиспользования поведения: необходимо создать старший компонент.
2. Сложность использования методов жизненного цикла, так как они включают в себя большое количество кода
3. Сложность разбиения логики на несколько компонентов, когда необходимо пердавать данные и обработчики
4. Сложность работы с кодом: обязательная привязка this к методам
5. Сложность тестирования: компоненты, разбитые на несколько частей необходимо тестировать как целые части интерфейса
6. Недостатки оптимизации классовых компонентов: классы компилируются в избыточный код
7. Избыточность классов: занимают больше памяти и вызывают лишние методы и проверки
8. Избыточность кода для простых манипуляций: логику можно писать в методах жизненного цикла

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

Что такое кастомный хук?

A

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

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

Как работает useState?

A

Хук useState возвращает состояние и метод для изменения состояния, может принимать любое значение, либо функцию-инициализатор.
const [value, SetValue] = useState(initial | () => initial)
Метод изменения состояния принимает новое состояние или коллбек с аргументом предыдущего состояния.
Изменение состояния перерисовывает компонент.

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

Как работает useContext?

A

Хук useContext позволяет привязать компонент к внешнему состоянию компонента-провайдера.
const context = useContext(Context). Если внешнего компонента-провайдера нет в дереве, то возвращается дефолтное значение контекста.

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

Как работает useEffect?

A

Хук useEffect возволяет создавать реакции на монтирование, размонтирование и обновление компонента.
~~~
useEffect(() => {
fetchOnUpdate()
return () => {
fetchOnUnmmount()
}
}, [propVal, stateVal])
~~~
Первый аргумент - это коллбек для создания побочных эффектов.
Второй аргумент - массив зависимостей.
После монтирования вызывается первый аргумент, перед размонтированием вызывается возвращаемый им коллбек.
После обновления вызывается коллбек, если данные в массиве зависимостей изменились.

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

Как работает useLayoutEffect?

A

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

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

Как работает useInsertionEffect?

A

Синтаксис и поведение хука useInsertionEffect аналогичны useEffect, но хук вызывается синхронно перед внесением изменений в DOM, что позволяет добавить стили на страницу перед layout-стадией рендеринга браузера.

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

Как работает useMemo и useCallback?

A

Хуки useMemo и useCallback позволяют создать значение, которое прикрепляется к экземпляру компонента и обновляется только при изменении зависимостей.
Первый аргумент - это коллбек для генерации значения.
Второй аргумент - массив зависимостей.
~~~
const val = useMemo(() => {
return propVal + stateVal
}, [propVal, stateVal])
const cb = useCallback((val) => {
setVal(val + propVal + stateVal)
}, [propVal, stateVal])
~~~

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

Как работает useRef?

A

Хук useRef создает объект со свойством ref.current, который прикрепляется к экземпляру компонента.
const ref = useRef(initialValue)

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

Как работает useImperativeHandle?

A

Хук useImperativeHandle позволяет через props.ref передать внутреннее состояние компонента наружу.
Первый аргумент - переданный ref.
Второй аргумент - это коллбек для генерации значения.
Третий аргумент - массив зависимостей.
~~~
useImperativeHandle(ref, () => {
return stateVal
, [stateVal]}
~~~

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

Для чего применяется useId?

A

Хук useId позволяет сгенерировать уникальное значения компонента, которое потом возможно применить в логике компонента.

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

Для чего применяется useSyncExternalStore?

A

Хук useSyncExternalStore позволяет подписаться на изменения внешнего источника данных.
const todos = useSyncExternalStore((subscribe) => unsubscribe, getSnapshot, getServerSnapshot?);
Первый аргумент - это функция, принимающая аргументом коллбек от компонента под подписи и возвращающая коллбек для отписки.
Второй аргумент - функция для получения данных.
Третий аргумент - функция для получения данных на сервере.
При вызове коллбека произойдет получение данных и перерисовка компонента.
Применять этот хук удобно для подписи на события браузера.

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