Skip to content

React Transition Group ๋œฏ์–ด๋ณด๊ธฐ

WARNING

์•„์ง ์ž‘์„ฑ์ค‘์ด๊ฑฐ๋‚˜ ๊ฒ€ํ† ์ค‘์ธ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋‚ด์šฉ์ด ๋ถ€์ •ํ™•ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์„œ๋ก  โ€‹

๋””์ž์ธํ•™๊ณผ ์กธ์—…์ „์‹œ ์›น์‚ฌ์ดํŠธ ํ”„์  ์ง„ํ–‰ ์ค‘

์ „์ฒด ํŽ˜์ด์ง€์— ์ˆ˜ํ‰ ์•„์ฝ”๋””์–ธ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„ฃ์œผ๋ ค๊ณ  ์ฒ˜์Œ์—” ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ํ•œ ๋ฒˆ์— ๋งˆ์šดํŠธํ•ด์„œ max-width๋กœ ์ ‘์Œ ๊ทผ๋ฐ Lighthouse์—์„œ DOM ์š”์†Œ 3,495๊ฐœ ๊ฒฝ๊ณ  ๋œจ๊ณ  TBT ๋†’๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋„ ๊ณ„์† ๋Š˜์–ด๋‚จ ์–ธ๋งˆ์šดํŠธ ?

๋ฌธ์ œ ์ ‘๊ทผ๋ฐฉ๋ฒ• โ€‹

React Transition Group์œผ๋กœ ์ƒํƒœ ์ „์ด์— ๋”ฐ๋ผ in=true/false๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ๋„ ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค enter/exit ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์–ธ๋งˆ์šดํŠธ ๋˜๋„๋ก ์ฒ˜๋ฆฌ switch transition๋„ ๊ณ ๋ คํ–ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๋™์‹œ์— ๋‹ค๋ค„์•ผ ํ•ด์„œ transitionGroup ์„ ํƒ CSS๋กœ transform ๊ธฐ๋ฐ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„ํ•ด์„œ reflow/repaint ์ตœ์†Œํ™”

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• โ€‹

<TransitionGroup><CSSTransition> ๊ตฌ์กฐ๋กœ ์ „ํ™˜ ํ๋ฆ„ ์ œ์–ด

์ „ํ™˜ ์‹œ DOM์— ๋‘˜ ๋‹ค ๋‚จ๊ฒจ๋‘๊ณ , ํ‡ด์žฅ ํŽ˜์ด์ง€๋Š” exit ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ›„ DOM์—์„œ ์ œ๊ฑฐ ์ƒˆ ํŽ˜์ด์ง€๋Š” enter > entered ์ƒํƒœ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋“ฑ์žฅ css transform: translateX()๋กœ GPU ๊ฐ€์† ์œ ๋„ timeout ๋˜๋Š” transitionend ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์™„๋ฃŒ ๊ฐ์ง€ -> ,์–ธ๋งˆ์šดํŠธ