render
Цей API буде видалено у наступному старшому релізі React.
У React 18 render
було замінено на createRoot
. Використання render
у React 18 попередить, що ваш застосунок буде поводитися так, ніби він працює під управлінням React 17. Дізнайтеся більше тут.
render
рендерить фрагмент JSX ("вузол React") у вузол DOM браузера.
render(reactNode, domNode, callback?)
Довідник
render(reactNode, domNode, callback?)
Викликає render
для відображення React-компонента всередині DOM-елемента браузера.
import { render } from 'react-dom';
const domNode = document.getElementById('root');
render(<App />, domNode);
React відобразить <App />
у domNode
і візьме на себе керування DOM всередині нього.
Додаток, повністю зібраний з React, зазвичай має лише один виклик render
з кореневого компонента. Сторінка, яка використовує "посипання" React для частин сторінки, може мати стільки викликів render
, скільки потрібно.
Дивіться більше прикладів нижче.
Параметри
reactNode
: Вузол React-вузла, який ви хочете відобразити. Зазвичай це буде фрагмент JSX на кшталт<App />
, але ви також можете передати React-елемент, створений за допомогоюcreateElement()
, рядок, число,null
абоundefined
.domNode
: A DOM-елемент. React відобразитьreactNode
, який ви передали всередині цього DOM-елемента. З цього моменту React буде керувати DOM всерединіdomNode
і оновлювати його, коли ваше дерево React змінюється.опція
зворотній виклик
: Функція. Якщо передано, 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
.
Використання
Викликати У програмах, повністю побудованих на React, зазвичай це робиться лише один раз при запускудля рендерингу "кореневого" компонента.render
для відображення Відображення кореневого компонента
import './styles.css';
import { render } from 'react-dom';
import App from './App.js';
render(<App />, document.getElementById('root'));
export default function App() {
return <h1>Hello, world!</h1>;
}
Зазвичай вам не потрібно викликати render
знову або викликати його в інших місцях. З цього моменту React буде керувати DOM вашого застосунку. Для оновлення інтерфейсу користувача ваші компоненти будуть використовувати state.
Відображення декількох коренів
Якщо ваша сторінка не повністю зібрана за допомогою React, викличте render
для кожного фрагменту UI верхнього рівня, керованого React.
<nav id="navigation"></nav>
<main>
<p>This paragraph is not rendered by React (open index.html to verify).</p>
<section id="comments"></section>
</main>
import './styles.css';
import { render } from 'react-dom';
import { Comments, Navigation } from './Components.js';
render(
<Navigation />,
document.getElementById('navigation')
);
render(
<Comments />,
document.getElementById('comments')
);
export function Navigation() {
return (
<ul>
<NavLink href="/">Home</NavLink>
<NavLink href="/about">About</NavLink>
</ul>
);
}
function NavLink({ href, children }) {
return (
<li>
<a href={href}>{children}</a>
</li>
);
}
export function Comments() {
return (
<>
<h2>Comments</h2>
<Comment text="Hello!" author="Sophie" />
<Comment text="How are you?" author="Sunil" />
</>
);
}
function Comment({ text, author }) {
return (
<p>{text} — <i>{author}</i></p>
);
}
nav ul { padding: 0; margin: 0; }
nav ul li { display: inline-block; margin-right: 20px; }
Ви можете знищити згенеровані дерева за допомогою unmountComponentAtNode()
.
Оновлення зображеного дерева
Ви можете викликати render
більше одного разу на одному вузлі DOM. Доки структура дерева компонентів збігається з тим, що було відрендерено раніше, React буде зберігати стан. Зверніть увагу, що ви можете вводити вхідні дані, а це означає, що оновлення від повторних викликів render
щосекунди не є деструктивними:
import { render } from 'react-dom';
import './styles.css';
import App from './App.js';
let i = 0;
setInterval(() => {
render(
<App counter={i} />,
document.getElementById('root')
);
i++;
}, 1000);
export default function App({counter}) {
return (
<>
<h1>Hello, world! {counter}</h1>
<input placeholder="Type something here" />
</>
);
}
Рідко доводиться викликати render
декілька разів. Зазвичай замість цього ви оновлюєте стан всередині ваших компонентів.