startTransition
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๊ฐ ๋ฆฌ๋ ๋๋ง ๋์ค์๋ ๋ฐ์์ฑ์ ์ ์งํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ํญ์ ํด๋ฆญ ํ๋ค๊ฐ ๋ง์์ด ๋ฐ๋์ด ๋ค๋ฅธ ํญ์ ํด๋ฆญํ๋ฉด ์ฒซ ๋ฒ์งธ ๋ฆฌ๋ ๋๋ง์ด ์๋ฃ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆด ํ์ ์์ด ๋ค๋ฅธ ํญ์ ํด๋ฆญํ ์ ์์ต๋๋ค.