unstable_addTransitionType
unstable_addTransitionType
์ ์ฌ์ฉํ๋ฉด ํธ๋์ง์
์ด ๋ฐ์ํ ์์ธ์ ์์ธํ ๋ํ๋ผ ์ ์์ต๋๋ค.
startTransition(() => {
unstable_addTransitionType('my-transition-type');
setState(newState);
});
๋ ํผ๋ฐ์ค
addTransitionType
๋งค๊ฐ๋ณ์
type
: ์ถ๊ฐํ ํธ๋์ง์ ์ ํ์ ์ ๋๋ค. ์ด๋ค ๋ฌธ์์ด์ด๋ ๋ ์ ์์ต๋๋ค.
๋ฐํ๊ฐ
startTransition
์ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค.
์ฃผ์ ์ฌํญ
- ์ฌ๋ฌ ํธ๋์ง์ ์ด ๊ฒฐํฉ๋๋ฉด ๋ชจ๋ ํธ๋์ง์ ํ์ ์ด ์์ง๋ฉ๋๋ค. ํ๋์ ํธ๋์ง์ ์ ๋ ๊ฐ ์ด์์ ํ์ ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
- ํธ๋์ง์
ํ์
์ ์ปค๋ฐ๋ง๋ค ์ด๊ธฐํ๋ฉ๋๋ค. ์ฆ,
<Suspense>
์ Fallback์startTransition
์ดํ ํ์ ์ ์ฐ๊ฒฐํ๋ฉฐ, ๋ด์ฉ์ด ๋ํ๋ ๋๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
์ฌ์ฉ๋ฒ
ํธ๋์ง์ ์ ์์ธ ์ถ๊ฐํ๊ธฐ
ํธ๋์ง์
์ ์์ธ์ ๋ํ๋ด๊ธฐ ์ํด startTransition
๋ด๋ถ์์ addTransitionType
์ ํธ์ถํฉ๋๋ค
import { startTransition, unstable_addTransitionType } from 'react';
function Submit({action) {
function handleClick() {
startTransition(() => {
unstable_addTransitionType('submit-click');
action();
});
}
return <button onClick={handleClick}>Click me</button>;
}
addTransitionType์ startTransition์ ๋ฒ์ ๋ด์์ ํธ์ถํ๋ฉด, React๋ ํด๋น ํธ๋์ง์ ์ submit-click์ ์์ธ์ผ๋ก ์ฐ๊ฒฐํฉ๋๋ค.
ํ์ฌ ํธ๋์ง์ ํ์ ์ ์์ธ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ์ ๋๋ฉ์ด์ ์ ์ปค์คํฐ๋ง์ด์ฆํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ฉํ ์ ์๋ ๋ฐฉ์์ ์ธ ๊ฐ์ง์ ๋๋ค.
- ๋ธ๋ผ์ฐ์ View Transition ํ์ ์ผ๋ก ์ ๋๋ฉ์ด์ ์ปค์คํ ํ๊ธฐ
View Transition
ํด๋์ค๋ก ์ ๋๋ฉ์ด์ ์ปค์คํ ํ๊ธฐViewTransition
์ด๋ฒคํธ๋ก ์ ๋๋ฉ์ด์ ์ปค์คํ ํ๊ธฐ
ํฅํ์๋ ํธ๋์ง์ ์ ์์ธ์ ํ์ฉํ ์ ์๋ ๋ค์ํ ์ฉ๋ก๋ฅผ ์ง์ํ ์์ ์ ๋๋ค.
๋ธ๋ผ์ฐ์ View Transition ํ์ ์ผ๋ก ์ ๋๋ฉ์ด์ ์ปค์คํ ํ๊ธฐ
ํธ๋์ง์
์์ ViewTransition
์ด ํ์ฑํ๋๋ฉด, React๋ ๋ชจ๋ ํธ๋์ง์
ํ์
์ ๋ธ๋ผ์ฐ์ ์ View Transition Types์ผ๋ก ํด๋น ์์์ ์ถ๊ฐํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด CSS ๋ฒ์์์ ๋ค๋ฅธ ์ ๋๋ฉ์ด์ ์ ์ปค์คํ ํ ์ ์์ต๋๋ค.
function Component() {
return (
<ViewTransition>
<div>Hello</div>
</ViewTransition>
);
}
startTransition(() => {
unstable_addTransitionType('my-transition-type');
setShow(true);
});
:root:active-view-transition-type(my-transition-type) {
&::view-transition-...(...) {
...
}
}
View Transition
ํด๋์ค๋ก ์ ๋๋ฉ์ด์
์ปค์คํ
ํ๊ธฐ
ํ์ฑํ๋ ViewTransition
์์ ํ์
์ ๋ฐ๋ผ ์ ๋๋ฉ์ด์
์ ์ปค์คํฐ๋ง์ด์ฆํ๋ ค๋ฉด, View Transition ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด ๋ฉ๋๋ค.
function Component() {
return (
<ViewTransition enter={{
'my-transition-type': 'my-transition-class',
}}>
<div>Hello</div>
</ViewTransition>
);
}
// ...
startTransition(() => {
unstable_addTransitionType('my-transition-type');
setState(newState);
});
์ฌ๋ฌ ํ์
์ด ๋งค์นญ๋๋ฉด ๊ฐ๋ค์ด ๊ฒฐํฉ๋ฉ๋๋ค. ๋งค์นญ๋๋ ํ์
์ด ์์ผ๋ฉด โdefaultโ ์ํธ๋ฆฌ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ค ํ์
์ด๋ผ๋ ๊ฐ์ด โnoneโ์ด๋ฉด ํด๋น ๊ฐ์ด ์ฐ์ ํ๋ฉฐ ViewTransition
์ ๋นํ์ฑํ๋ฉ๋๋ค. (์ด๋ฆ์ด ํ ๋น๋์ง ์์ต๋๋ค).
์ด ๋ฐฉ์์ enter/exit/update/layout/share Props์ ๊ฒฐํฉํ์ฌ ํธ๋ฆฌ๊ฑฐ ์ข ๋ฅ์ ํธ๋์ง์ ํ์ ์ ๋ฐ๋ผ ๋์์ ๋ง์ถ ์ ์์ต๋๋ค.
<ViewTransition enter={{
'navigation-back': 'enter-right',
'navigation-forward': 'enter-left',
}}
exit={{
'navigation-back': 'exit-right',
'navigation-forward': 'exit-left',
}}>
ViewTransition
์ด๋ฒคํธ๋ก ์ ๋๋ฉ์ด์
์ปค์คํ
ํ๊ธฐ
View Transition ์ด๋ฒคํธ๋ฅผ ํ์ฉํ์ฌ ํ์
์ ๋ฐ๋ผ ํ์ฑํ๋ ViewTransition
์ ์ ๋๋ฉ์ด์
์ ์ฆ์ ์ปค์คํฐ๋ง์ด์ฆํ ์ ์์ต๋๋ค.
<ViewTransition onUpdate={(inst, types) => {
if (types.includes('navigation-back')) {
...
} else if (types.includes('navigation-forward')) {
...
} else {
...
}
}}>
์ด๋ ๊ฒ ํ๋ฉด ์์ธ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ์ ๋๋ฉ์ด์ ์ ์ ํํ ์ ์์ต๋๋ค.