Ответы:
Основная задача React - выяснить, как изменить DOM для соответствия тому, что компоненты хотят отображать на экране.
React делает это путем «монтирования» (добавления узлов в DOM), «размонтирования» (удаления их из DOM) и «обновления» (внесения изменений в узлы, уже находящиеся в DOM).
Как узел React представлен как узел DOM и где и когда он появляется в дереве DOM, управляется API верхнего уровня . Чтобы лучше понять, что происходит, посмотрите на самый простой из возможных:
// JSX version: let foo = <FooComponent />;
let foo = React.createElement(FooComponent);
Так что же это такое foo
и что с этим делать? foo
на данный момент представляет собой простой объект JavaScript, который выглядит примерно так (упрощенно):
{
type: FooComponent,
props: {}
}
В настоящее время его нет нигде на странице, т.е. это не элемент DOM, не существует нигде в дереве DOM и, кроме узла элемента React, не имеет другого значимого представления в документе. Он просто сообщает React, что должно быть на экране, если этот элемент React будет отрисован.Он еще не "смонтирован".
Вы можете указать React, чтобы он «смонтировал» его в контейнер DOM, вызвав:
ReactDOM.render(foo, domContainer);
Это говорит React, что пора показывать foo
на странице. React создаст экземпляр FooComponent
класса и вызовет его render
метод. Допустим, он отображает a <div />
, в этом случае React создаст div
для него узел DOM и вставит его в контейнер DOM.
Этот процесс создания экземпляров и узлов DOM, соответствующих компонентам React, и их вставки в DOM называется монтированием.
Обратите внимание, что обычно вы вызываете только ReactDOM.render()
для монтирования корневых компонентов. Вам не нужно вручную «монтировать» дочерние компоненты. Каждый раз, когда вызывается родительский компонент setState()
и его render
метод говорит, что конкретный дочерний элемент должен быть отрисован в первый раз, React автоматически «монтирует» этот дочерний элемент в своего родителя.
findDOMNode
с элементами React).
React - это изоморфный / универсальный фреймворк. Это означает, что существует виртуальное представление дерева компонентов пользовательского интерфейса, отдельное от фактического рендеринга, выводимого в браузере. Из документации:
React работает так быстро, потому что никогда не обращается напрямую к DOM. React поддерживает быстрое представление DOM в памяти.
Однако это представление в памяти не привязано напрямую к DOM в браузере (даже если оно называется Virtual DOM, неудачное и сбивающее с толку название универсальной платформы приложений), и это просто данные, подобные DOM. структура, которая представляет всю иерархию компонентов пользовательского интерфейса и дополнительные метаданные. Виртуальный DOM - это всего лишь деталь реализации.
«Мы думаем, что истинные основы React - это просто идеи компонентов и элементов: возможность декларативно описать то, что вы хотите визуализировать. Эти части являются общими для всех этих разных пакетов. Части React, относящиеся к определенному рендерингу цели обычно не то, о чем мы думаем, когда думаем о React ". - Блог React js
Итак, напрашивается вывод, что React не зависит от рендеринга , а это означает, что его не волнует конечный результат. Это может быть дерево DOM в браузере, это может быть XML, собственные компоненты или JSON.
«Когда мы смотрим на такие пакеты, как react-native, react-art, react-canvas и react-three, становится ясно, что красота и суть React не имеют ничего общего с браузерами или DOM». - Блог React js
Теперь, когда вы знаете, как работает React, легко ответить на ваш вопрос :)
монтаж - это процесс вывода виртуального представления компонента в окончательное представление пользовательского интерфейса (например, DOM или собственные компоненты).
В браузере это означало бы вывод элемента React в фактический элемент DOM (например, HTML div или li ) в дереве DOM. В собственном приложении это означало бы вывод элемента React в собственный компонент. Вы также можете написать свой собственный рендерер и выводить компоненты React в JSON, XML или даже XAML, если у вас хватит смелости.
Итак, монтирование / размонтирование обработчиков критически важно для приложения React, потому что вы можете быть уверены, что компонент выводится / отображается только тогда, когда он монтируется . Однако componentDidMount
обработчик вызывается только при рендеринге в фактическое представление пользовательского интерфейса (DOM или собственные компоненты), но не при рендеринге в строку HTML на сервере, используяrenderToString
, что имеет смысл, поскольку компонент фактически не монтируется, пока не достигнет браузер и выполняет в нем.
И да, Mounting - это тоже неудачное / сбивающее с толку имя, если вы спросите меня. ИМХО componentDidRender
и componentWillRender
имена были бы намного лучше.
componentDidRender
это замена, componentDidMount
потому что компонент может отображать несколько раз, когда свойства меняются после того, как он монтируется один раз.
(id === that.id) ? <Component /> : null
| /app/items/:id
| this.setState(...)
,
/react-js-the-king-of-universal-apps/
( с комментариями редактирования, четко указывающими, что это неработающая ссылка ), но коллеги оба раза отклоняли изменение . Может ли кто-нибудь подсказать мне, что не так при редактировании ответа и удалении неработающей ссылки?
Монтирование относится к компоненту в React (созданным узлам DOM), прикрепленному к некоторой части документа. Это оно!
Игнорируя React, вы можете думать об этих двух встроенных функциях как о монтировании:
Какие функции, вероятно, наиболее распространены в React для внутреннего монтирования.
Думать о:
componentWillMount === до монтирования
И:
componentDidMount === после монтирования
appendChild
, то какой render
?
render
что это фактический метод, который сделает сам монтаж. Итак, componentWillMount
== до, render
== выполняет вставку DOM, а componentDidMount
== после монтирования (или render
вызвал DOM API для вставки компонента, и эта асинхронная операция полностью завершена)
https://facebook.github.io/react/docs/tutorial.html
Здесь componentDidMount - это метод, автоматически вызываемый React при рендеринге компонента.
Идея заключается в том, что вы говорите ReactJS: «Пожалуйста, возьмите эту штуку, это поле для комментариев или вращающееся изображение, или что-то еще, что я хочу на странице браузера, и продолжайте и фактически поместите его на страницу браузера. Когда это будет сделано, позвоните моя функция, к которой я привязан, componentDidMount
чтобы продолжить ".
componentWillMount
наоборот. Он будет срабатывать немедленно ПЕРЕД рендерингом вашего компонента.
См. Также здесь https://facebook.github.io/react/docs/component-specs.html
Наконец, термин «монтировать» кажется уникальным для react.js. Я не думаю, что это общая концепция javascript или даже общая концепция браузера.
componentDidUpdate
вместо этого вызывается.
Монтирование относится к начальной загрузке страницы, когда ваш компонент React впервые отображается. Из документации React для монтирования: componentDidMount:
Invoked once, only on the client (not on the server), immediately after the initial rendering occurs. At this point in the lifecycle, the component has a DOM representation which you can access via React.findDOMNode(this).
Вы можете сравнить это с функцией componentDidUpdate, которая вызывается каждый раз, когда React отображает (кроме начального монтирования).
Основная цель React js - создавать повторно используемые компоненты. Здесь компоненты - это отдельные части веб-страницы. Например, на веб-странице заголовок - это компонент, нижний колонтитул - это компонент, всплывающее уведомление - это компонент и т. Д. Термин «монтирование» говорит нам, что эти компоненты загружаются или отображаются в DOM. Это множество API верхнего уровня и методов, решающих эту проблему.
Чтобы упростить задачу, смонтированный означает, что компонент был загружен в DOM, а размонтированный означает, что компоненты были удалены из DOM.
React.createElement(FooComponent)
вы не создаете экземплярFooComponent
.foo
представляет собой виртуальное представление DOM,FooComponent
также известного как элемент React. Но, возможно, именно это вы имели в виду подFooComponent
типом React . Несмотря на это, вы не монтируете компоненты в React, вы вызываете render, который, в свою очередь, может монтировать компонент, если необходимо создать фактический узел DOM для представления компонента в дереве DOM. Фактический монтаж - это событие, на котором это происходит впервые.