Day, 6
Nikita Nikler
11 December 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 не является фазой обновления.

Like it? Share with friends!
Add comment
See in dairy
Goal

You can publish
your goal here

We can help you achieve it!

310 000

like-minded

tools

for an exciting achievement

Join us!
Sign up

Signup

Уже зарегистрированы?
Quick sign-up through social networks.
Sign in

Sign in.
Allowed.

Not registered yet?
 
Log in through social networks
Forgot your password?