render¶
Устарело
Этот API будет удален в одной из будущих основных версий React.
В React 18 render
был заменен на createRoot
. Использование render
в React 18 предупредит, что ваше приложение будет вести себя так, как будто оно работает на React 17.
render
рендерит часть JSX ("узел React") в DOM-узел браузера.
1 |
|
Описание¶
render(reactNode, domNode, callback?)
¶
Вызывает render
для отображения компонента React внутри элемента DOM браузера.
1 2 3 4 |
|
React отобразит <App />
в domNode
и возьмет на себя управление DOM внутри него.
Приложение, полностью построенное на React, обычно имеет только один вызов render
со своим корневым компонентом. Страница, использующая "брызги" React для отдельных частей страницы, может иметь столько вызовов render
, сколько необходимо.
Параметры
reactNode
: React-узел, который вы хотите отобразить. Обычно это кусок JSX типа<App />
, но вы также можете передать элемент React, созданный с помощьюcreateElement()
, строку, число,null
илиundefined
.domNode
: DOM-элемент. React отобразитreactNode
, который вы передадите внутри этого DOM-элемента. С этого момента React будет управлять DOM внутриdomNode
и обновлять его при изменении вашего дерева React.- опционально
callback
: Функция. Если она передана, React вызовет ее после того, как ваш компонент будет помещен в DOM.
Возврат
Функция render
обычно возвращает null
. Однако, если переданный вами reactNode
является компонентом класса, то он вернет экземпляр этого компонента.
Предостережения
- В React 18
render
был заменен наcreateRoot
. Пожалуйста, используйтеcreateRoot
для React 18 и последующих версий. - При первом вызове
render
, React очистит все существующее HTML содержимое внутриdomNode
перед рендерингом React компонента в него. Если вашdomNode
содержит HTML, сгенерированный React на сервере или во время сборки, используйте вместо этогоhydrate()
, который прикрепляет обработчики событий к существующему HTML. - Если вы вызываете
render
на одном и том жеdomNode
более одного раза, React будет обновлять DOM по мере необходимости, чтобы отразить последний JSX, который вы передали. React будет решать, какие части DOM могут быть использованы повторно, а какие должны быть созданы заново, "сопоставляя их" с ранее отрисованным деревом. Повторный вызовrender
на том жеdomNode
аналогичен вызову функцииset
на корневом компоненте: React позволяет избежать ненужных обновлений DOM. - Если ваше приложение полностью построено на React, то, скорее всего, в вашем приложении будет только один вызов
render
. (Если вы используете фреймворк, он может сделать этот вызов за вас.) Когда вы хотите отобразить часть JSX в другой части дерева DOM, которая не является дочерней для вашего компонента (например, модальный или всплывающий экран), используйтеcreatePortal
вместоrender
.
Использование¶
Вызовите render
для отображения компонента React внутри DOM-узла браузера.
1 2 3 4 |
|
Рендеринг корневого компонента¶
В приложениях, полностью построенных на React, вы обычно делаете это только один раз при запуске - для рендеринга "корневого" компонента.
1 2 3 4 5 |
|
1 2 3 |
|
Обычно вам не нужно вызывать render
снова или вызывать его в других местах. С этого момента React будет управлять DOM вашего приложения. Для обновления пользовательского интерфейса ваши компоненты будут использовать состояние.
Рендеринг нескольких корней¶
Если ваша страница не полностью построена на React, вызовите render
для каждой части пользовательского интерфейса верхнего уровня, управляемой React.
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
Вы можете уничтожить отрисованные деревья с помощью unmountComponentAtNode()
.
Обновление отрисованного дерева¶
Вы можете вызывать render
более одного раза на одном и том же узле DOM. До тех пор, пока структура дерева компонентов будет соответствовать тому, что было отрисовано ранее, React будет сохранять состояние. Обратите внимание, что вы можете вводить данные, что означает, что обновления от повторных вызовов render
каждую секунду не являются разрушительными:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 |
|
Очень редко приходится вызывать render
несколько раз. Обычно вместо этого вы будете обновлять состояние внутри своих компонентов.
Источник — https://react.dev/reference/react-dom/render