render
は、ブラウザのDOMノードにJSX(「Reactノード」)の一部をレンダリングします。
render(reactNode, domNode, callback?)
リファレンス
render(reactNode, domNode, callback?)
ブラウザのDOM要素内にReactコンポーネントを表示するには、render
を呼び出します。
import { render } from 'react-dom';
const domNode = document.getElementById('root');
render(<App />, domNode);
Reactは<App />
をdomNode
に表示し、内部のDOMの管理を引き継ぎます。
Reactで完全に構築されたアプリは、通常、ルートコンポーネントでrender
呼び出しを1回だけ行います。ページの一部にReactを「少量」使用しているページでは、必要に応じてrender
呼び出しを複数行うことができます。
パラメータ
-
reactNode
:表示するReactノード。通常は<App />
のようなJSXの一部ですが、createElement()
で構築されたReact要素、文字列、数値、null
、またはundefined
を渡すこともできます。 -
domNode
: DOM要素です。ReactはこのDOM要素内に渡されたreactNode
を表示します。この時点から、ReactはdomNode
内のDOMを管理し、Reactツリーに変更があった際に更新します。 -
オプション
callback
: 関数です。渡された場合、コンポーネントがDOMに配置された後にReactはこの関数を呼び出します。
戻り値
render
は通常null
を返します。しかし、渡されたreactNode
がクラスコンポーネントの場合、そのコンポーネントのインスタンスを返します。
注意事項
-
React 18以降では、
render
はcreateRoot
に置き換えられました。React 18以降はcreateRoot
を使用してください。 -
最初に
render
を呼び出すと、Reactコンポーネントをレンダリングする前に、domNode
内の既存のHTMLコンテンツをすべてクリアします。domNode
にサーバー側またはビルド時にReactによって生成されたHTMLが含まれている場合は、既存のHTMLにイベントハンドラーをアタッチするhydrate()
を使用してください。 -
同じ
domNode
に対してrender
を複数回呼び出すと、Reactは最新のJSXを反映するようにDOMを必要に応じて更新します。Reactは、DOMのどの部分が再利用でき、どの部分が再作成する必要があるかを、以前にレンダリングされたツリーと「照合」することで判断します。同じdomNode
に対してrender
を再度呼び出すことは、ルートコンポーネントのset
関数を呼び出すことと似ています。Reactは不要なDOM更新を回避します。 -
アプリケーションが完全にReactで構築されている場合、アプリケーション内の
render
呼び出しは1回だけになります。(フレームワークを使用している場合は、フレームワークが代わりにこの呼び出しを行う場合があります。)コンポーネントの子ではないDOMツリーの異なる部分(例:モーダルまたはツールチップ)にJSXをレンダリングする場合は、render
ではなくcreatePortal
を使用してください。
使用方法
ブラウザのDOMノード内にReactコンポーネントを表示するには、render
を呼び出します。
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
を呼び出してください。Reactを既存プロジェクトに追加する方法
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
を複数回呼び出すことは一般的ではありません。通常は、代わりにコンポーネント内で状態を更新します。