render 將一段 JSX(“React 節點”)渲染到瀏覽器 DOM 節點中。
render(reactNode, domNode, callback?)參考
render(reactNode, domNode, callback?)
呼叫 render 以在瀏覽器 DOM 元素內顯示 React 元件。
import { render } from 'react-dom';
const domNode = document.getElementById('root');
render(<App />, domNode);React 會在 domNode 中顯示 <App />,並接管對其內部 DOM 的管理。
完全使用 React 構建的應用程式通常只有一個帶有其根元件的 render 呼叫。 對頁面部分內容使用 React“點綴”的頁面可以根據需要進行多次 render 呼叫。
引數
-
reactNode:要顯示的 *React 節點*。這通常是一段 JSX,例如<App />,但您也可以傳遞使用createElement()構造的 React 元素、字串、數字、null或undefined。 -
domNode:一個DOM 元素。 React 會在您傳遞的此 DOM 元素內顯示reactNode。從這一刻起,React 將管理domNode內部的 DOM,並在 React 樹發生更改時更新它。 -
可選
callback:一個函式。如果傳遞,React 會在您的元件被放置到 DOM 中後呼叫它。
返回值
render 函式通常返回 null。但是,如果傳遞的 reactNode 是一個*類元件*,則它將返回該元件的一個例項。
注意事項
-
在 React 18 中,
render已被createRoot替代。請在 React 18 及更高版本中使用createRoot。 -
第一次呼叫
render時,React 會在將 React 元件渲染到domNode中之前,清除domNode內所有現有的 HTML 內容。如果domNode包含由 React 在伺服器端或構建期間生成的 HTML,請改用hydrate(),它會將事件處理程式附加到現有的 HTML。 -
如果在同一個
domNode上多次呼叫render,React 將根據需要更新 DOM 以反映傳遞的最新 JSX。React 將透過與之前渲染的樹進行 “匹配” 來確定 DOM 的哪些部分可以重用,哪些部分需要重新建立。在同一個domNode上再次呼叫render類似於在根元件上呼叫set函式:React 會避免不必要的 DOM 更新。 -
如果應用程式完全使用 React 構建,則應用程式中可能只有一個
render呼叫。(如果使用框架,它可能會為你進行此呼叫。)如果想在元件子級之外的 DOM 樹的不同部分(例如,模態框或工具提示)中渲染一段 JSX,請使用createPortal而不是render。
用法
呼叫 render 函式可以在 瀏覽器 DOM 節點 內顯示 React 元件。
import { render } from 'react-dom';
import App from './App.js';
render(<App />, document.getElementById('root'));渲染根元件
在完全使用 React 構建的應用中,通常只會在啟動時執行一次——以渲染“根”元件。
import './styles.css'; import { render } from 'react-dom'; import App from './App.js'; render(<App />, document.getElementById('root'));
通常情況下,不需要再次呼叫 render 或在更多的地方呼叫它。從現在開始,React 將管理應用程式的 DOM。要更新 UI,元件將 使用狀態。
渲染多個根節點
如果頁面 不是完全使用 React 構建,則為 React 管理的每個頂級 UI 部分呼叫 render。
import './styles.css'; import { render } from 'react-dom'; import { Comments, Navigation } from './Components.js'; render( <Navigation />, document.getElementById('navigation') ); render( <Comments />, document.getElementById('comments') );
可以使用 unmountComponentAtNode() 銷燬渲染的樹。
更新渲染的樹
可以在同一個 DOM 節點上多次呼叫 render。只要元件樹結構與之前渲染的結構相匹配,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);
多次呼叫 render 並不常見。通常,會在元件內部 更新狀態。