<Fragment> を使うことで、ラッパ用�?γƒŽγƒΌγƒ‰γ‚’η”¨γ„γšγ«θ¦η΄ γ‚’γ‚°γƒ«γƒΌγƒ—εŒ–γ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚ι€šεΈΈγ― <>...</> γ¨γ„γ†ζ§‹ζ–‡γ§δ½Ώη”¨γ•γ‚ŒγΎγ™γ€‚

<>
<OneChild />
<AnotherChild />
</>

γƒͺフゑレンス

<Fragment>

ε˜δΈ€οΏ½?θ¦η΄ γŒεΏ…θ¦γͺ場青で、耇数�?要素を <Fragment> γ§γƒ©γƒƒγƒ—γ™γ‚‹γ“γ¨γ§γ‚°γƒ«γƒΌγƒ—εŒ–γ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚Fragment γ§θ¦η΄ γ‚’γ‚°γƒ«γƒΌγƒ—εŒ–γ—γ¦γ‚‚γ€ε‡ΊεŠ›γ•γ‚Œγ‚‹ DOM γ«γ―ε½±ιŸΏγ‚’δΈŽγˆγΎγ›γ‚“γ€‚θ¦η΄ γŒγ‚°γƒ«γƒΌγƒ—εŒ–γ•γ‚Œγ¦γ„γͺγ„γ¨γγ¨εŒγ˜γ§γ™γ€‚η©ΊοΏ½? JSX γ‚Ώγ‚° <></> は、ほとんど�?場合 <Fragment></Fragment> οΏ½?省η•₯θ¨˜ζ³•γ§γ™γ€‚

props

  • 省η•₯可能 key: ζ˜Žη€Ίηš„γͺ <Fragment> 構文で�?οΏ½θ¨€γ•γ‚ŒγŸγƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆγ― key γ‚’ζŒγ€γ“γ¨γŒγ§γγΎγ™γ€‚

注意点

  • key γ‚’γƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆγ«ζΈ‘γ—γŸγ„ε ΄εˆγ―γ€<>...</> 構文を使用することはできません。'react' から Fragment γ‚’ζ˜Žη€Ίηš„γ«γ‚€γƒ³γƒγƒΌγƒˆγ—γ€<Fragment key={yourKey}>...</Fragment> とレンダーしγͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“γ€‚

  • React は、<><Child /></> と [<Child />] οΏ½?レンダー間、あるいは <><Child /></> と <Child /> οΏ½?γƒ¬γƒ³γƒ€γƒΌι–“γ§θ‘Œγζ₯γ™γ‚‹ε ΄εˆγ« state γ‚’γƒͺγ‚»γƒƒγƒˆγ—γΎγ›γ‚“γ€‚γ“γ‚Œγ―ε˜δΈ€γƒ¬γƒ™γƒ«οΏ½?深さ�?とき�?み�?ε‹•δ½œγ§γ™γ€‚δΎ‹γˆγ°γ€<><><Child /></></> から <Child /> へ�?倉更では state がγƒͺγ‚»γƒƒγƒˆγ•γ‚ŒγΎγ™γ€‚ε…·δ½“ηš„γͺζŒ―γ‚‹θˆžγ„οΏ½?詳細はこけらを参照してください。


使用法

耇数�?要素を返す

耇数�?θ¦η΄ γ‚’γ‚°γƒ«γƒΌγƒ—εŒ–γ™γ‚‹γŸγ‚γ« Fragment γ‚„γ€γγ‚Œγ¨εŒη­‰οΏ½? <>...</> ζ§‹ζ–‡γ‚’δ½Ώη”¨γ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚γ“γ‚Œγ«γ‚ˆγ‚Šε˜δΈ€οΏ½?要素が�?γ‘γ‚‹ε ΄ζ‰€γ§γ‚γ‚Œγ°γ©γ“γ«γ§γ‚‚γ€θ€‡ζ•°οΏ½?要素を配�?γ™γ‚‹γ“γ¨γŒγ§γγ‚‹γ‚ˆγ†γ«γͺγ‚ŠγΎγ™γ€‚δΎ‹γˆγ°γ€γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆγ― 1 ぀�?θ¦η΄ γ—γ‹θΏ”γ™γ“γ¨γŒγ§γγΎγ›γ‚“γŒγ€γƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆγ‚’δ½Ώη”¨γ™γ‚Œγ°θ€‡ζ•°οΏ½?要素をまとめて、グループとして返せます。

function Post() {
return (
<>
<PostTitle />
<PostBody />
</>
);
}

γƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆγŒζœ‰η”¨γͺοΏ½?は、DOM 要素�?γ‚ˆγ†γͺδ»–οΏ½?γ‚³γƒ³γƒ†γƒŠγ§θ¦η΄ γ‚’γƒ©γƒƒγƒ—γ™γ‚‹ε ΄εˆγ¨η•°γͺγ‚Šγ€γƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆγ§θ¦η΄ γ‚’γ‚°γƒ«γƒΌγƒ—εŒ–γ—γ¦γ‚‚γƒ¬γ‚€γ‚’γ‚¦γƒˆγ‚„γ‚Ήγ‚Ώγ‚€γƒ«γ«ε½±ιŸΏγ‚’δΈŽγˆγͺいからです。δ»₯δΈ‹οΏ½?δΎ‹γ‚’γƒ–γƒ©γ‚¦γ‚Άγƒ„γƒΌγƒ«γ§γ‚€γƒ³γ‚Ήγƒšγ‚―γƒˆοΌˆinspect, θͺΏζŸ»οΌ‰γ—てみると、すべて�? <h1> γ‚„ <article> DOM γƒŽγƒΌγƒ‰γŒγƒ©γƒƒγƒ—γ•γ‚Œγšγ«ε…„εΌŸγ¨γ—γ¦θ‘¨η€Ίγ•γ‚Œγ‚‹γ“γ¨γŒγ‚γ‹γ‚ŠγΎγ™γ€‚

export default function Blog() {
  return (
    <>
      <Post title="An update" body="It's been a while since I posted..." />
      <Post title="My new blog" body="I am starting a new blog!" />
    </>
  )
}

function Post({ title, body }) {
  return (
    <>
      <PostTitle title={title} />
      <PostBody body={body} />
    </>
  );
}

function PostTitle({ title }) {
  return <h1>{title}</h1>
}

function PostBody({ body }) {
  return (
    <article>
      <p>{body}</p>
    </article>
  );
}

さらに深くηŸ₯γ‚‹

η‰Ήεˆ₯γͺζ§‹ζ–‡γ‚’δ½Ώγ‚γšγ«γƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆγ‚’θ¨˜θΏ°γ™γ‚‹ζ–Ήζ³•

上述�?例は、React から Fragment γ‚’γ‚€γƒ³γƒγƒΌγƒˆγ—γ¦δ»₯δΈ‹οΏ½?γ‚ˆγ†γ«ζ›Έγγ“γ¨γ¨εŒγ˜γ§γ™γ€‚

import { Fragment } from 'react';

function Post() {
return (
<Fragment>
<PostTitle />
<PostBody />
</Fragment>
);
}

Fragment に key γ‚’ζΈ‘γ™ε ΄εˆδ»₯ε€–γ§γ―γ€ι€šεΈΈεΏ…θ¦γ‚γ‚ŠγΎγ›γ‚“γ€‚


耇数�?θ¦η΄ γ‚’ε€‰ζ•°γ«ε‰²γ‚Šε½“γ¦γ‚‹

δ»–οΏ½?θ¦η΄ γ¨εŒγ˜γ‚ˆγ†γ«γ€γƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆγ‚‚θ¦η΄ γ¨γ—γ¦ε€‰ζ•°γ«ε‰²γ‚Šε½“γ¦γŸγ‚Šγ€props γ¨γ—γ¦ζΈ‘γ—γŸγ‚Šγ™γ‚‹γ“γ¨γŒγ§γγΎγ™οΌš

function CloseDialog() {
const buttons = (
<>
<OKButton />
<CancelButton />
</>
);
return (
<AlertDialog buttons={buttons}>
Are you sure you want to leave this page?
</AlertDialog>
);
}

γƒ†γ‚­γ‚Ήγƒˆγ¨θ¦η΄ γ‚’γ‚°γƒ«γƒΌγƒ—εŒ–γ™γ‚‹

Fragment γ‚’δ½Ώγ†γ¨γƒ†γ‚­γ‚Ήγƒˆγ¨γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆγ‚’γ‚°γƒ«γƒΌγƒ—εŒ–γ™γ‚‹γ“γ¨γŒγ§γγΎγ™οΌš

function DateRangePicker({ start, end }) {
return (
<>
From
<DatePicker date={start} />
to
<DatePicker date={end} />
</>
);
}

γƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆοΏ½?γƒͺγ‚Ήγƒˆγ‚’γƒ¬γƒ³γƒ€γƒΌγ™γ‚‹

こけらは <></> ζ§‹ζ–‡οΏ½?δ»£γ‚γ‚Šγ« Fragment γ‚’ζ˜Žη€Ίηš„γ«θ¨˜θΏ°γ™γ‚‹εΏ…θ¦γŒγ‚γ‚‹ε ΄ι’γ§γ™γ€‚γƒ«γƒΌγƒ—ε†…γ§θ€‡ζ•°οΏ½?要素をレンダーするときには、各要素に key γ‚’ε‰²γ‚Šε½“γ¦γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γ€‚γƒ«γƒΌγƒ—ε†…οΏ½?θ¦η΄ γŒγƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆοΏ½?ε ΄εˆγ―γ€key ε±žζ€§γ‚’ζΈ‘γ™γŸγ‚γ«ι€šεΈΈοΏ½? JSX 要素�?ζ§‹ζ–‡γ‚’δ½Ώη”¨γ™γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γ€‚

function Blog() {
return posts.map(post =>
<Fragment key={post.id}>
<PostTitle title={post.title} />
<PostBody body={post.body} />
</Fragment>
);
}

DOM γ‚’γ‚€γƒ³γ‚Ήγƒšγ‚―γƒˆγ™γ‚‹γ¨γ€γƒ•γƒ©γ‚°γƒ‘γƒ³γƒˆοΏ½?子要素�?γΎγ‚γ‚Šγ«γƒ©γƒƒγƒ‘θ¦η΄ γŒγͺいことを璺θͺγ§γγΎγ™γ€‚

import { Fragment } from 'react';

const posts = [
  { id: 1, title: 'An update', body: "It's been a while since I posted..." },
  { id: 2, title: 'My new blog', body: 'I am starting a new blog!' }
];

export default function Blog() {
  return posts.map(post =>
    <Fragment key={post.id}>
      <PostTitle title={post.title} />
      <PostBody body={post.body} />
    </Fragment>
  );
}

function PostTitle({ title }) {
  return <h1>{title}</h1>
}

function PostBody({ body }) {
  return (
    <article>
      <p>{body}</p>
    </article>
  );
}