<Fragment> (<>...</>)
<Fragment>๋ ์ข
์ข
 <>...</> ๊ตฌ๋ฌธ์ผ๋ก ์ฌ์ฉ๋๊ณ , ๋ํผ ๋
ธ๋ ์์ด ์๋ฆฌ๋จผํธ๋ฅผ ๊ทธ๋ฃนํํ  ์ ์์ต๋๋ค.
<>
  <OneChild />
  <AnotherChild />
</>Reference
<Fragment> 
ํ๋์ ์๋ฆฌ๋จผํธ๊ฐ ํ์ํ ์ํฉ์์ ์๋ฆฌ๋จผํธ๋ฅผ <Fragment>๋ก ๊ฐ์ธ์ ๊ทธ๋ฃนํํ์ธ์. Fragment ์์์ ๊ทธ๋ฃนํ๋ ์๋ฆฌ๋จผํธ๋ DOM ๊ฒฐ๊ณผ๋ฌผ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ์ฆ, ์๋ฆฌ๋จผํธ๊ฐ ๊ทธ๋ฃนํ๋์ง ์์ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋น JSX ํ๊ทธ์ธ <></>๋ <Fragment></Fragment>์ ์ค์๋ง์
๋๋ค.
Props
- optional 
key: ๋ช ์์ <Fragment>๋ก ์ ์ธ๋ Fragment์๋ key๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. 
์ฃผ์ ์ฌํญ
- 
Fragment์
key๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด<>...</>๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ช ์์ ์ผ๋กreact์์Fragment๋ฅผ importํ๊ณ<Fragment key={yourKey}>...</Fragment>๋ฅผ ๋ ๋๋งํด์ผ ํฉ๋๋ค. - 
React๋
<><Child /></>์์[<Child />]๋ก ๋ ๋๋งํ๊ฑฐ๋ (๋๋ ๋ฐ๋์ ๊ฒฝ์ฐ), ํน์<><Child /></>์์<Child />๋ ๋๋งํ๊ฑฐ๋ (๋๋ ๋ฐ๋์ ๊ฒฝ์ฐ) state๋ฅผ ์ด๊ธฐํํ์ง ์์ต๋๋ค. ์ด๋ ์ค์ง single level๊น์ง ์ ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด<><><Child /></></>์์<Child />๋ก ๋ ๋๋งํ๋ ๊ฒ์ state๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค. ์ ํํ semantics๋ ์ฌ๊ธฐ์ ์ฐธ์กฐํ์ค ์ ์์ต๋๋ค. 
์ฌ์ฉ๋ฒ
์ฌ๋ฌ ์๋ฆฌ๋จผํธ ๋ฐํํ๊ธฐ
์ฌ๋ฌ ์๋ฆฌ๋จผํธ๋ฅผ ํจ๊ป ๊ทธ๋ฃนํํ๊ธฐ ์ํด Fragment๋ <>...</> ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ธ์. ํ ๊ฐ์ ์๋ฆฌ๋จผํธ๊ฐ ์กด์ฌํ  ์ ์๋ ๊ณณ์ ์ฌ๋ฌ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ปดํฌ๋ํธ๋ ํ ๊ฐ์ ์๋ฆฌ๋จผํธ๋ง ๋ฐํํ  ์ ์์ง๋ง Fragment๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์๋ฆฌ๋จผํธ๋ฅผ ํจ๊ป ๊ทธ๋ฃนํํ์ฌ ๋ฐํํ  ์ ์์ต๋๋ค.
function Post() {
  return (
    <>
      <PostTitle />
      <PostBody />
    </>
  );
}Fragment๋ก ์๋ฆฌ๋จผํธ๋ฅผ ๊ทธ๋ฃนํํ๋ฉด DOM ์๋ฆฌ๋จผํธ์ ๊ฐ์ ๋ค๋ฅธ ์ปจํ
์ด๋๋ก ์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ์ธ๋ ๊ฒฝ์ฐ์๋ ๋ฌ๋ฆฌ ๋ ์ด์์์ด๋ ์คํ์ผ์ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ Fragment๋ ํจ๊ณผ์ ์
๋๋ค. ๋ธ๋ผ์ฐ์ ๋ก ์๋ ์์ ๋ฅผ ๊ฒ์ฌํ๋ฉด ๋ชจ๋  <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> ); }
Deep Dive
์์ ์์๋ React์์ Fragment๋ฅผ import ํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
import { Fragment } from 'react';
function Post() {
  return (
    <Fragment>
      <PostTitle />
      <PostBody />
    </Fragment>
  );
}์ผ๋ฐ์ ์ผ๋ก Fragment์ key๋ฅผ ๋๊ฒจ์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ์ด ๊ธฐ๋ฅ์ ํ์ํ์ง ์์ต๋๋ค.
๋ณ์์ ์ฌ๋ฌ ์๋ฆฌ๋จผํธ ํ ๋น
๋ค๋ฅธ ์๋ฆฌ๋จผํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก Fragment๋ฅผ ๋ณ์์ ํ ๋นํ๊ณ 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 ๋ฆฌ์คํธ ๋ ๋๋ง
<></> ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๋์  ๋ช
์์ ์ผ๋ก Fragment๋ฅผ ์์ฑํด์ผ ํ๋ ์ํฉ์ด ์์ต๋๋ค. ๋ฐ๋ณต์ ํตํด ์ฌ๋ฌ ์๋ฆฌ๋จผํธ๋ฅผ ๋ ๋๋งํ  ๋ ๊ฐ ์์์ key๋ฅผ ํ ๋นํด์ผ ํฉ๋๋ค. ๋ฐ๋ณต ์์ ์๋ฆฌ๋จผํธ๊ฐ Fragment์ธ ๊ฒฝ์ฐ key ์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด ์ผ๋ฐ JSX ์๋ฆฌ๋จผํธ ๋ฌธ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
function Blog() {
  return posts.map(post =>
    <Fragment key={post.id}>
      <PostTitle title={post.title} />
      <PostBody body={post.body} />
    </Fragment>
  );
}DOM์ ๊ฒ์ฌํ์ฌ Fragment ์์ ์ฃผ์์ ๋ํผ ์๋ฆฌ๋จผํธ๊ฐ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
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> ); }