Reactã®experimental_useTransitionããã¯ãæ¢æ±ãããã®å©ç¹ãå®è£ ãããã³ããã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®ãŠãŒã¹ã±ãŒã¹ãçè§£ããŸãã
React experimental_useTransitionããã¹ã¿ãŒããïŒå æ¬çãªã¬ã€ã
Reactã®experimental_useTransitionããã¯ã¯ãããå¿çæ§ãé«ãããŠãŒã¶ãŒãã¬ã³ããªãŒãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åŒ·åãªããŒã«ã§ãããã®ããã¯ã䜿çšãããšãéçºè
ã¯ã¢ããªã±ãŒã·ã§ã³å
ã®ããŸããŸãªç¶æ
ãã¹ã ãŒãºã«ç§»è¡ã§ããããã¡ãªãæŽæ°ãåé¿ããæœåšçã«é
ãæäœäžã§ãå¿çæ§ãç¶æããããšã§ãããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãããŸã å®é𿮵éã§ãããexperimental_useTransitionãçè§£ããŠå©çšããããšã§ãReactã¢ããªã±ãŒã·ã§ã³ã®äœæããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããããšãã§ããŸãã
experimental_useTransitionãšã¯ïŒ
experimental_useTransitionã¯ãæŽæ°ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ã§ããReactããã¯ã§ããããã¯ãå®äºãŸã§ã«æéããããå Žåã§ããReactããããã®æŽæ°äžã«UIã®å¿çæ§ãç¶æããããšããããšãæå³ããŸããéåžžã®ã¹ããŒãæŽæ°ãšã¯ç°ãªãããã©ã³ãžã·ã§ã³ã¯ç·æ¥æ§ãäœããšèŠãªããããŠãŒã¶ãŒãå
¥åãã£ãŒã«ãã«å
¥åãããªã©ãããéèŠãªæŽæ°ãçºçããå Žåã«äžæãããŸãããã®åªå
é äœä»ãã«ãããã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¿ã©ã¯ãã£ãã§å¿çæ§ãç¶æããããšãä¿èšŒãããŸãã
åºæ¬çã«ãexperimental_useTransitionã䜿çšãããšãReactã«ããã®æŽæ°ã¯éèŠã§ããã*éåžžã«*ç·æ¥ã§ã¯ãããŸããããã®æŽæ°ãããã«å®äºããããããå¿çæ§ã®ç¶æãåªå
ããŠãã ããããšäŒããããšãã§ããŸãã
ãªãexperimental_useTransitionã䜿çšããã®ãïŒ
experimental_useTransitionã䜿çšããäž»ãªå©ç¹ã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžã§ããäž»ãªå©ç¹ã®å
èš³ã¯æ¬¡ã®ãšããã§ãã
- å¿çæ§ã®åäžïŒ æŽæ°ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããããšã§ãUIããŠãŒã¶ãŒã®æäœã«å¿çæ§ãç¶æããããšãä¿èšŒããŸããReactã¯ããŠãŒã¶ãŒå
¥åããã®ä»ã®ç·æ¥æ§ã®é«ãæŽæ°ãåªå
ããã¢ããªã±ãŒã·ã§ã³ãé
å»¶ãããããªãŒãºãããããã®ãé²ããŸãããŠãŒã¶ãŒããã£ã«ã¿ãªã³ã°å
¥åã®å€ã倿ŽããŠãããšæ³åããŠãã ããããã£ã«ã¿ãªã³ã°ãé
ãå ŽåïŒèšç®ã䌎ããªã©ïŒãéåžžã®æŽæ°ã§ã¯ããã£ã«ã¿ã®æŽæ°äžã«UIãããªãŒãºããå¯èœæ§ããããŸãã
experimental_useTransitionã䜿çšãããšãããã¯ã°ã©ãŠã³ãã§ããŒã¿ã倿ŽãããŠããéãUIã¯å¿çæ§ãç¶æããŸãã - ããã¹ã ãŒãºãªãã©ã³ãžã·ã§ã³ïŒ
experimental_useTransitionã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³å ã®ããŸããŸãªç¶æ éã§ãããã¹ã ãŒãºãªèŠèŠçãªãã©ã³ãžã·ã§ã³ãäœæã§ããŸããããã¯ãããŒã¿ã®ããŒãããªã¹ãã®ãã£ã«ã¿ãªã³ã°ããŸãã¯ããŒãžéã®ç§»åæã«ç¹ã«åœ¹ç«ã¡ãŸãã - ããŒãã£ã³ã°ã¹ãããŒã®åé¿ïŒ å Žåã«ãã£ãŠã¯ã
experimental_useTransitionã䜿çšããããšã§ãããŒãã£ã³ã°ã¹ãããŒããã®ä»ã®æ°ãæ£ããã€ã³ãžã±ãŒã¿ãŒã®è¡šç€ºãåé¿ã§ããŸããReactã¯ãæ°ããããŒã¿ã®ããŒãäžã«å€ãUIã衚瀺ãç¶ããã·ãŒã ã¬ã¹ãªãã©ã³ãžã·ã§ã³ãæäŸããããšããŸãããã ããæŽæ°ã«æéããããå Žåã¯ãããŒãã£ã³ã°ç¶æ ã衚瀺ããããšãéèŠã§ãã - æŽæ°ã®åªå é äœä»ãïŒ ç·æ¥æ§ã®é«ãæŽæ°ãšç·æ¥æ§ã®äœãæŽæ°ãåºå¥ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åã§ããŸããReactã¯ããŠãŒã¶ãŒå ¥åãªã©ã®ç·æ¥æ§ã®é«ãæŽæ°ãåªå ããã¢ããªã±ãŒã·ã§ã³ãå¿çæ§ãç¶æããã€ã³ã¿ã©ã¯ãã£ãã§ããããšãä¿èšŒã§ããŸãã
experimental_useTransitionã®äœ¿ç𿹿³
experimental_useTransitionããã¯ã¯ã次ã®2ã€ã®èŠçŽ ãå«ãé
åãè¿ããŸãã
startTransitionïŒ ãã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããã¹ããŒãæŽæ°ãã©ããããããã«äœ¿çšã§ãã颿°ãisPendingïŒ ãã©ã³ãžã·ã§ã³ãçŸåšä¿çäžãã©ããã瀺ãããŒã«å€ã
experimental_useTransitionã®äœ¿ç𿹿³ã®åºæ¬çãªäŸã次ã«ç€ºããŸãã
import React, { useState, experimental_useTransition } from 'react';
function MyComponent() {
const [items, setItems] = useState([]);
const [filter, setFilter] = useState('');
const [isPending, startTransition] = experimental_useTransition();
const handleChange = (e) => {
const newFilter = e.target.value;
startTransition(() => {
setFilter(newFilter);
// Simulate a slow filtering operation
setTimeout(() => {
setItems(filterData(newFilter));
}, 500);
});
};
const filterData = (filterValue) => {
// This is just a placeholder.
// Here would go your complex filtering function.
return generateItems(10).filter(item => item.includes(filterValue));
}
const generateItems = (n) => {
const result = [];
for(let i = 0; i < n; i++){
result.push("Item " + i);
}
return result;
}
return (
<div>
<input type="text" value={filter} onChange={handleChange} />
{isPending ? <p>Filtering...</p> : null}
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
);
}
export default MyComponent;
ãã®äŸã§ã¯ããŠãŒã¶ãŒãå
¥åãã£ãŒã«ãã«å
¥åãããšãhandleChange颿°ãåŒã³åºãããŸããstartTransitionã䜿çšããŠãfilterãšitemsãªã¹ãïŒã·ãã¥ã¬ãŒããããfilterData颿°ã䜿çšããŠãã£ã«ã¿ãªã³ã°ãããŸãïŒã®äž¡æ¹ã®ã¹ããŒãæŽæ°ãã©ããããŸããæ¬¡ã«ãisPending倿°ã䜿çšããŠããã£ã«ã¿ãŒãæŽæ°ãããŠããããšããŠãŒã¶ãŒã«ç¥ãããããã£ã«ã¿ãªã³ã°...ãã¡ãã»ãŒãžãæ¡ä»¶ä»ãã§ã¬ã³ããªã³ã°ããŸãããã®ã¢ãããŒãã«ãããã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒå
¥åã«å³åº§ã«å¿çãããã£ã«ã¿ãªã³ã°ããããªã¹ãã®èšç®äžã«ããªãŒãºããããšãåé¿ããŸãããã£ã«ã¿ãŒãæŽæ°ããããã£ã«ã¿ãªã³ã°ãå®è¡ãããReactã³ã³ã«ã¬ã³ãã¢ãŒãã䜿çšããŠãªã¹ããåã¬ã³ããªã³ã°ãããŸãã
é«åºŠãªãŠãŒã¹ã±ãŒã¹ãšèæ ®äºé
experimental_useTransitionã®äœ¿çšã«é¢ãããããé«åºŠãªãŠãŒã¹ã±ãŒã¹ãšèæ
®äºé
ãæ¬¡ã«ç€ºããŸãã
1. React Suspenseãšã®çµã¿åãã
experimental_useTransitionã¯React SuspenseãšããŸã飿ºããŸããexperimental_useTransitionã䜿çšããŠããŒã¿ãã§ããæäœãéå§ããSuspenseã䜿çšããŠããŒã¿ã®ããŒãäžã«ãã©ãŒã«ããã¯UIã衚瀺ã§ããŸããããã«ãããç¹ã«ãããã¯ãŒã¯æ¥ç¶ãé
ãå Žåã«ãã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæã§ããŸããæ°ããUIã®æºåãã§ãããŸã§ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã以åã®å€èгãç¶æã§ããããã«ãªããŸããæ°ããUIã®ããŒãäžã«ãå€ãUIãç»é¢ã«æ®ã£ãŠãã¡ãã€ããããã¡ãªãç»é¢ã®æŽæ°ãé²ããŸããããŒãäžã«ãŠãŒã¶ãŒããã³ã³ããã¹ãå
ã«ãä¿æããŸãã
import React, { Suspense, experimental_useTransition } from 'react';
const MyComponent = () => {
const [resource, setResource] = React.useState(null);
const [isPending, startTransition] = experimental_useTransition();
const handleClick = () => {
startTransition(() => {
// Simulate asynchronous data fetching
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve({ data: "Data loaded!" });
}, 2000);
});
setResource(promise);
});
};
return (
<div>
<button onClick={handleClick} disabled={isPending}>
{isPending ? "Loading..." : "Load Data"}
</button>
<Suspense fallback={<p>Loading Data...</p>}>
{resource ? <DataDisplay resource={resource} /> : <p>Click button to load data.</p>}
</Suspense>
</div>
);
};
const DataDisplay = ({ resource }) => {
const data = useResource(resource);
return <p>{data.data}</p>;
};
const useResource = (resource) => {
if (!resource) return null;
throw new Promise((resolve, reject) => {
resource.then(resolve).catch(reject)
})
}
export default MyComponent;
ãã®äŸã§ã¯ãDataDisplayã³ã³ããŒãã³ãã¯ãæž¡ãããresourceããŸã 解決ãããŠããªãå Žåããããã¹ãã¹ããŒããŸããReactã®Suspenseã¯ãããã¹ããã£ãããããããã¹ã解決ããããŸã§ãã©ãŒã«ããã¯ã衚瀺ããŸããexperimental_useTransitionã¯ããŠãŒã¶ãŒããLoad Dataããã¿ã³ãã¯ãªãã¯ãããšãã«ãã§ããæäœãéå§ããŸããããŒã¿ã®ããŒãäžãisPendingãã©ã°ã䜿çšããŠãã¿ã³ãç¡å¹ã«ãªããŸãã
2. è€éãªUIæŽæ°ã®æé©å
å€§èŠæš¡ãªãªã¹ãã®ã¬ã³ããªã³ã°ãã³ã¹ãã®ãããèšç®ã®å®è¡ãªã©ãè€éãªUIæŽæ°ãå®è¡ããã³ã³ããŒãã³ããããå Žåã¯ãexperimental_useTransitionã䜿çšããŠããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸããæŽæ°ããã©ã³ãžã·ã§ã³ã§ã©ããããããšã§ãReactã¯ä»ã®æŽæ°ãåªå
ããå¿çæ§ãç¶æã§ããŸããReactã³ã³ããŒãã³ãå
ã§è€éãªèšç®ãå®è¡ããå Žåã¯ãäŸåé¢ä¿ã倿Žãããå Žåã«ã®ã¿èšç®ãå®è¡ããããã«ãuseMemoã䜿çšãããšäŸ¿å©ãªããšããããããŸããããã«ãããèšç®ãªãŒããŒããããåæžããããšã§ãããã©ãŒãã³ã¹ãåäžããŸãã
3. äžèŠãªåã¬ã³ããªã³ã°ã®åé¿
å Žåã«ãã£ãŠã¯ãã¹ããŒãæŽæ°ã«ãããã³ã³ããŒãã³ãã®äžèŠãªåã¬ã³ããªã³ã°ãããªã¬ãŒãããããšããããŸããexperimental_useTransitionã䜿çšããŠãæŽæ°ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããããšã§ããããã®åã¬ã³ããªã³ã°ãåé¿ã§ããŸããReactã¯ãããã®æŽæ°ããŸãšããŠãããåŠçããåã¬ã³ããªã³ã°ã®åæ°ãæžãããŠããã©ãŒãã³ã¹ãåäžãããããšããŸããReact.memoã䜿çšããŠã³ã³ããŒãã³ããã¡ã¢åããpropsã倿ŽãããŠããªãå Žåã«åã¬ã³ããªã³ã°ãé²ãããšãã§ããŸããåæ§ã«ãuseCallbackã䜿çšããŠpropsãšããŠæž¡ããã颿°ãã¡ã¢åããå¿
èŠãªå Žåã«ã®ã¿å€æŽãããããã«ããããšãæ€èšããŠãã ããã
4. ãããã¯ãŒã¯ãªã¯ãšã¹ãã®åŠç
experimental_useTransitionã¯ããããã¯ãŒã¯ãªã¯ãšã¹ããåŠçããå Žåãç¹ã«ãªã¯ãšã¹ããé
ãå Žåãä¿¡é Œã§ããªãå Žåã«åœ¹ç«ã¡ãŸãããããã¯ãŒã¯ãªã¯ãšã¹ããããªã¬ãŒããæŽæ°ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããããšã§ããªã¯ãšã¹ãã®é²è¡äžã«UIãå¿çæ§ãç¶æããããšãä¿èšŒã§ããŸãã倱æãããªã¯ãšã¹ããåŠçããããã®æŠç¥ïŒãŠãŒã¶ãŒã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããããªã¯ãšã¹ããå詊è¡ãããªã©ïŒã®å®è£
ãæ€èšããŠãã ããããããã®æŠç¥ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å
šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšå埩åãåäžãããããšãã§ããŸãã
5. ã¹ããããªã³ã°ãšãããŠã³ã¹
ã¹ã¯ããŒã«ããµã€ãºå€æŽãªã©ãé »ç¹ã«ããªã¬ãŒãããæäœã®å Žåã¯ãã¹ããããªã³ã°ãŸãã¯ãããŠã³ã¹ã®ææ³ãexperimental_useTransitionãšçµã¿åãããŠäœ¿çšããŠãããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸããã¹ããããªã³ã°ã¯ã颿°ãå®è¡ãããã¬ãŒããå¶éãããããŠã³ã¹ã¯ãäžå®æéã®éã¢ã¯ãã£ãç¶æ
ãçµéãããŸã§é¢æ°ã®å®è¡ãé
å»¶ãããŸãããããã®ææ³ã¯ãéåºŠã®æŽæ°ãé²ããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžãããããšãã§ããŸãã
å®è£ ã«é¢ããã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ãªå¯Ÿè±¡è
ã察象ãšããã¢ããªã±ãŒã·ã§ã³ã«experimental_useTransitionãå®è£
ããå Žåã¯ã次ã®ç¹ãèæ
®ããããšãéèŠã§ãã
- ãããã¯ãŒã¯ç¶æ³ïŒ å°åãç°ãªããšããŠãŒã¶ãŒãçµéšãããããã¯ãŒã¯é床ãç°ãªãå ŽåããããŸããé©åãªããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãšãšã©ãŒã¡ãã»ãŒãžãæäŸããããšã§ãã¢ããªã±ãŒã·ã§ã³ãé ããããã¯ãŒã¯æ¥ç¶ãé©åã«åŠçããããã«ããŸãã
- ããŒã¿ã®ããŒã«ã©ã€ãºïŒ ããŒã¿ã®ãã§ãããšè¡šç€ºæã«ãããŒã¿ã®ããŒã«ã©ã€ãºãæ€èšããŸããå°åãç°ãªããšãããŒã¿ã®åœ¢åŒãéè²šãæ¥ä»/æå»ã®åœ¢åŒãç°ãªãå ŽåããããŸããåœéåã©ã€ãã©ãªã䜿çšããŠããããã®éããé©åã«åŠçããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒ ã¢ããªã±ãŒã·ã§ã³ãé害ã®ãããŠãŒã¶ãŒã«ã¢ã¯ã»ã¹ã§ããããã«ããŸããARIA屿§ã䜿çšããŠãããŒãã£ã³ã°ç¶æ ãšãã©ã³ãžã·ã§ã³ã«é¢ããèšè¿°æ å ±ãæäŸããŸãã
- ããã©ãŒãã³ã¹ã®æé©åïŒ ããŸããŸãªããã€ã¹ãšç»é¢ãµã€ãºã«åãããŠã¢ããªã±ãŒã·ã§ã³ãæé©åããŸããã³ãŒãåå²ãé å»¶ããŒããç»åã®æé©åãªã©ã®ææ³ã䜿çšããŠãããã©ãŒãã³ã¹ãåäžãããŸãã
- ãŠãŒã¶ãŒããã®ãã£ãŒãããã¯ïŒ ããŸããŸãªå°åããã®ãŠãŒã¶ãŒããã®ãã£ãŒãããã¯ãåéããŠãæ¹åã®äœå°ãããé åãç¹å®ããŸããåæããŒã«ã䜿çšããŠãããã©ãŒãã³ã¹ã¡ããªãã¯ã远跡ããããã«ããã¯ãç¹å®ããŸãã
ãã¹ããã©ã¯ãã£ã¹
experimental_useTransitionã䜿çšããéã«åŸãã¹ããã¹ããã©ã¯ãã£ã¹ã次ã«ç€ºããŸãã
- æ§ããã«äœ¿çšããïŒ ãã¹ãŠã®ã¹ããŒãæŽæ°ã«
experimental_useTransitionã䜿çšããªãã§ãã ãããããã©ãŒãã³ã¹ã®åé¡ãåŒãèµ·ããå¯èœæ§ã®ããæŽæ°ããŸãã¯ããã¹ã ãŒãºãªãã©ã³ãžã·ã§ã³ãå¿ èŠãªæŽæ°ã«ã®ã¿äœ¿çšããŠãã ããã - ãã£ãŒãããã¯ãæäŸããïŒ ãã©ã³ãžã·ã§ã³ãé²è¡äžã®å Žåã¯ãåžžã«ãŠãŒã¶ãŒã«ãã£ãŒãããã¯ãæäŸããŸããããã¯ãããŒãã£ã³ã°ã¹ãããŒãããã°ã¬ã¹ããŒããŸãã¯ç°¡åãªã¡ãã»ãŒãžã§ããå¯èœæ§ããããŸããããã»ã¹ãå®äºãããšãã«ãŠãŒã¶ãŒã«ç¥ãããŠãããŒãããã»ã¹ã«éææ§ãæãããŸãã
- 培åºçã«ãã¹ãããïŒ
experimental_useTransitionãæåŸ ã©ããã«åäœããããšãä¿èšŒããããã«ãã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããŸããããŸããŸãªããã€ã¹ãšãããã¯ãŒã¯ç¶æ³ã§ãã¹ãããŸãã - UIãæ€èšããïŒ ãã©ã³ãžã·ã§ã³ãå©çšããããã«UIãèšèšããŸããã¢ãã¡ãŒã·ã§ã³ããã®ä»ã®èŠèŠçãªåå³ã䜿çšããŠããã©ã³ãžã·ã§ã³ãããã¹ã ãŒãºã§èªç¶ãªãã®ã«ããŸãã
- ããã©ãŒãã³ã¹ãç£èŠããïŒ ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããŠãæœåšçãªåé¡ãç¹å®ããŸããããã©ãŒãã³ã¹ç£èŠããŒã«ã䜿çšããŠãäž»èŠãªã¡ããªãã¯ã远跡ããããã«ããã¯ãç¹å®ããŸãããã¹ããã©ã¯ãã£ã¹ãä¿èšŒããããã«ãã³ãŒãã宿çã«ç£æ»ããŸãã
çµè«
experimental_useTransitionã¯ãReactã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã®è²ŽéãªããŒã«ã§ããæŽæ°ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããããšã§ãUIããŠãŒã¶ãŒã®æäœã«å¿çæ§ãç¶æããããã¹ã ãŒãºãªèŠèŠçãªãã©ã³ãžã·ã§ã³ãäœæã§ããŸãããŸã å®é𿮵éã§ãããexperimental_useTransitionãçè§£ããŠå©çšããããšã§ãReactã¢ããªã±ãŒã·ã§ã³ã®äœæããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããããšãã§ããŸããåžžã«ãã³ãŒãã培åºçã«ãã¹ãããããã©ãŒãã³ã¹ãç£èŠããŠãexperimental_useTransitionãæåŸ
ã©ããã«åäœããæãŸããå©ç¹ãæäŸããŠããããšã確èªããããšãå¿ããªãã§ãã ããããã®åŒ·åãªReactããã¯ã䜿çšããŠããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæé©åããããã®æ°ããæ¹æ³ãå®éšãç¶ããŠãã ãããéåæã¬ã³ããªã³ã°ãšã³ã³ã«ã¬ã³ãã¢ãŒãã¯å¢ããå¢ãã°ãããªã®ã§ããããã®æŠå¿µãåŠã³å§ããã«ã¯æé©ãªææã§ãïŒ