в предыдущей статье«Анализ исходного кода React (1): внедрение и установка компонентов»В разделе мы объяснили реализацию и монтирование компонентов React. Теперь давайте вместе исследуем жизненный цикл компонентов.
Мы уже знаем, что жизненный цикл компонента запускается только после запуска процесса монтирования, генерирующегоReactElement
Тип объекта js путем анализа информации, содержащейся в объекте компонента, получения соответствующей информации HTML, вставки ее в указанный контейнер DOM и, наконец, завершения рендеринга представления. Так как же в этом процессе запускается жизненный цикл компонента?
По сути, изучить цикл декларирования компонентов — значит изучить процесс монтажа компонентов в глубину.
жизненный цикл компонента
В конце предыдущей статьи мы знаемReactDOM.render()
Метод генерирует четыре различных типа инкапсулированных компонентов внутри с помощью фабричного метода в соответствии с входящими параметрами:
- ReactEmptyComponent
- ReactTextComponent
- ReactDOMComponent
- ReactCompositeComponent
При выполнении процесса монтирования путем выполнения внутреннегоmountComponent
Метод запускает жизненный цикл, но, по-видимому, жизненный цикл существует только в пользовательских компонентах React, т.е.ReactCompositeComponent
. Поскольку остальные три компонента не имеют жизненного цикла, давайте сначала проанализируем три относительно простых внутренних компонента, не имеющих жизненного цикла.
1.ReactEmptyComponent
пройти черезReactEmptyComponent.create()
создание метода, который, наконец, вызываетReactDOMEmptyComponent
метод, посмотрите на исходный код:
Поскольку компонент пустой, почти все параметры имеют значение null, и это не имеет ничего общего с жизненным циклом, а только с монтированием и выгрузкой компонента. в ключевом методеmountComponent
, мы видим, что окончательный результат имеет вид<!-->
HTML, то есть пустой, поэтому вставка реального DOM тоже пуста.
2.ReactTextComponent
пройти черезReactHostComponent.createInstanceForText()
создание метода, давайте посмотрим непосредственноmountComponent
Только что:
ReactDOMTextComponent
в сравнении сReactDOMEmptyComponent
Обработка немного сложнее, но логика примерно такая же.escapeTextContentForBrowser
Параметры проверяются на наличие пробелов внутри метода и, наконец, с помощью простого' '+参数
Метод преобразует параметр в строку и возвращает ее.
3.ReactDOMComponent
пройти черезReactHostComponent.createInternalComponent()
Способ создания такого же взгляда на нас напрямуюmountComponent
Просто хорошо:
Поскольку элемент dom также не имеет жизненного цикла,ReactDOMComponent
к входящемуdiv
,span
подождите, пока метка не пройдетswitch
Процесс в основном такой же, как и для двух вышеупомянутых типов компонентов, за исключением того, что выполняются идентификация и обработка.
4.ReactCompositeComponent
Пользовательские компоненты находятся в центре внимания компонентов React, черезReactCompositeComponentWrapper()
создание метода, окончательный вызовReactCompositeComponentMixin.mountComponent
метод для создания HTML для компонента. Поскольку эта функция очень длинная, заинтересованным читателям следует перейти кReactCompositeComponent.js
Читайте исходный код, здесь мы приводим логику функции прямо с легендой:
Исходя из вышеизложенного, видно, что целью выполнения жизненного цикла является анализReactElement
Получить HTML. Исходя из этого, мы обновляем сводную таблицу четырех типов компонентов в предыдущей статье:
nextElement |
фактические параметры | результат |
---|---|---|
null /false
|
нулевой | СоздайтеReactDOMEmptyComponent компоненты |
object && type === string
|
виртуальный DOM | СоздайтеReactDOMComponent компоненты |
object && type !== string
|
Реагировать компоненты | СоздайтеReactCompositeComponent компоненты |
string |
нить | СоздайтеReactDOMTextComponent компоненты |
number |
количество | СоздайтеReactDOMTextComponent компоненты |
Наконец, на основе ментальной карты, приведенной в конце первой статьи, уточняем детали: (щелкните, чтобы просмотреть увеличенное изображение)
рассмотрение:
«Анализ исходного кода React (1): внедрение и установка компонентов»
«Анализ исходного кода React (3): подробная транзакция и очередь обновлений»
«Анализ исходного кода React (4): система событий»
Контактный адрес электронной почты: sssyoki@foxmail.com