๐ย Reference
๐ย Chapter
์ต์ ํ: ์ต์ ํ - React
memo
react-window
react-virtualized
key
- React์์ collection์ ๋ ๋๋งํ ๋ ์๋ฆฌ๋จผํธ์ ๋ฐ์ดํฐ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ถ์ ํ๊ธฐ ์ฝ๋๋ก ๋ฐ๋ณต๋๋ ๊ฐ ์๋ฆฌ๋ฉดํธ์ key๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ค์ํ๋ค.
- key๋ ๊ณ ์ ํ ID(์ด์์ ์ผ๋ก๋ UUID ๋๋ ๊ธฐํ ๊ณ ์ ๋ฌธ์์ด)๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง ๋ง์ง๋ง ์๋จ์ผ๋ก Array index๊ฐ ๋ ์ ์๋ค.
- key๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด collection์ item์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ๋ ์์์น ๋ชปํ ๋์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ ํ ์ ์๋ค.
- key๋ ์๋ฆฌ๋จผํธ์ ์์ ์ ์ธ ๊ณ ์ ์ฑ์ ๋ถ์ฌํ๊ธฐ ์ํด ๋ฐฐ์ด ๋ด๋ถ์ ์๋ฆฌ๋จผํธ์ ์ง์ ํด์ผ ํ๋ค.
render() {
return (
<>
<header>{/* ์๋ต */}</header>
<div className="container">
<form>{/* ์๋ต */}</form>
<div className="content">
{searchResult.length <= 0 ? (
<div>๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค</div>
) : (
// 1
<ul>
{/* 2 */}
{searchResult.map(item) => (
// 3
<li>
<img src={item.imageUrl} />
<p>{item.name}</p>
</li>
))}
</ul>
)}
</div>
</div>
</>
)
}
searchResult ๋ฐฐ์ด์ ์ด์ฉํด์ li ์๋ฆฌ๋จผํธ๋ฅผ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ง๋ค์๋๋ฐ ์ด ๋ li ์๋ฆฌ๋จผํธ์ key ์์ฑ์ ์ถ๊ฐํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
- ์ฌ๊ธฐ์ ๋ค์ ๊ฐ์๋์ด ๋์จ๋ค.
- React ์จ๋ฆฌ๋จผํธ๋ฅผ ๊ฐ์๋์ผ๋ก ๋ง๋ค๊ณ ์ด์ ๊ฐ์๋๊ณผ ์ฐจ์ด๊ฐ ์๋ ๋ถ๋ถ๋ง ๊ณ์ฐํด ์ค์ ๋์ ๋ฐ์ํ๋ฉด์ ๋ ๋๋ง ์ฑ๋ฅ์ ์ฌ๋ฆฐ๋ค๊ณ ํ๋ค.
- ํธ๋ฆฌ ๋น๊ต์ด๊ธฐ ๋๋ฌธ์ O(n^3)๋งํผ์ ๊ณ์ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
- ํ๋ฉด์ ๊ทธ๋ฆด ๋๋ง๋ค ์ด๋ฌํ ๊ณ์ฐ์ ๋นํจ์จ์ ์ด๊ณ ํ๋ฉด ๋ ๋๋ง์ ์คํ๋ ค ๋๋ฆฌ๊ฒ ๋ง๋ค ์๋ ์๊ฒ ๋ค.
- ๊ทธ๋์ ์๋์ ๊ฐ์ด ๋ ๊ฐ์ง ๊ฐ์ ํ์ย ์ฌ์กฐ์ (Reconciliation)ย ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
- (1) ์จ๋ฆฌ๋จผํธ ํ์
์ด ๋ค๋ฅผ ๊ฒฝ์ฐ์ (2) Key ๊ฐ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ, ๊ฐ ๊ฐ ํ๋ฉด์ ์กฐ์ ํ๋๋ก ํ๋๋ฐ O(n)์ผ๋ก ๊ณ์ฐ ๋ณต์ก๋๊ฐ ํ์ฐํ๊ฒ ์ค์ด๋ ๋ค๊ณ ํ๋ค.
- ๋ฐฐ์ด ๋ฉ์๋์ธ
map()์ ์ฌ์ฉํด์์ธ์ง ๋ฉ์๋์ ๋๋ฒ ์งธ ์ธ์์ธ index๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๊ณ ์ ํ ๊ฐ์ด ์์ ๊ฒฝ์ฐ ์ตํ์ ์๋จ์ผ๋ก ๊ณ ๋ คํ๊ณ ์ง์ํ๋ ๊ฒ์ด ์ณ๋ค. ์ฑ๋ฅ ์ ํ๋ ํ๋ฉด์ด ๊ฐฑ์ ๋์ง ์๋ ๋ฌธ์ ๋ฅผ ๋ดํฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
- React๋ ๊ฐ์๋์ ์ /ํ๋ฅผ ๋น๊ตํด์ ์ต์ํ์ ๋ ์กฐ์์ ํ๋ฉด์ ์ฑ๋ฅ์ ๋์ธ๋ค.