React.jsを使用していると、"Adjacent JSX elements must be wrapped in an enclosing tag"というエラーに遭遇することがあります。このエラーは、JSX内で複数の要素を返そうとしたときに発生します。本記事では、このエラーの原因と解決方法について詳しく説明します。
エラーの原因
このエラーは、React コンポーネントが複数の隣接する JSX 要素を直接返そうとしたときに発生します。React は、コンポーネントが単一のルート要素を返すことを要求します。
例えば、以下のようなコードはエラーを引き起こします:
function ErrorComponent() {
return (
<h1>Hello</h1>
<p>World</p>
);
}解決方法
このエラーを解決するには、いくつかの方法があります。以下に主な解決策を紹介します。
1. div タグで囲む
最も簡単な解決方法は、複数の要素を単一の `div` タグで囲むことです:
function FixedComponent() {
return (
<div>
<h1>Hello</h1>
<p>World</p>
</div>
);
}2. React.Fragment を使用する
不要な `div` を追加したくない場合は、`React.Fragment` を使用できます:
import React from 'react';
function FixedComponent() {
return (
<React.Fragment>
<h1>Hello</h1>
<p>World</p>
</React.Fragment>
);
}3. 短縮構文を使用する
React 16.2 以降では、`React.Fragment` の短縮構文として空のタグ `<>` と `` を使用できます:
function FixedComponent() {
return (
<>
<h1>Hello</h1>
<p>World</p>
</>
);
}4. 配列を返す
JSX 要素の配列を返すこともできますが、各要素に一意の `key` prop を追加する必要があります:
function FixedComponent() {
return [
<h1 key="header">Hello</h1>,
<p key="paragraph">World</p>
];
}まとめ
"Adjacent JSX elements must be wrapped in an enclosing tag" エラーは、複数の JSX 要素を単一のルート要素で囲むことで簡単に解決できます。`div` タグ、`React.Fragment`、短縮構文 `<>`、または配列を使用することで、このエラーを回避し、クリーンで効率的な React コードを書くことができます。
これらの解決方法を理解し、適切に適用することで、React アプリケーションの開発をスムーズに進めることができるでしょう。