[React] > Basic (Часть 2) Flashcards
[Функциональный React]
Для чего нужен хук useState?
useState нужен для хранения состояния
($) если нужно обьединять состояния обьектов то лучше юзать useReducer
[Функциональный React]
Расскажите о хуке useEffect
Хук useEffect принимает функцию которая реализует мутации, подписки, таймеры. Выполняется после каждого рендера. Вызывается при изминение данных которые мы передаем вторым аргументом
($) useEffect - это комбо из componentDidMount, componentDidUpdate и componentWillUnmount.
[Функциональный React]
Для чего нужен хук useContext?
useContext нужен для пробрасывания глобальных данных, таких как тема, юзер инфо, язык
[Функциональный React]
Для чего нужен хук useReducer?
useReducer нужен для хранения сложных обьектов или мы зависим от предедущего стейта, также имеет лучшую производительность по глубокому обновлению
($) dispatch стабильна, изза чего ее не обьязательно включать в зависимости хуков useEffect и useCallback
[Функциональный React]
Для чего нужен хук useCallback?
useCallback нужен для меморизации функции
($) полезно если передаем колбэк как пропс
[Функциональный React]
Для чего нужен хук useMemo?
useMemo нжуен для меморизации значения
($) повышает производительность, меньше просчетов
[Функциональный React]
Для чего нужен хук useRef?
useRef нужен для доступа к DOM елементу
Что такое порталы в React?
Порталы позволяют рендерить дочерние элементы в DOM-узел, который находится вне DOM-иерархии родительского компонента.
Первый аргумент (child) — это любой React-компонент, который может быть отрендерен, такой как элемент, строка или фрагмент. Следующий аргумент (container) — это DOM-элемент.
Типовой случай применения порталов — когда в родительском компоненте заданы стили overflow: hidden или z-index, но вам нужно чтобы дочерний элемент визуально выходил за рамки своего контейнера. Например, диалоги, всплывающие карточки и всплывающие подсказки.
Что такое React Reconciliation (Cверка) и как он работает?
React Reconciliation (Cверка) - это процесс, посредством которого React обновляет DOM. Когда состояние компонента изменяется, React должен рассчитать необходимость обновления DOM. Это делается путем создания виртуального DOM и сравнения его с текущим DOM. В этом контексте виртуальный DOM будет содержать новое состояние компонента.
При сравнении двух деревьев первым делом React сравнивает два корневых элемента. Поведение различается в зависимости от типов корневых элементов.
Всякий раз, когда корневые элементы имеют различные типы, React уничтожает старое дерево и строит новое с нуля.
При сравнении двух React DOM-элементов одного типа, React смотрит на атрибуты обоих, сохраняет лежащий в основе этих элементов DOM-узел и обновляет только изменённые атрибуты.
По умолчанию при рекурсивном обходе дочерних элементов DOM-узла React проходит по обоим спискам потомков одновременно и создаёт мутацию, когда находит отличие. Эта неэффективность может стать проблемой. Когда у дочерних элементов есть ключи, React использует их, чтобы сопоставить потомков исходного дерева с потомками последующего дерева.
($)
сравнивает ссылки обьектов, а не сами обьекты (иначе было бы дорого по вычислениям)
[Функциональный React]
Что такое React.memo
React.memo — это HOC не позволяющий ререндерить дочерний компонент при одних и тех же значениях пропсов
[Функциональный React]
Расскажите о хуке UseLayoutEffect
Хук работает как useEffect, но запускается после всех изменений DOM.
Полезен для чтения макета DOMа и синхронного повторного рендеринга (???).
($)
При SSR не стоит юзать UseLayoutEffect так как нужно дождаться загрузку джаваскрипта