React.jsでAdjacent JSX elements must be wrapped in an enclosing tagのエラーが発生した時の解決方法

React.jsを使用していると、「Adjacent JSX elements must be wrapped in an enclosing tag」というエラーに遭遇することがあります。このエラーは、JSX内で複数の要素を直接並べて記述した際に発生します。本記事では、このエラーの原因と解決方法について詳しく解説します。

エラーの原因

このエラーは、JSXの基本ルールに違反している場合に発生します。React.jsでは、コンポーネントのレンダリング結果は単一のルート要素でなければなりません。つまり、複数の要素を並列して記述することはできません。

例えば、以下のようなコードはエラーを引き起こします:

function MyComponent() {
  return (
    <h1>Hello</h1>
    <p>World</p>
  );
}

解決方法

このエラーを解決するには、以下のいくつかの方法があります:

1. div要素で囲む

最も一般的な解決方法は、複数の要素を`div`タグで囲むことです:

function MyComponent() {
  return (
    <div>
      <h1>Hello</h1>
      <p>World</p>
    </div>
  );
}

2. Reactフラグメントを使用する

不要なDOM要素を追加したくない場合は、Reactフラグメントを使用できます:

import React from 'react';

function MyComponent() {
  return (
    <React.Fragment>
      <h1>Hello</h1>
      <p>World</p>
    </React.Fragment>
  );
}

または、短縮構文を使用することもできます:

function MyComponent() {
  return (
    <>
      <h1>Hello</h1>
      <p>World</p>
    </>
  );
}

3. 配列を返す

配列を返すことで、複数の要素を並列して記述することも可能です:

function MyComponent() {
  return [
    <h1 key="1">Hello</h1>,
    <p key="2">World</p>
  ];
}

注意:この方法を使用する場合、各要素に一意の`key`プロパティを設定する必要があります。

まとめ

「Adjacent JSX elements must be wrapped in an enclosing tag」エラーは、JSXの基本ルールに違反した際に発生します。このエラーを解決するには、複数の要素を単一の親要素で囲むか、Reactフラグメントを使用するか、または配列を返す方法があります。適切な方法を選択することで、クリーンで効率的なReactコードを書くことができます。

これらの解決方法を理解し実践することで、React.jsでの開発がよりスムーズになるでしょう。エラーメッセージを適切に解釈し、迅速に対応することは、効率的な開発の鍵となります。