useTransition, uesDeferredValue

  • useTransition ํ›…์„ ์‚ฌ์šฉํ•ด UI ๊ฐฑ์‹ ์„ ์ง€์—ฐ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

  • isPending ๋ถˆ๋ฆฐ ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์ผ๊ด€์„ฑ ์—†๋Š” ์ƒํƒœ์™€ UI์— ๋Œ€ํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋‚จ๊ธฐ๋Š” ๋ฐฉ๋ฒ•

  • useDefferedValue ํ›…์„ ์‚ฌ์šฉํ•ด ์˜ˆ์ „ ๊ฐ’๊ณผ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  • SuspenseList ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ์—ฌ๋Ÿฌ ํด๋ฐฑ UI๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ ์ดํ•ดํ•˜๊ธฐ

Ref

๋™์‹œ์„ฑ ๋ชจ๋“œ

  • ๋™์‹œ์„ฑ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์•กํŠธ๊ฐ€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ UI๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ Œ๋”๋งํ•˜๊ณ  ํ˜„์žฌ ์ƒํƒœ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฒ„์ „๋งŒ DOM์— ๊ฐฑ์‹ ํ•œ๋‹ค.

  • ํ˜„์žฌ ์ƒํƒœ์˜ ๊ฐฑ์‹ ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค๋„ ์ด์ „ ๋ฒ„์ „์˜ UI๋ฅผ DOM์— ํ‘œ์‹œ ๊ฐ€๋Šฅ

  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ๊ฐฑ์‹ (์‚ฌ์šฉ์ž ์ธํ„ฐ๋ ‰์…˜)์ด ์ด๋ค„์ง€๋Š” ๋™์•ˆ ๋ฆฌ์•กํŠธ๊ฐ€ ๋ Œ๋”๋ง์„ ์ผ์‹œ์ค‘๋‹จ ๊ฐ€๋Šฅ

  • ์ด๋Ÿฐ ์œ ์—ฐ์„ฑ์€ ์•ฑ์˜ ๋ฐ˜์‘์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ง€ํ•˜๋Š” ์•ฑ์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค.

๋™์‹œ์„ฑ ๋ชจ๋“œ๋Š” ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์ž์›์„ ๋” ์˜๋„์ ์œผ๋กœ ๋ช…ํ™•ํžˆ ๋ชฉํ‘œ๋ฅผ ์ •ํ•ด ์ ์žฌํ• ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ ์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง๊ณผ ํด๋ผ์ด์–ธํŠธ ์ธก ์ปดํฌ๋„ŒํŠธ์˜ ์ˆ˜ํ™”๋ฅผ ๋”์šฑ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉ์ž์™€ ์ ์‹œ์— ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž์›์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

๋™์‹œ์„ฑ ๋ Œ๋”๋ง

๋ฆฌ์—‘ํŠธ๊ฐ€ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ UI์—์„œ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋Š”๋ฐ, ์ƒˆ ๋ฒ„์ „์ด ์ค€๋น„๋  ๋•Œ๊นŒ์ง€ ์™„์ „ํžˆ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด์ „ ๋ฒ„์ „์„ ํ‘œ์‹œํ•œ๋‹ค.

  • ์ฆ‰, ๋‹จ๊ธฐ์ ์œผ๋กœ ์ตœ์‹  ์ƒํƒœ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์˜ ํ˜„์žฌ UI์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋œป

  • ๋™์‹œ์„ฑ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•ฑ์ด ์ดˆ๊ธฐ์— ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

useTransition, useDeferredValue ํ›…

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜๊ฑฐ๋‚˜ ์ƒˆ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ๋™์•ˆ ๋ฆฌ์•กํŠธ๊ฐ€ ์ด์ „ UI๋‚˜ ์ด์ „ ๊ฐ’์„ ๊ณ„์† ํ‘œ์‹œํ•˜๋„๋ก ํ—ˆ์šฉ

  • ํ›„ํ‡ด ์ƒํƒœ(receded state)๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๊ธฐ ๋•Œ๋ฌธ

    • ๋ฆฌ์—‘ํŠธ๊ฐ€ ์œ ์šฉํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์ „์˜ ์ ์žฌ ์ค‘ ์ƒํƒœ๋กœ(์‹ค์ˆ˜๋กœ) ์ „ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ๋น„์ •์ƒ์ ์ธ ์ƒํƒœ๋ผ๊ณ  ๋งํ•จ

    • ex: ์‚ฌ์šฉ์ž ๋ชฉ๋ก์—์„œ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ์„ ํƒํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ƒ์„ธ ์ •๋ณด ํŒจ๋„์„ ์Šคํ”ผ๋„ˆ๋กœ ๋Œ€์ฒดํ•œ๋‹ค. ์ด๋Š” ์ด์ „์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๋Š” ๋А๋‚Œ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ์ถฉ๊ฒฉ์ , ์ด๋Ÿฐ ์ƒํƒœ๋ฅผ ํ›„ํ‡ด ์ƒํƒœ๋ผ ๋ถ€๋ฅธ๋‹ค.

    • ์›์น˜ ์•Š๋Š” ๋กœ๋”ฉ์„ ํ‘œ์‹œ X

useTransition์„ ์‚ฌ์šฉํ•ด ํ›„ํ‡ด ์ƒํƒœ ํ”ผํ•˜๊ธฐ

์Šคํ”ผ๋„ˆ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€์ง€ ์•Š๊ณ  ์ด์ „ UI ์ •๋ณด๋ฅผ ๊ณ„์† ํ‘œ์‹œ "startTransition์€ UI๋ฅผ Blocking ์•Š๊ณ  ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค."

  • ์ƒํƒœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ผ์‹œ์ค‘๋‹จ๋  ๋•Œ ๋ฆฌ์—‘ํŠธ๊ฐ€ ์ด์ „ UI๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก useTransition ํ›…์„ ์‚ฌ์šฉ

  • useTransition ํ›…์€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ผ์‹œ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๊ฐ์Œ€ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋œ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜

  • ์ƒˆ ๋ฐ์ดํ„ฐ ์ ์žฌ์— ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ์ด์ „ UI๋ฅผ ๋ณด๋ฉด์„œ ํ˜ผ๋ž€์— ๋น ์งˆ์ˆ˜ ์žˆ๋‹ค.

    • ๋”ฐ๋ผ์„œ ์•ฑ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜๋А๋ผ ๋ฐ”์˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ๋ช‡๊ฐ€์ง€ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

Transition์€ ์ด๋ฏธ ํ‘œ์‹œ๋œ ์ฝ˜ํ…์ธ (์˜ˆ์‹œ: ํƒญ ์ปจํ…Œ์ด๋„ˆ)๋ฅผ ์ˆจ๊ธฐ์ง€ ์•Š์„ ๋งŒํผ๋งŒ โ€œ๋Œ€๊ธฐโ€ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ Posts ํƒญ์— ์ค‘์ฒฉ๋œ <Suspense> ๊ฒฝ๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ Transition ์€ ์ด๋ฅผ โ€œ๋Œ€๊ธฐโ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

isPending์„ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”ผ๋“œ๋ฐฑ ์ œ๊ณตํ•˜๊ธฐ

useTransition ํ›…์€ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๋™์•ˆ ๋ฆฌ์•กํŠธ๊ฐ€ ์ด์ „ UI๋ฅผ ํ‘œ์‹œํ• ์ˆ˜์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ผ๊ด€๋˜์ง€ ์•Š์€ UI๊ฐ€ ์ง€์†๋˜๋ฉด ํ˜ผ๋ž€์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. UI๊ฐ€ ์˜ค๋ž˜๋œ ๊ฐ’์„ ๊ณ„์† ํ‘œ์‹œํ•˜๋”๋ผ๋„ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋Š” ์ค‘์ž„์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ex: ์ ์žฌ์ค‘์ธ ํŒจ๋„์˜ ๋ถˆํˆฌ๋ช…๋„๋ฅผ ์ค„์—ฌ์„œ ์˜ค๋ž˜๋์Œ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋“ฑ..

    • ์Šคํ”ผ๋„ˆ๋กœ ํ›„ํ‡ดํ•˜์ง€ ์•Š๊ณ  ํ™”๋ฉด์— ์ „ํ™˜์ค‘์ž„์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜

  • ์ด์ „ UI๋ฅผ ๊ณ„์† ๋ณด์—ฌ์ฃผ๋ฉด์„œ isPending true๊ฐ€ ์„ค์ •๋˜๊ณ  ์ด์ „์— ์ผ์‹œ์ค‘๋‹จ๋œ ๋‹ค์Œ ์—…๋ฐ์ดํŠธ UI๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

๋ฆฌ์—‘ํŠธ ๋ฌธ์„œ์—์„œ๋Š” ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ์ „์ฒด์— useTransition ํ˜ธ์ถœ์„ ์‚ฝ์ž…ํ•˜๋Š” ๋Œ€์‹  useTransition ํ˜ธ์ถœ์„ ๋””์ž์ธ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉํ•˜๋Š” ํŽธ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ œ์•ˆํ•œ๋‹ค (ํ™•์ธ ํ•„์š”)

  • ex: ๋ฒ„ํŠผ์€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ „ํ™˜์œผ๋กœ ๊ฐ์‹ธ๊ธฐ

useDeferredValue๋กœ ์ด์ „๊ฐ’ ์œ ์ง€ํ•˜๊ธฐ

UI ์ผ๋ถ€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์—ฐ(deferred)์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํ›…

  • ์ง€์—ฐ์„ ๋ฐœ์ƒ์‹œ์ผœ ์ƒˆ ๊ฐ’์„ UI๋กœ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ด์ „๊ฐ’์„ ์‚ฌ์šฉ

  • ์ฆ‰, ์ƒˆ ๊ฐ’์€ ์ง€์—ฐ๋œ๋‹ค.

  • ๋ฆฌ์•กํŠธ๋Š” ์ด์ „ ๋ฒ„์ „(์˜ค๋ž˜๋œ UI)๊ณผ ์ƒˆ ๋ฒ„์ „(์—…๋ฐ์ดํŠธ ์ดํ›„ UI)์˜ ๊ฐ’์„ ๋ชจ๋‘ ์œ ์ง€ํ•˜๊ณ  UI์—์„œ ๋‘ ๋ฒ„์ „์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ถ”์ ํ•  ๊ฐ’์„ ์ธ์ž๋กœ useDeferredValue๋ฅผ ํ˜ธ์ถœ

  • ์ด ํ›…์€ value๋ฅผ ์ถ”์ ํ•ด์„œ value๊ฐ€ ์ด์ „ ๊ฐ’์—์„œ ์ƒˆ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด ํ›…์€ ๋‘ ๊ฐ’์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฆฌ์•กํŠธ๊ฐ€ ์ƒˆ ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์ƒˆ UI๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๊ณ  ์ž์† ์ปดํฌ๋„ŒํŠธ ์ค‘ ๋ Œ๋”๋ง์ด ์ผ์‹œ์ค‘๋‹จ๋˜๊ฑฐ๋‚˜ ์ง€์—ฐ๋œ ์ž์†์ด ์—†๋‹ค๋ฉด ํ›…์ด ์ƒˆ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋ฆฌ์•กํŠธ๋Š” UI๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

  • ๋ฆฌ์•กํŠธ๊ฐ€ ์ƒˆ ๊ฐ’์œผ๋กœ ๋ Œ๋”๋ง์„ ๋งˆ์น˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์˜ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ํ›…์€ ์ด์ „ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋ฆฌ์•กํŠธ๋Š” ๊ธฐ์กด ๊ฐ’์„ ์‚ฌ์šฉํ•ด UI๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.(์ด์™€ ๋™์‹œ์— ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์ƒˆ ๊ฐ’์„ ์‚ฌ์šฉํ•ด UI ์ž‘์—…์„ ์ˆ˜ํ–‰)

Last updated