Intro
์ ๋ฌ๋ฐ์ props๋ฅผ map ํจ์๋ฅผ ์ด์ฉํ์ฌ table๋ฅผ ๋ง๋ค๋ ๋์ค ๋ค์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
Warning: validateDOMNesting(...): <div> cannot appear as a child of <tbody>
<table>
<thead>
<tr>
<th>test</th>
<th>test</th>
<th>test</th>
<th>test</th>
<th>test</th>
<th>test</th>
</tr>
</thead>
<tbody>
{props.map((item, index) => {
return (
<>
<tr key={index} onClick={}>
<td>{item}</td>
<td>{item}</td>
<td>{item}</td>
<td>{item}</td>
<td>{item}</td>
<td>{item}</td>
</tr>
<OtherComponent />
</>
);
})}
</tbody>
</table>
์ ๊ฐ ๋ดค์ ๋๋ ๋ถ๋ช ๊ฐ ์์์ index ๋ผ๋ key ๊ฐ์ ๋ถ์ฌํ๊ณ ์๋ค๊ณ ์๊ฐํ๋๋ฐ์..
Why?
ํ์ง๋ง..์๊ณ ๋ณด๋ ์์ธ์ ๋ฐ๋ก <></> ์ ์์์ต๋๋ค.. key ๊ฐ์ root component์ ์ ์ฉ ๋๋ ๊ฒ์ด ์์น์ด๊ธฐ ๋๋ฌธ์ด์ฃ . ํ์ง๋ง ์ ๋ OtherComponent ๋ฅผ ํจ๊ป ์์ฑํด์ผ ํ๊ธฐ์ <></> ํ๊ทธ๋ฅผ ์ ๊ฑฐํ ์ ์์์ต๋๋ค. (JSX ๋ฌธ๋ฒ ๐คง)
How to solve the problem
<></> ์ key๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋๊ฒ ๊ด๊ฑด์ด์์ต๋๋ค. ๋ฆฌ์กํธ ๊ณต์ ํ์ด์ง์์ key๊ฐ ์๋ 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>
);
}
๊ทธ๋ฌ๋ฉด ๊ธฐ์กด ์๋ฌ๊ฐ ๋ฐ์ํ์๋ ์ฝ๋๋ฅผ ๊ณ ์ณ๋ด ์๋ค.
<table>
<thead>
<tr>
<th>test</th>
<th>test</th>
<th>test</th>
<th>test</th>
<th>test</th>
<th>test</th>
</tr>
</thead>
<tbody>
{props.map((item, index) => {
return (
<React.Fragment key={index}>
<tr key={index} onClick={}>
<td>{item}</td>
<td>{item}</td>
<td>{item}</td>
<td>{item}</td>
<td>{item}</td>
<td>{item}</td>
</tr>
<OtherComponent />
</React.Fragment>
);
})}
</tbody>
</table>
<></> ๋ฅผ Recat.Fragment๋ก ๋ณ๊ฒฝํ๊ณ key ๊ฐ์ ๋ฃ์ด์คฌ์ต๋๋ค. ๋ค์์ ์ฝ๋๋ฅผ ์ ์ฉํ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ณ ์ ์ ์๋ํฉ๋๋ค.