๊ฐœ๋ฐœ ๊ณต๋ถ€/๋ฐ๋ธŒ์ฝ”์Šค TIL

[ํด๋ผ์šฐ๋”ฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”์ง€๋‹ˆ์–ด๋ง TIL] 240220 - ํ”„๋กœ์ ํŠธ ์ตœ์ ํ™”, ๊ฐ์ • ์ผ๊ธฐ์žฅ ํ”„๋กœ์ ํŠธ ๋ณต์Šต

๊ฐ€์šค์ด 2024. 2. 21. 15:55

Intro


์˜ค๋Š˜์€ ํ”„๋กœ์ ํŠธ ์ตœ์ ํ™”ํ•˜๋Š” ๊ณผ์ •์„ ์‹ค์Šตํ–ˆ๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ๋ Œ๋”๋ง ํ•  ํ•„์š” ์—†๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๊ณ„์† ๋ Œ๋”๋ง ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค.

๊ฐœ๋ฐœํ•  ๋•Œ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ฒŒ ์‹ ๊ฒฝ์„ ์จ์•ผ๊ฒ ๋‹ค.

 

 

 

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ


ํ”„๋กœ์ ํŠธ ์ตœ์ ํ™”

Chrome ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ์—์„œ React Developer Tools์˜ Components๋ฅผ ์„ ํƒ ํ›„

'Highlight updates when components render.' ๋ฅผ ์ฒดํฌํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ๋  ๋•Œ ๋ Œ๋”๋ง๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ Œ๋”๋ง ๋  ํ•„์š”๊ฐ€ ์—†๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ Œ๋”๋ง ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„ React.memo ๋“ฑ์œผ๋กœ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๊ฒŒ ํ”„๋กœ์ ํŠธ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

 

  • state ๊ฐ’์„ ๋ฐ”๊ฟ€ ๋•Œ useCallback์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ํ—จ๋“ค๋Ÿฌ์— ์ƒํƒœ๋ณ€ํ™” ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
const [sortType, setSortType] = useState('latest');
const [filter, setFilter] = useState('all');

return (
  ...
  <ControlMenu value={sortType} onChange={setSortType} optionList={sortOptionList} />
  <ControlMenu value={filter} onChange={setFilter} optionList={filterOptionList} />
  ...
)

 

 

 

 

 

 

 

 

๋งˆ๋ฌด๋ฆฌ


๊ฐ์ • ์ผ๊ธฐ์žฅ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งˆ๋ฌด๋ฆฌ ๋˜์–ด๊ฐ€๋Š” ์‹œ์ ์—์„œ ๊ฐ•์˜๋ฅผ ๋ณด์ง€ ์•Š๊ณ  ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ณต์Šตํ•˜๊ณ  ์žˆ๋‹ค.

ํ”ผ๊ทธ๋งˆ ๋ณต์Šตํ•  ๊ฒธ ํ”ผ๊ทธ๋งˆ๋กœ ์ง์ ‘ ๋””์ž์ธ๋„ ํ•ด๋ณด์•˜๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต๊ณ  ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.

๊ทธ๋ž˜๋„ ํ˜ผ์ž ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ณผ์ •์—์„œ ๋˜ ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šด ๊ฒƒ ๊ฐ™๋‹ค.