Fragments
React์์ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฌ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ํํ ํจํด์ ๋๋ค. Fragments๋ DOM์ ๋ณ๋์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ์ฌ๋ฌ ์์์ ๊ทธ๋ฃนํํ ์ ์์ต๋๋ค.
render() {
return (
<React.Fragment>
<ChildA />
<ChildB />
<ChildC />
</React.Fragment>
);
}
์ด๋ฅผ ์ ์ธํ๋ ์๋ก์ด ๋จ์ถ ๋ฌธ๋ฒ์ด ์์ต๋๋ค.
๋๊ธฐ
์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฌ ์์์ ๋ฐํํ๋ ๊ฒ์ ํํ ํจํด์ ๋๋ค. ๋ค์ React ์์๋ฅผ ๋ณด์ธ์.
class Table extends React.Component {
render() {
return (
<table>
<tr>
<Columns />
</tr>
</table>
);
}
}
๋ ๋๋ง ๋ HTML์ด ์ ํจํ๋ ค๋ฉด <Columns />
๊ฐ ์ฌ๋ฌ <td>
์๋ฆฌ๋จผํธ๋ง ๋ฐํํด์ผ ํฉ๋๋ค. <Columns />
์ render()
์์ ๋ถ๋ชจ div๋ก ์์๋ค์ ๊ฐ์ผ๋ค๋ฉด ๋ ๋๋ง ๋ HTML์ ์ ํจํ์ง ์์ต๋๋ค.
class Columns extends React.Component {
render() {
return (
<div>
<td>Hello</td>
<td>World</td>
</div>
);
}
}
<Table />
์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<table>
<tr>
<div>
<td>Hello</td>
<td>World</td>
</div>
</tr>
</table>
Fragments๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค๋๋ค.
์ฌ์ฉ๋ฒ
class Columns extends React.Component {
render() {
return (
<React.Fragment> <td>Hello</td>
<td>World</td>
</React.Fragment> );
}
}
์ฌ๋ฐ๋ฅธ <Table />
์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ต๋๋ค.
<table>
<tr>
<td>Hello</td>
<td>World</td>
</tr>
</table>
๋จ์ถ ๋ฌธ๋ฒ
Fragments๋ฅผ ์ ์ธํ๋ ๋ ์งง๊ณ ์๋ก์ด ๋ฌธ๋ฒ์ด ์์ต๋๋ค. ๋ง์น ๋น ํ๊ทธ์ ๊ฐ์ต๋๋ค.
class Columns extends React.Component {
render() {
return (
<> <td>Hello</td>
<td>World</td>
</> );
}
}
key
๋๋ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ง์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋นผ๊ณ ๋ค๋ฅธ ์๋ฆฌ๋จผํธ์ฒ๋ผ <></>
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
key๊ฐ ์๋ Fragments
Fragments์ key
๊ฐ ์๋ค๋ฉด <React.Fragment>
๋ฌธ๋ฒ์ผ๋ก ๋ช
์์ ์ผ๋ก ์ ์ธํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ ์ ๋ชฉ๋ก์ ๋ง๋ค๊ธฐ ์ํด ์ปฌ๋ ์
์ fragments ๋ฐฐ์ด๋ก ๋งคํํ๋ ์ฌ์ฉ ์ฌ๋ก์
๋๋ค.
function Glossary(props) {
return (
<dl>
{props.items.map(item => (
// React๋ `key`๊ฐ ์์ผ๋ฉด key warning์ ๋ฐ์ํฉ๋๋ค.
<React.Fragment key={item.id}>
<dt>{item.term}</dt>
<dd>{item.description}</dd>
</React.Fragment>
))}
</dl>
);
}
key
๋ Fragment
์ ์ ๋ฌํ ์ ์๋ ์ ์ผํ ์ดํธ๋ฆฌ๋ทฐํธ์
๋๋ค. ์ถํ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๊ฐ์ ์ถ๊ฐ์ ์ธ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ง์ํ ์๋ ์์ต๋๋ค.
๋ผ์ด๋ธ ๋ฐ๋ชจ
CodePen์์ ์๋ก์ด JSX fragment ๋ฌธ๋ฒ์ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๋ค.