React で複数のコンポーネントをレンダリングする

Irakli Tchigladze 2024年2月15日
  1. React で複数のコンポーネントをレンダリングできない理由
  2. <div> を使用して React で複数のコンポーネントをレンダリングする
  3. React With Fragments で複数のコンポーネントをレンダリングする
React で複数のコンポーネントをレンダリングする

React を学ぼうとするほとんどの初心者は、通常、1つのことで混乱します。 React には厳格なルールがあります。 1 回の呼び出しで複数のコンポーネントをレンダリングすることはできません。

混乱しないでください。 何百ものコンポーネントを含むコンポーネント ツリー全体をレンダリングできますが、すべてのコンポーネントに親要素が 1つだけ含まれている必要があります。

この記事では、React で複数のコンポーネントをレンダリングする最も簡単な方法を紹介したいと思います。

React で複数のコンポーネントをレンダリングできない理由

ReactDOM.render() メソッドでは、1 回の呼び出しで複数のコンポーネントをレンダリングすることはできません。このメソッドを呼び出すたびにルート コンテナーが必要になるからです。 よくあることですが、多くのコンポーネントをレンダリングする場合は、それらすべてを 1つの要素またはコンテナーにラップする必要があります。

<div> を使用して React で複数のコンポーネントをレンダリングする

実際の例を見てみましょう。 ここには、いくつかのヘッダーを返す App コンポーネントがあります。

export default function App() {
  return (
      <h1>Hello CodeSandbox</h1>
      <h1>Title for the first blog post</h1>
      <h1>Title for the second blog post</h1>
      <h1>Title for the third blog post</h1>
  );
}

ご想像のとおり、このコンポーネントは SyntaxError を生成します。

複数コンポーネント エラー

これはかなり説明的です。 これらの要素は、1つの親要素でラップする必要があることがわかっています。

解決策は簡単です。すべてを <div> HTML 要素でラップします。

export default function App() {
  return (
    <div>
      <h1>Hello CodeSandbox</h1>
      <h1>Title for the first blog post</h1>
      <h1>Title for the second blog post</h1>
      <h1>Title for the third blog post</h1>
    </div>
  );
}

ライブ CodeSandbox デモ を見てください。 すべてが正常に機能します。 ここで、<div> を削除すると、再びエラーが発生します。

React With Fragments で複数のコンポーネントをレンダリングする

React v16.2 では、開発者は React フラグメントを使用して、不必要に DOM ノードを作成することなく、子を 1つの要素の下にグループ化できます。

構文は単純です。

export default function App() {
  return (
    <React.Fragment>
      <h1>Hello CodeSandbox</h1>
      <h1>Title for the first blog post</h1>
      <h1>Title for the second blog post</h1>
      <h1>Title for the third blog post</h1>
    </React.Fragment>
  );
}

多くの人が短縮構文を使用していますが、これははるかに便利です。

export default function App() {
  return (
    <>
      <h1>Hello CodeSandbox</h1>
      <h1>Title for the first blog post</h1>
      <h1>Title for the second blog post</h1>
      <h1>Title for the third blog post</h1>
    </>
  );
}

これは、新しい <div> ラッパーを作成するよりもはるかにエレガントで効率的です。

Irakli Tchigladze avatar Irakli Tchigladze avatar

Irakli is a writer who loves computers and helping people solve their technical problems. He lives in Georgia and enjoys spending time with animals.

LinkedIn

関連記事 - React Component