startTransition

startTransition を使うことで、UI γ‚’γƒ–γƒ­γƒƒγ‚―γ›γšγ« state γ‚’ζ›΄ζ–°γ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚

startTransition(scope)

γƒͺフゑレンス

startTransition(scope)

startTransition 閒数を使用すると、state οΏ½?ζ›΄ζ–°γ‚’γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ¨γ—γ¦γƒžγƒΌγ‚―γ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚

import { startTransition } from 'react';

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

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

さらに例を見る

εΌ•ζ•°

θΏ”γ‚Šε€€

startTransition は何も返しません。

注意点

  • startTransition γ―γ€γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γŒδΏη•™δΈ­ (pending) であるかどうかをηŸ₯γ‚‹γŸγ‚οΏ½?ζ–Ήζ³•γ‚’ζδΎ›γ—γΎγ›γ‚“γ€‚γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³οΏ½?ι€²θ‘ŒδΈ­γ«γ‚€γƒ³γ‚Έγ‚±γƒΌγ‚Ώγ‚’θ‘¨η€Ίγ™γ‚‹γ«γ―γ€δ»£γ‚γ‚Šγ« useTransition γŒεΏ…θ¦γ§γ™γ€‚

  • state οΏ½? set ι–’ζ•°γ«γ‚’γ‚―γ‚»γ‚Ήγ§γγ‚‹ε ΄εˆγ«οΏ½?み、state ζ›΄ζ–°γ‚’γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ«γƒ©γƒƒγƒ—γ§γγΎγ™γ€‚γ‚γ‚‹ props やカスタムフック�?ε€€γ«εεΏœγ—γ¦γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ‚’ι–‹ε§‹γ—γŸγ„ε ΄εˆγ―γ€δ»£γ‚γ‚Šγ« useDeferredValue を試してみてください。

  • startTransition γ«ζΈ‘γ™ι–’ζ•°γ―εŒζœŸηš„γ§γͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“γ€‚React はこ�?閒数を直けに�?οΏ½θ‘Œγ—γ€γοΏ½?οΏ½?οΏ½θ‘ŒδΈ­γ«θ‘Œγ‚γ‚Œγ‚‹γ™γΉγ¦οΏ½? state ζ›΄ζ–°γ‚’γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ¨γ—γ¦γƒžγƒΌγ‚―γ—γΎγ™γ€‚εΎŒγ«γͺγ£γ¦οΌˆδΎ‹γˆγ°γ‚Ώγ‚€γƒ γ‚’γ‚¦γƒˆε†…γ§οΌ‰γ•γ‚‰γ« state ζ›΄ζ–°γ‚’γ—γ‚ˆγ†γ¨γ™γ‚‹γ¨γ€γγ‚Œγ‚‰γ―γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ¨γ—γ¦γƒžγƒΌγ‚―γ•γ‚ŒγΎγ›γ‚“γ€‚

  • γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ¨γ—γ¦γƒžγƒΌγ‚―γ•γ‚ŒγŸ state 更新は、他�? state ζ›΄ζ–°γ«γ‚ˆγ£γ¦δΈ­ζ–­γ•γ‚ŒγΎγ™γ€‚δΎ‹γˆγ°γ€γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³ε†…γ§γƒγƒ£γƒΌγƒˆγ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆγ‚’ζ›΄ζ–°γ—γŸεΎŒγ€γƒγƒ£γƒΌγƒˆοΏ½?再レンダー�?途中でε…₯εŠ›γƒ•γ‚£γƒΌγƒ«γƒ‰γ«ε…₯εŠ›γ‚’ε§‹γ‚γŸε ΄εˆγ€React はε…₯εŠ›ζ¬„οΏ½?ζ›΄ζ–°οΏ½?ε‡¦η†εΎŒγ«γƒγƒ£γƒΌγƒˆγ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆοΏ½?γƒ¬γƒ³γƒ€γƒΌδ½œζ₯­γ‚’再開します。

  • γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ«γ‚ˆγ‚‹ζ›΄ζ–°γ―γƒ†γ‚­γ‚Ήγƒˆε…₯εŠ›ζ¬„οΏ½?εˆΆεΎ‘γ«γ―δ½Ώη”¨γ§γγΎγ›γ‚“γ€‚

  • ι€²θ‘ŒδΈ­οΏ½?γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γŒθ€‡ζ•°γ‚γ‚‹ε ΄εˆγ€React γ―ηΎεœ¨γγ‚Œγ‚‰γ‚’γ²γ¨γ€γ«ζŸγ­γ‚‹ε‡¦η†γ‚’θ‘Œγ„γΎγ™γ€‚γ“οΏ½?εˆΆι™γ―ε°†ζ₯οΏ½?γƒͺγƒͺγƒΌγ‚Ήγ§γ―γŠγγ‚‰γε‰Šι™€γ•γ‚ŒγΎγ™γ€‚


使用法

state ζ›΄ζ–°γ‚’γƒŽγƒ³γƒ–γƒ­γƒƒγ‚­γƒ³γ‚°οΏ½?γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ¨γ—γ¦γƒžγƒΌγ‚―γ™γ‚‹

state ζ›΄ζ–°γ‚’γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ¨γ—γ¦γƒžγƒΌγ‚―γ™γ‚‹γ«γ―γ€γγ‚Œγ‚’ startTransition οΏ½?呼び出しでラップします。

import { startTransition } from 'react';

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

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

γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ‚’δ½Ώη”¨γ™γ‚‹γ“γ¨γ§γ€ι…γ„γƒ‡γƒγ‚€γ‚Ήγ§γ‚‚γƒ¦γƒΌγ‚Άγ‚€γƒ³γ‚ΏγƒΌγƒ•γ‚§γƒΌγ‚ΉοΏ½?ζ›΄ζ–°γ‚’γƒ¬γ‚Ήγƒγƒ³γ‚·γƒ–γ«δΏγ€γ“γ¨γŒγ§γγΎγ™γ€‚

γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ‚’δ½Ώη”¨γ™γ‚‹γ¨γ€ε†γƒ¬γƒ³γƒ€γƒΌοΏ½?途中でも UI γŒγƒ¬γ‚Ήγƒγƒ³γ‚·γƒ–γ«δΏγŸγ‚ŒγΎγ™γ€‚δΎ‹γˆγ°γ€γƒ¦γƒΌγ‚ΆγŒγ‚Ώγƒ–γ‚’γ‚―γƒͺγƒƒγ‚―γ—γŸγŒγ€γοΏ½?εΎŒζ°—γŒε€‰γ‚γ£γ¦εˆ₯οΏ½?γ‚Ώγƒ–γ‚’γ‚―γƒͺγƒƒγ‚―γ™γ‚‹ε ΄εˆγ€ζœ€εˆοΏ½?ε†γƒ¬γƒ³γƒ€γƒΌγŒη΅‚δΊ†γ™γ‚‹οΏ½?を待぀ことγͺγγγ‚Œγ‚’θ‘Œγ†γ“γ¨γŒγ§γγΎγ™γ€‚

補袳

startTransition は useTransition γ¨ιžεΈΈγ«δΌΌγ¦γ„γΎγ™γŒγ€γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γŒι€²θ‘ŒδΈ­γ‹γ©γ†γ‹γ‚’θΏ½θ·‘γ™γ‚‹ isPending フラグを提供しγͺγ„η‚ΉγŒη•°γͺγ‚ŠγΎγ™γ€‚useTransition γŒεˆ©η”¨γ§γγͺγ„ε ΄εˆγ§γ‚‚ startTransition γ‚’ε‘Όγ³ε‡Ίγ™γ“γ¨γŒγ§γγΎγ™γ€‚δΎ‹γˆγ°γ€startTransition γ―γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆοΏ½?ε€–ιƒ¨γ€γŸγ¨γˆγ°γƒ‡γƒΌγ‚Ώγƒ©γ‚€γƒ–γƒ©γƒͺε†…γ§γ‚‚ε‹•δ½œγ—γΎγ™γ€‚

useTransition γƒšγƒΌγ‚Έγ§γƒˆγƒ©γƒ³γ‚Έγ‚·γƒ§γƒ³γ«γ€γ„γ¦ε­¦γ³γ€δΎ‹γ‚’θ¦‹γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚