Попробую сразу здесь описать ошибки ,чтобы от них отталкиваться при проектировании новой схемы.
Ошибка 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 не является фазой обновления.
We can help you achieve it!
310 000
like-minded
tools
for an exciting achievement