День 6
Nikita Nikler
11 декабря 2024, 14:53

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

Ошибка 1. FiberRoot отвечает за current и workInProgress деревья

Это вовсе не так. Более того в этом файбере не хранятся ссылки на эти деревья. Формально есть поле current ,но немного для другого сделано. А ключевая особенность FiberRoot в том ,что именно на его уровень вынесена делегация событий React. В то время как в прошлых версиях React делегация событий была вынесена на уровень window (или document) ,что не позволяло создать на одной странице несколько рутов приложений. Ну и суть его в инкапсуляции самого приложения внутри себя.

workInProgress и current как отдельных деревьев не существует. Fiber ссылаются на свою альтернативную версию (рабочую или текущую) через поле alternate.

Ошибка 2. Создается временное дерево ReactElement ,которое используется для получения diff с Fiber

Это тоже ложь. В текущей версии реакт никакое дерево реакт-элементов (или нод) не создается ,это было актуально в старых версиях реакта ,когда создавался полноценный Virtual DOM для сравнения с предыдущим и представлял собой рекурсивные деревья. Fiber как раз решил эту проблему (проблему обхода больших деревьев рекурсией) ,представив состояние приложения в виде структуры Fiber ,которую можно обойти в одном направлении через использование указателей односвязанных списков.

Ошибка 3. Создается новый FIber если есть изменения

Fiber создается только один раз при монтировании компонента ,а далее он изменяется. Изменяется его ссылка alternate на разных этапах обработки реактом ,а также некоторые другие свойства. Подробно этот момент я разберу потом.

Ошибка 4. current сожержит слепок всего дерева Fiber

Это не так. В момент обработки реактом current считается Fiber ,на котором случились события или эффекты. Это тот узел ,от которого запустился цикл изменений ,и в основном это какая-то часть полной структуры Fiber.

Ошибка 5. Reconciliation - это фаза обновления реакта

Это не так. Reconciliation - это процесс ,который запускается в какой-то определенный момент. А фаз существует 3 - Begin -> Update -> Commit. Тут термины в различных источниках отличаются ,кто-то использует термин render. Но суть в том ,что фазы 3 ,а reconciliation не является фазой обновления.

Нравится? Расскажите друзьям!
Комментировать
Перейти к записи в ленте
Цель

Вы тоже можете
опубликовать свою
цель здесь

Мы поможем вам ее достичь!

310 000

единомышленников

инструменты

для увлекательного достижения

Присоединиться
Регистрация

Регистрация

Уже зарегистрированы?
Быстрая регистрация через соцсети
Вход на сайт

Входите.
Открыто.

Еще не зарегистрированы?
 
Войти через соцсети
Забыли пароль?