[Sy] Reactで「Adjacent JSX elements must be wrapped in an enclosing tag」となる場合の対処
2016/07/15
React でコンポーネントを作ろうとしたらうまく動いてないので Developer Tools を見てみる Adjacent JSX elements must be wrapped in an enclosing tag
とエラーが起きていました。その場合の問題点と修正方法についてです。
こんなコンポーネントだとダメ
このエラーは、次のようなコンポーネントを作ろうとすると出ます。
var MyComponent = React.createClass({
render: function() {
return (
<div>first</div>
<div>second</div>
);
}
});
ReactDOM.render(
<MyComponent />,
document.getElementById('container')
);
やりたいことは、「2つの div 要素をもつ MyComponent」というコンポーネントを、container に作りたい、というとてもシンプルなことです。
何がいけないのか?
なぜエラーが出るかというと、Reactで作成するコンポーネントは、 トップレベル(一番親となる階層)の要素を一つにする必要があるから です。
先ほどの MyComponent
を見ると、2つの div 要素がトップレベルで並んでることがわかります。
<div>first</div> <-- 2つの要素が
<div>second</div> <-- トップレベルで並んでしまっている
対処法
なので、次のようにさらに上の階層を作ってまとめてあげる(ラップしてあげる)とエラーが出なくなります。
var MyComponent = React.createClass({
render: function() {
return (
<div> <-- 例えばdiv要素で囲んであげる
<div>first</div>
<div>second</div>
</div>
);
}
});
ひとこと
まだ React 触り始めたばかりですが、JSX だと Emmet 使えるし、なかなか好きになれそうです。