ReactのJSXで複数のタグを返すコンポーネントを作りたい時
JSXはルートが1つのタグでないとエラーになる
例がアレだけど、これはエラーになる
function ListData() { // トップの改装に複数のタグあるとエラーになる return ( <li>星宮いちご</li> <li>霧矢あおい</li> <li>紫吹蘭</li> ); } class List extends React.Component { render() { return ( <ul> <ListData /> </ul> ) } } ReactDOM.render( <List />, document.getElementById('root'), );
👇
Parsing error: Adjacent JSX elements must be wrapped in an enclosing tag.
SyntaxError: Adjacent JSX elements must be wrapped in an enclosing tag.
React.Fragment を使う
複数のタグが並列したエレメントをrenderしたい場合は<React. Fragment>
で囲えばOK
function ListData() { return ( <React.Fragment> <li>星宮いちご</li> <li>霧矢あおい</li> <li>紫吹蘭</li> </React.Fragment> ); }
<React.Fragment>
はDOMとして出力されないので、エラー回避のために<div>
で囲って余計なタグを出力してしまうこともない。
<></>
というショートタグもあるけど、まだサポートされていないのが多いみたい。
追記 もう十分サポートされてるので <></>
を使うのが良さそうです!
ループで作成したものだとエラーにならない
JSXを直接return
する際にトップの階層にタグが複数あるとエラーになるけど、map()
などのループで作成した配列として返せばエラーにならないっぽい。
function ListData() { const data = ['星宮いちご', '霧矢あおい', '紫吹蘭']; const listData = data.map((val, i) => { return (<li key={i}>{val}</li>); }); // エラーにならない return listData; }
JSXキモい派だったけど、最近慣れてきた… 使っていれば慣れるものですね。
[参考]
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2019/03/08
- メディア: 単行本
- この商品を含むブログを見る