startTransition์„ ์‚ฌ์šฉํ•˜๋ฉด UI์˜ ์ผ๋ถ€๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

startTransition(action)

๋ ˆํผ๋Ÿฐ์Šค

startTransition(action)

startTransition ํ•จ์ˆ˜๋Š” State ์—…๋ฐ์ดํŠธ๋ฅผ Transition์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

import { startTransition } from 'react';

function TabContainer() {
const [tab, setTab] = useState('about');

function selectTab(nextTab) {
startTransition(() => {
setTab(nextTab);
});
}
// ...
}

์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋งค๊ฐœ๋ณ€์ˆ˜

  • action: ํ•˜๋‚˜ ์ด์ƒ์˜ set ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ผ๋ถ€ State๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. React๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์ด action์„ ์ฆ‰์‹œ ํ˜ธ์ถœํ•˜๊ณ  action ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋™์•ˆ ๋™๊ธฐ์ ์œผ๋กœ ์˜ˆ์•ฝ๋œ ๋ชจ๋“  State ์—…๋ฐ์ดํŠธ๋ฅผ Transition์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. action์—์„œ await๋œ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์€ Transition์— ํฌํ•จ๋˜์ง€๋งŒ, ํ˜„์žฌ๋กœ์„œ๋Š” await ์ดํ›„์˜ set ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ถ”๊ฐ€์ ์ธ startTransition์œผ๋กœ ๊ฐ์‹ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ฌธ์ œ ํ•ด๊ฒฐ ์ฐธ์กฐ). Transitions์œผ๋กœ ํ‘œ์‹œ๋œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋Š” non-blocking ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ๋กœ๋”ฉ ํ‘œ์‹œ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

startTransition์€ ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฃผ์˜ ์‚ฌํ•ญ

  • startTransition์€ Transition์ด ๋Œ€๊ธฐPending ์ค‘์ธ์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๊ธฐ ์ค‘์ธ Transition์„ ํ‘œ์‹œํ•˜๋ ค๋ฉด useTransition์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•ด๋‹น State์˜ set ํ•จ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์—…๋ฐ์ดํŠธ๋ฅผ Transition์œผ๋กœ ๋ž˜ํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ Props๋‚˜ Custom Hook ๋ฐ˜ํ™˜ ๊ฐ’์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ Transition์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด useDeferredValue๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์„ธ์š”.

  • startTransition์— ์ „๋‹ฌํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์ฆ‰์‹œ ํ˜ธ์ถœ๋˜๋ฉฐ, ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ Transition์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด setTimeout ๋‚ด์—์„œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ํ•ด๋‹น ์—…๋ฐ์ดํŠธ๋Š” Transition์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋น„๋™๊ธฐ ์š”์ฒญ ์ดํ›„์˜ State ์—…๋ฐ์ดํŠธ๋ฅผ Transition์œผ๋กœ ํ‘œ์‹œํ•˜๋ ค๋ฉด, ๋ฐ˜๋“œ์‹œ ๋˜ ๋‹ค๋ฅธ startTransition์œผ๋กœ ๊ฐ์‹ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•Œ๋ ค์ง„ ์ œํ•œ ์‚ฌํ•ญ์œผ๋กœ ํ–ฅํ›„ ์ˆ˜์ •๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. (๋ฌธ์ œ ํ•ด๊ฒฐ ์ฐธ์กฐ)

  • Transition์œผ๋กœ ํ‘œ์‹œ๋œ State ์—…๋ฐ์ดํŠธ๋Š” ๋‹ค๋ฅธ State ์—…๋ฐ์ดํŠธ์— ์˜ํ•ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Transition ๋‚ด์—์„œ ์ฐจํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์ง€๋งŒ ์ฐจํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋Š” ๋™์•ˆ ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•˜๋ฉด React๋Š” ์ž…๋ ฅ State ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„ ์ฐจํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ Œ๋”๋ง ์ž‘์—…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  • Transition ์—…๋ฐ์ดํŠธ๋Š” ํ…์ŠคํŠธ ์ž…๋ ฅ์„ ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ ์ง„ํ–‰ ์ค‘์ธ Transition์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ, React์—์„œ๋Š” ํ•จ๊ป˜ ์ผ๊ด„ ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ–ฅํ›„ ๋ฆด๋ฆฌ์ฆˆ์—์„œ ์ œ๊ฑฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.


์‚ฌ์šฉ๋ฒ•

State ์—…๋ฐ์ดํŠธ๋ฅผ Non-Blocking Transition์œผ๋กœ ํ‘œ์‹œ

startTransition์œผ๋กœ ๋ž˜ํ•‘ํ•จ์œผ๋กœ์จ State ์—…๋ฐ์ดํŠธ๋ฅผ Transition์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { startTransition } from 'react';

function TabContainer() {
const [tab, setTab] = useState('about');

function selectTab(nextTab) {
startTransition(() => {
setTab(nextTab);
});
}
// ...
}

Transition์„ ์‚ฌ์šฉํ•˜๋ฉด ๋А๋ฆฐ ์žฅ์น˜์—์„œ๋„ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์—…๋ฐ์ดํŠธ์˜ ๋ฐ˜์‘์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Transition์„ ์‚ฌ์šฉํ•˜๋ฉด UI๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋„์ค‘์—๋„ ๋ฐ˜์‘์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ํƒญ์„ ํด๋ฆญ ํ–ˆ๋‹ค๊ฐ€ ๋งˆ์Œ์ด ๋ฐ”๋€Œ์–ด ๋‹ค๋ฅธ ํƒญ์„ ํด๋ฆญํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ๋ฆฌ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์ด ๋‹ค๋ฅธ ํƒญ์„ ํด๋ฆญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!

startTransition์€ useTransition๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ, Transition์ด ๋Œ€๊ธฐ ์ค‘์ธ์ง€ ์ถ”์ ํ•˜๋Š” isPending ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. useTransition์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ startTransition์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, startTransition์€ ๋ฐ์ดํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ์™€ ๊ฐ™์ด ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Transition์— ๋Œ€ํ•œ ํ•™์Šต ๋ฐ ์˜ˆ์‹œ๋Š” useTransition ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•˜์„ธ์š”.