Reactã®useTransitionããã¯ã®ãã¯ãŒãè§£ãæŸã¡ãŸãããããã³ããããã³ã°ãªç¶æ æŽæ°ãå®è£ ããäœæããã©ãŒãã³ã¹ãåäžãããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«åããŠãæµåçã§å¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœãäžããŸãã
React useTransition: ã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸãããã³ããããã³ã°ãªç¶æ æŽæ°ãã¿ãŒã³ããã¹ã¿ãŒãã
çŸä»£ã®ãŠã§ãéçºã®ããŒã¹ã®éãäžçã§ã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒUXïŒãæãéèŠã§ãããŠãŒã¶ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ãå¿çæ§ãæµåçã§ãããäžå¿«ãªäžæããªãããšãæåŸ
ããŠããŸããReactéçºè
ã«ãšã£ãŠããããå®çŸããã«ã¯ãç¶æ
ã®æŽæ°ã广çã«ç®¡çããããšããã°ãã°éèŠã«ãªããŸããæŽå²çã«ãå€§èŠæš¡ãªç¶æ
ã®å€æŽã¯ãUIã®ããªãŒãºã«ã€ãªããå¯èœæ§ãããããŠãŒã¶ãŒãã€ã©ã€ã©ãããã¢ããªã±ãŒã·ã§ã³ã®äœæããã©ãŒãã³ã¹ãäœäžãããŠããŸããã幞ããªããšã«ãReactã®äžŠè¡ã¬ã³ããªã³ã°æ©èœãç¹ã«useTransitionããã¯ã®ç»å Žã«ãããéçºè
ã¯ãã³ããããã³ã°ãªç¶æ
æŽæ°ãã¿ãŒã³ãå®è£
ããããã®åŒ·åãªããŒã«ãæã«å
¥ããããŒã¿ã®è€éãããŠãŒã¶ãŒã®ããã€ã¹ã«é¢ä¿ãªããäžè²«ããŠã¹ã ãŒãºã§é
åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒã§ããŸãã
ããããã³ã°ç¶æ ã®æŽæ°ã®èª²é¡
useTransitionã«å
¥ãåã«ãããã解決ããããšããŠããåé¡ãçè§£ããããšãéèŠã§ããReactã§ã¯ãç¶æ
ãæŽæ°ãããšãReactã¯ã³ã³ããŒãã³ããšãã®åãåã¬ã³ããªã³ã°ããŸããããã¯UIæŽæ°ã®ã³ã¢ã¡ã«ããºã ã§ãããå€§èŠæš¡ãŸãã¯è€éãªåã¬ã³ããªã³ã°ã«ã¯ããªãã®æéããããå¯èœæ§ããããŸãããããã®æŽæ°ãç¹å¥ãªåŠçãªãã§ã¡ã€ã³ã¹ã¬ããã§çºçãããšããã©ãŠã¶ãã¯ãªãã¯ãã¹ã¯ããŒã«ãå
¥åãªã©ã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«å¿çã§ããªããªãå¯èœæ§ããããŸãããã®çŸè±¡ã¯ããããã³ã°ã¢ããããŒããšããŠç¥ãããŠããŸãã
ãŠãŒã¶ãŒãèšå€§ãªè£œåã«ã¿ãã°ãé²èЧããŠããã°ããŒãã«ãªeã³ããŒã¹ãã©ãããã©ãŒã ãèããŠã¿ãŸãããããŠãŒã¶ãŒãå€§èŠæš¡ãªããŒã¿åååŸãšãã®åŸã®UIæŽæ°ãããªã¬ãŒãããã£ã«ã¿ãŒãé©çšãããã®ããã»ã¹ã«æ°çŸããªç§ããããšããŠãŒã¶ãŒã¯ãã®éã«å¥ã®ãã¿ã³ãã¯ãªãã¯ããããããŒãžãã¹ã¯ããŒã«ããŠã³ãããããããšããå¯èœæ§ããããŸããUIããããã¯ãããŠããå Žåããããã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã¯é å»¶ãŸãã¯å¿çæ§ãäœããšæãããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžããŸããããŸããŸãªãããã¯ãŒã¯æ¡ä»¶ãããã€ã¹ããã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããåœéçãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠããã®ãããªããããã³ã°åäœã¯ããã«æå®³ã§ãã
ããã軜æžããããã®åŸæ¥ã®ã¢ãããŒãã«ã¯ããããŠã³ã¹ãã¹ããããªã³ã°ãªã©ã®ææ³ããŸãã¯åœ±é¿ãæå°éã«æããããã®ç¶æ æŽæ°ã®æ éãªèª¿æŽãå«ãŸããŠããŸããããã ãããããã®ã¡ãœããã¯å®è£ ãè€éã«ãªãå¯èœæ§ããããããããã³ã°ã®æ ¹æ¬åå ã«å®å šã«å¯ŸåŠã§ãããšã¯éããŸããã§ããã
䞊è¡ã¬ã³ããªã³ã°ãšãã©ã³ãžã·ã§ã³ã®ç޹ä»
React 18ã§ã¯ãReactãè€æ°ã®ç¶æ
æŽæ°ãåæã«åŠçã§ããããã«ããåºæ¬çãªå€åã§ãã䞊è¡ã¬ã³ããªã³ã°ãå°å
¥ãããŸãããReactã¯ããã¹ãŠãäžåºŠã«ã¬ã³ããªã³ã°ãã代ããã«ãã¬ã³ããªã³ã°äœæ¥ãäžæãäžæåæ¢ãããã³åéã§ããŸãããã®æ©èœã¯ãuseTransitionã®ãããªæ©èœãæ§ç¯ãããåºç€ã§ãã
Reactã®ãã©ã³ãžã·ã§ã³ã¯ãå®äºãŸã§ã«æéããããå¯èœæ§ãããããç·æ¥ã§ã¯ãªãç¶æ ã®æŽæ°ãšããŠå®çŸ©ãããŸããäŸãšããŠã¯ã次ã®ãã®ããããŸãã
- å€§èŠæš¡ãªããŒã¿ã»ããã®ãã§ãããšè¡šç€ºã
- ãªã¹ããžã®è€éãªãã£ã«ã¿ãŒã®é©çšãŸãã¯ãœãŒãã
- è€éãªã«ãŒãéã®ããã²ãŒã·ã§ã³ã
- ç¶æ ã®å€åã«ãã£ãŠããªã¬ãŒãããã¢ãã¡ãŒã·ã§ã³ã
ãããããå ¥åãã£ãŒã«ããžã®å ¥åããã¿ã³ã®ã¯ãªãã¯ãªã©ã峿ã®ãã£ãŒãããã¯ãå¿ èŠãšããçŽæ¥çãªãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã§ããç·æ¥ã¢ããããŒããšæ¯èŒããŠãã ãããReactã¯ã峿ã®å¿çæ§ã確ä¿ããããã«ç·æ¥ã¢ããããŒããåªå ããŸãã
useTransitionããã¯ïŒããæ·±ãæãäžãã
useTransitionããã¯ã¯ãç¹å®ã®ç¶æ
æŽæ°ãç·æ¥ã§ã¯ãªããã®ãšããŠããŒã¯ã§ãã匷åãªReactããã¯ã§ããç¶æ
æŽæ°ããã©ã³ãžã·ã§ã³ã§ã©ãããããšãããç·æ¥ãªæŽæ°ãçºçããå Žåããã®æŽæ°ãäžæã§ããããšãReactã«äŒããŸããããã«ãããReactã¯ç·æ¥ã§ã¯ãªãæŽæ°ãããã¯ã°ã©ãŠã³ãã§åŠçãããŠããéãUIã®å¿çæ§ãç¶æã§ããŸãã
useTransitionããã¯ã¯ã2ã€ã®èŠçŽ ãæã€é
åãè¿ããŸãã
isPendingïŒãã©ã³ãžã·ã§ã³ãçŸåšé²è¡äžãã©ããã瀺ãããŒã«å€ãããã¯ãããŒãã¹ãããŒã®è¡šç€ºãã€ã³ã¿ã©ã¯ãã£ãèŠçŽ ã®ç¡å¹åãªã©ããŠãŒã¶ãŒã«èŠèŠçãªãã£ãŒãããã¯ãæäŸããã®ã«éåžžã«åœ¹ç«ã¡ãŸããstartTransitionïŒç·æ¥ã§ã¯ãªãç¶æ æŽæ°ãã©ããããããã«äœ¿çšãã颿°ã
åºæ¬çãªçœ²åã¯æ¬¡ã®ãšããã§ãã
const [isPending, startTransition] = useTransition();
å®éçãªå¿çšäŸ
useTransitionãäžè¬çãªã·ããªãªã«é©çšããæ¹æ³ããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ãŠãŒã¶ãŒãã¬ã³ããªãŒãªã€ã³ã¿ãŒãã§ãŒã¹ã®æ§ç¯ã«çŠç¹ãåœãŠãŠèª¬æããŸãããã
1. å€§èŠæš¡ãªããŒã¿ã»ããã®ãã£ã«ã¿ãªã³ã°
ãŠãŒã¶ãŒãå Žæãæ¥çã絊äžç¯å²ã§æ°åã®æ±äººæ å ±ããã£ã«ã¿ãªã³ã°ã§ããåœéçãªæ±äººæ²ç€ºæ¿ã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ããããã£ã«ã¿ãŒãé©çšããã«ã¯ãæ°ããããŒã¿ããã§ããããŠé·ããªã¹ããåã¬ã³ããªã³ã°ããå¿ èŠãããå ŽåããããŸãã
useTransitionãªãïŒ
ãŠãŒã¶ãŒãè€æ°ã®ãã£ã«ã¿ãŒæ¡ä»¶ãé£ç¶ããŠãã°ãã倿Žããå Žåãåãã£ã«ã¿ãŒã¢ããªã±ãŒã·ã§ã³ã¯ããããã³ã°åã¬ã³ããªã³ã°ãããªã¬ãŒããå¯èœæ§ããããŸããUIãããªãŒãºããçŸåšã®ãã£ã«ã¿ãŒã®ããŒã¿ãå®å šã«ããŒãããã³ã¬ã³ããªã³ã°ããããŸã§ããŠãŒã¶ãŒã¯ä»ã®èŠçŽ ãæäœã§ããªããªãå¯èœæ§ããããŸãã
useTransitionããïŒ
ãã£ã«ã¿ãŒãããçµæã®ç¶æ
æŽæ°ãstartTransitionã§ã©ããããããšã§ããã®æŽæ°ãçŽæ¥çãªãŠãŒã¶ãŒå
¥åã»ã©éèŠã§ã¯ãªãããšãReactã«äŒããŸãããŠãŒã¶ãŒããã£ã«ã¿ãŒããã°ãã倿ŽãããšãReactã¯ä»¥åã®ãã£ã«ã¿ãŒã®ã¬ã³ããªã³ã°ãäžæããææ°ã®ãã£ã«ã¿ãŒã®åŠçãéå§ã§ããŸããisPendingãã©ã°ã䜿çšããŠã埮åŠãªããŒãã€ã³ãžã±ãŒã¿ãŒã衚瀺ããã¢ããªã±ãŒã·ã§ã³å
šäœãå¿çããªãããããšãªããäœããèµ·ãã£ãŠããããšããŠãŒã¶ãŒã«ç¥ãããããšãã§ããŸãã
import React, { useState, useTransition } from 'react';
function JobList({ jobs }) {
const [filter, setFilter] = useState('');
const [isPending, startTransition] = useTransition();
const handleFilterChange = (event) => {
const newFilter = event.target.value;
startTransition(() => {
// This state update is now non-urgent
setFilter(newFilter);
});
};
const filteredJobs = jobs.filter(job =>
job.title.toLowerCase().includes(filter.toLowerCase()) ||
job.location.toLowerCase().includes(filter.toLowerCase())
);
return (
{isPending && Loading jobs...
} {/* Visual feedback */}
{filteredJobs.map(job => (
-
{job.title} - {job.location}
))}
);
}
export default JobList;
ãã®äŸã§ã¯ããŠãŒã¶ãŒãå
¥åãããšãhandleFilterChangeã¯startTransitionãåŒã³åºããŸããããã«ãããReactã¯setFilteråŒã³åºãã«ãã£ãŠåŒãèµ·ããããåã¬ã³ããªã³ã°ãå»¶æã§ããŸãããŠãŒã¶ãŒããã°ããå
¥åãããšãReactã¯ææ°ã®å
¥åãåªå
ããUIãããªãŒãºããã®ãé²ãããšãã§ããŸããisPendingç¶æ
ã¯ããã£ã«ã¿ãªã³ã°æäœãé²è¡äžã§ããããšãèŠèŠçã«ç€ºããŸãã
2. ãªãŒãã³ã³ããªãŒãæ€çŽ¢ããŒ
ãªãŒãã³ã³ããªãŒãæ©èœã¯ãç¹ã«ãŠãŒã¶ãŒã補åãéœåžããŸãã¯äŒæ¥ãæ€çŽ¢ããŠããå¯èœæ§ã®ããã°ããŒãã«ãã©ãããã©ãŒã ã§ã¯ãæ€çŽ¢ããŒã§äžè¬çã§ãããŠãŒã¶ãŒãå ¥åãããšãåè£ã®ãªã¹ãã衚瀺ãããŸãããããã®åè£ã®ãã§ããã¯ãæéããããéåææäœã«ãªãå¯èœæ§ããããŸãã
課é¡ïŒåè£ã®ãã§ãããšã¬ã³ããªã³ã°ãé©åã«ç®¡çãããŠããªãå Žåãå ¥åãé å»¶ããŠããããã«æããããåã®æ€çŽ¢ãå®äºããåã«æ°ããæ€çŽ¢ãããªã¬ãŒãããå Žåãåè£ãªã¹ããäºæããã¡ãã€ãããæ¶ãããããå¯èœæ§ããããŸãã
useTransitionã«ãã解決çïŒ
åè£ã®ãã§ãããããªã¬ãŒããç¶æ
ã®æŽæ°ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ã§ããŸããããã«ãããæ€çŽ¢ããŒãžã®å
¥åã軜快ãªãŸãŸã«ãªããåè£ãããã¯ã°ã©ãŠã³ãã§ããŒããããŸãããŸããisPendingã䜿çšããŠãæ€çŽ¢å
¥åã®æšªã«ããŒãã€ã³ãžã±ãŒã¿ãŒã衚瀺ããããšãã§ããŸãã
import React, { useState, useTransition, useEffect } from 'react';
function AutoCompleteSearch({
fetchSuggestions,
renderSuggestion
}) {
const [query, setQuery] = useState('');
const [suggestions, setSuggestions] = useState([]);
const [isPending, startTransition] = useTransition();
const handleInputChange = (event) => {
const newQuery = event.target.value;
setQuery(newQuery);
// Wrap the state update that triggers the fetch in startTransition
startTransition(async () => {
if (newQuery.trim() !== '') {
const results = await fetchSuggestions(newQuery);
setSuggestions(results);
} else {
setSuggestions([]);
}
});
};
return (
{isPending && Searching...} {/* Loading indicator */}
{suggestions.length > 0 && (
{suggestions.map((suggestion, index) => (
-
{renderSuggestion(suggestion)}
))}
)}
);
}
export default AutoCompleteSearch;
ããã§ãstartTransitionã¯ãéåæåè£ã®ãã§ãããšsetSuggestionsã®æŽæ°ãçºçããŠããå Žåã§ããå
¥åãå¿çæ§ãç¶æããããšãä¿èšŒããŸããããŒãã€ã³ãžã±ãŒã¿ãŒã¯åœ¹ç«ã€ãã£ãŒãããã¯ãæäŸããŸãã
3. 倧éã®ã³ã³ãã³ããå«ãã¿ãä»ãã€ã³ã¿ãŒãã§ãŒã¹
è€æ°ã®ã¿ãããããããããã«å€§éã®ããŒã¿ãŸãã¯è€éãªUIã³ã³ããŒãã³ããå«ãŸããŠãããè€éãªããã·ã¥ããŒããŸãã¯èšå®ããŒãžãèããŠã¿ãŸããããã¿ããåãæ¿ããã«ã¯ã倧éã®ã³ã³ããŒãã³ãããªãŒã®ããŠã³ãè§£é€ãšããŠã³ããå¿ èŠã«ãªãå Žåããããæéããããå¯èœæ§ããããŸãã
åé¡ïŒã¿ãã®åãæ¿ããé ããšãã·ã¹ãã ã®ããªãŒãºã®ããã«æããããããšããããŸãããŠãŒã¶ãŒãã³ã³ãã³ããããã«è¡šç€ºãããããšãæåŸ ããŠã¿ããã¯ãªãã¯ããŠãã代ããã«ç©ºçœã®ç»é¢ãŸãã¯å転ããããŒããŒãé·æé衚瀺ãããå Žåãäœæããã©ãŒãã³ã¹ãäœäžããŸãã
useTransitionã¢ãããŒãïŒ
ãŠãŒã¶ãŒãã¿ããåãæ¿ããããã«ã¯ãªãã¯ãããšãã¢ã¯ãã£ããªã¿ãã倿Žããç¶æ
ã®æŽæ°ã¯startTransitionã§ã©ããã§ããŸããããã«ãããReactã¯UIããã以äžã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«å¿çããã®ããããã¯ããã«ãæ°ããã¿ãã®ã³ã³ãã³ããããã¯ã°ã©ãŠã³ãã§ã¬ã³ããªã³ã°ã§ããŸããisPendingç¶æ
ã䜿çšããŠãã³ã³ãã³ããããŒããããŠããããšã瀺ããã¢ã¯ãã£ããªã¿ããã¿ã³ã«åŸ®åŠãªèŠèŠçãªæãããã衚瀺ã§ããŸãã
import React, { useState, useTransition } from 'react';
function TabbedContent({
tabs
}) {
const [activeTab, setActiveTab] = useState(tabs[0].id);
const [isPending, startTransition] = useTransition();
const handleTabClick = (tabId) => {
startTransition(() => {
setActiveTab(tabId);
});
};
const currentTabContent = tabs.find(tab => tab.id === activeTab)?.content;
return (
{currentTabContent}
);
}
export default TabbedContent;
ãã®ã·ããªãªã§ã¯ãã¿ããã¯ãªãã¯ãããšstartTransitionãããªã¬ãŒãããŸããisPendingç¶æ
ã¯ããã§ãçŸåšã¢ã¯ãã£ãã§ã¯ãªãããã©ã³ãžã·ã§ã³ãããŠããã¿ãããããã«æãããããã«äœ¿çšãããã³ã³ãã³ããããŒããããŠãããšããèŠèŠçãªãã³ããæäŸããŸããã¡ã€ã³UIã¯ãæ°ããã¿ãã³ã³ãã³ããã¬ã³ããªã³ã°ãããŠããéãã€ã³ã¿ã©ã¯ãã£ããªãŸãŸã§ãã
useTransitionã䜿çšããäž»ãªå©ç¹
useTransitionãæŽ»çšãããšãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®é«æ§èœã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããäžã§ãããã€ãã®å€§ããªå©ç¹ããããŸãã
- äœæããã©ãŒãã³ã¹ã®åäžïŒUIã®å¿çæ§ãç¶æããããšã§ãåºç€ãšãªãæäœã«æéãããã£ãŠãããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ãããé«éã§ãããšæããŸãã
- UIãžã£ã³ã¯ã®åæžïŒãã³ããããã³ã°ã¢ããããŒãã¯UIã®ããªãŒãºãé²ããããã¹ã ãŒãºã§æµåçãªãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
- ãŠãŒã¶ãŒå ¥åã®ããé©åãªåŠçïŒïŒå ¥åãªã©ïŒç·æ¥ã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãåªå ããã峿ã®ãã£ãŒãããã¯ãä¿èšŒãããŸãã
-
æç¢ºãªèŠèŠçãã£ãŒãããã¯ïŒ
isPendingãã©ã°ã䜿çšãããšãéçºè ã¯æç€ºçãªããŒãç¶æ ãæäŸãããŠãŒã¶ãŒã®æåŸ ã广çã«ç®¡çã§ããŸãã -
ç°¡çŽ åãããããžãã¯ïŒç¹å®ã®è€éãªæŽæ°ã·ããªãªã§ã¯ã
useTransitionã䜿çšãããšãæåã«ããäžæããã³åªå é äœä»ãããžãã¯ãšæ¯èŒããŠã³ãŒããç°¡çŽ åã§ããŸãã -
ã°ããŒãã«ã¢ã¯ã»ã·ããªãã£ïŒããŸããŸãªããã€ã¹ããããã¯ãŒã¯æ¡ä»¶ã§ã®å¿çæ§ã確ä¿ããããšã§ã
useTransitionã¯ãäžçäžã®ãã¹ãŠã®ãŠãŒã¶ãŒã«ãšã£ãŠãããå æ¬çã§ã¢ã¯ã»ã¹ãããããšã¯ã¹ããªãšã³ã¹ã«è²¢ç®ããŸãã
useTransitionã䜿çšããã¿ã€ãã³ã°
useTransitionã¯ã次ã®ãããªç¶æ
æŽæ°ã«æã广çã§ãã
- ç·æ¥ã§ã¯ãªãïŒå³æã®èŠèŠçãªãã£ãŒãããã¯ãå¿ èŠãšããªããã峿ã®å¿çãå¿ èŠãšããçŽæ¥çã§è¿ éãªãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ããçŽæ¥çããŸããã
- æœåšçã«é ãïŒããŒã¿ãã§ãããè€éãªèšç®ããŸãã¯ç®ã«èŠããæéããããå¯èœæ§ã®ããå€§èŠæš¡ãªãªã¹ãã®ã¬ã³ããªã³ã°ãªã©ã®æäœãå«ãŸããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒããç·æ¥ãªã¢ããããŒãã®ããã«ãããã®ã¢ããããŒããäžæãããšãã¢ããªã±ãŒã·ã§ã³å šäœã®æè§Šãå€§å¹ ã«åäžããå Žåã
次ã®å Žåã«useTransitionã®äœ¿çšãæ€èšããŠãã ããïŒ
- ç¬æã®æŽæ°ãå¿ èŠãšããªããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«åºã¥ããŠç¶æ ãæŽæ°ããïŒäŸïŒæ°çŸããªç§ãããå¯èœæ§ã®ããè€éãªãã£ã«ã¿ãŒãé©çšããïŒã
- 峿ã®å ¥åã«çŽæ¥é¢é£ä»ããããŠããªããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«ãã£ãŠããªã¬ãŒãããããã¯ã°ã©ãŠã³ãããŒã¿ãã§ãããå®è¡ããã
- ã¬ã³ããªã³ã°ã®ããããªé å»¶ãå¿çæ§ã«èš±å®¹ãããå€§èŠæš¡ãªãªã¹ããŸãã¯è€éãªã³ã³ããŒãã³ãããªãŒãã¬ã³ããªã³ã°ããã
éèŠãªèæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
useTransitionã¯åŒ·åãªããŒã«ã§ãããè³¢æã«äœ¿çšãããã®ãã¥ã¢ã³ã¹ãçè§£ããããšãäžå¯æ¬ ã§ãã
-
é床ã®äœ¿çšã¯é¿ããïŒ
startTransitionã§ãã¹ãŠã®ç¶æ æŽæ°ãã©ããããããšã¯é¿ããŠãã ãããå ¥åãã£ãŒã«ããžã®å ¥åãªã©ãç·æ¥ã®æŽæ°ã¯ã峿ã®ãã£ãŒãããã¯ãä¿èšŒããããã«åæã®ãŸãŸã«ããå¿ èŠããããŸããæ¢ç¥ã®ããã©ãŒãã³ã¹ããã«ããã¯ã«å¯ŸããŠæŠç¥çã«äœ¿çšããŸãã -
`isPending`ãçè§£ããïŒ
isPendingç¶æ ã¯ããã®ç¹å®ã®ããã¯ã€ã³ã¹ã¿ã³ã¹ã§ãã©ã³ãžã·ã§ã³ãé²è¡äžãã©ãããåæ ããŸãã*çŸåšã®*ã¬ã³ããªã³ã°ããã©ã³ãžã·ã§ã³ã®äžéšã§ãããã©ããã¯ããããŸãããããŒãç¶æ ã衚瀺ãããããã©ã³ãžã·ã§ã³äžã«ã€ã³ã¿ã©ã¯ã·ã§ã³ãç¡å¹ã«ãããããããã«äœ¿çšããŸãã -
ãããŠã³ã¹å¯Ÿãã©ã³ãžã·ã§ã³ïŒãããŠã³ã¹ãšã¹ããããªã³ã°ã¯ã¢ããããŒãã®é »åºŠãå¶éããããšãç®çãšããŠããŸããã
useTransitionã¯ã¢ããããŒãã®åªå é äœä»ããšäžæã«çŠç¹ãåœãŠãŠããŸãããããã¯çµã¿åãããŠäœ¿çšââã§ããå ŽåããããŸãããuseTransitionã¯å€ãã®å ŽåãReactã®äžŠè¡ã¬ã³ããªã³ã°ã¢ãã«å ã§ããçµ±åããããœãªã¥ãŒã·ã§ã³ãæäŸããŸãã - ãµãŒããŒã³ã³ããŒãã³ãïŒReactãµãŒããŒã³ã³ããŒãã³ãã䜿çšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã©ã³ãžã·ã§ã³ã¯ããµãŒããŒããŒã¿ã«åœ±é¿ãäžããã¯ã©ã€ã¢ã³ãã³ã³ããŒãã³ãããéå§ãããããŒã¿ãã§ããã管çã§ããŸãã
-
èŠèŠçãã£ãŒãããã¯ãéèŠïŒåžžã«
isPendingãæç¢ºãªèŠèŠçã€ã³ãžã±ãŒã¿ãŒãšçµã¿åãããŠãã ãããUIãã€ã³ã¿ã©ã¯ãã£ããªãŸãŸã§ãã£ãŠãããŠãŒã¶ãŒã¯æäœãé²è¡äžã§ããããšãç¥ãå¿ èŠããããŸããããã¯ã埮åŠãªã¹ãããŒãç¡å¹ãªãã¿ã³ããŸãã¯èæãç¶æ ã§ããå¯èœæ§ããããŸãã -
ãã¹ãïŒ
useTransitionãæå¹ã«ããŠã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããç¹ã«äœéãªãããã¯ãŒã¯ãŸãã¯ããã€ã¹ã§ãããŸããŸãªæ¡ä»¶äžã§æåŸ ã©ããã«åäœããããšã確èªããŸãã
useDeferredValueïŒè£å®çãªããã¯
䞊è¡ã¬ã³ããªã³ã°ã§å°å
¥ãããå¥ã®ããã¯ã§ããuseDeferredValueã«ã€ããŠèšåãã䟡å€ããããŸããããã¯åæ§ã®ç®çãæãããŸãããã¢ãããŒãããããã«ç°ãªããŸããuseDeferredValueã¯ãUIã®äžéšãæŽæ°ããã®ãé
ãããŸããããã¯ãæ¥éã«å€åããå€ã«äŸåããUIã®ã¬ã³ããªã³ã°ãé
ãéšåããããUIã®æ®ãã®éšåãå¿çæ§ãç¶æãããå Žåã«åœ¹ç«ã¡ãŸãã
ããšãã°ãæ€çŽ¢çµæã®ã©ã€ããªã¹ããæŽæ°ããæ€çŽ¢å
¥åãããå Žåãçµæãªã¹ãã®æ€çŽ¢ã¯ãšãªã§useDeferredValueã䜿çšã§ããŸããããã¯Reactã«ããæ€çŽ¢å
¥åãããã«ã¬ã³ããªã³ã°ããŸãããããç·æ¥ãªãã®ãçºçããå Žåã¯ãæ€çŽ¢çµæã®ã¬ã³ããªã³ã°ãé
ãããŠãã ããããšäŒããŸããããã¯ãå€ãé »ç¹ã«å€åãããã¹ãŠã®å€æŽã§UIã®é«äŸ¡ãªéšåãåã¬ã³ããªã³ã°ããã®ãé¿ãããå Žåã«æé©ã§ãã
useTransitionã¯ãç¹å®ã®ç¶æ
æŽæ°ãç·æ¥ã§ã¯ãªããã®ãšããŠããŒã¯ãããããã«é¢é£ä»ããããããŒãç¶æ
ã管çããããšã«ãã£ãšé¢ä¿ããŠããŸããuseDeferredValueã¯ãå€èªäœã®ã¬ã³ããªã³ã°ãé
ãããããšã«é¢ä¿ããŠããŸãããããã¯è£å®çã§ãããè€éãªã¢ããªã±ãŒã·ã§ã³ã§äžç·ã«äœ¿çšã§ããŸãã
çµè«
ãŠã§ãéçºã®ã°ããŒãã«ãªç¶æ³ã«ãããŠãäžè²«ããŠã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšã¯ããã¯ãèŽ
æ²¢ã§ã¯ãªããå¿
ç¶ã§ããReactã®useTransitionããã¯ã¯ããã³ããããã³ã°ãªç¶æ
æŽæ°ã管çããããã®å
ç¢ã§å®£èšçãªæ¹æ³ãæäŸããéãèšç®ãããŒã¿ãã§ãããåŠçããå Žåã§ããã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¿ã©ã¯ãã£ãã§æµåçãªç¶æ
ãç¶æããããã«ããŸãã䞊è¡ã¬ã³ããªã³ã°ã®ååãçè§£ããuseTransitionãæŠç¥çã«é©çšããããšã§ãReactã¢ããªã±ãŒã·ã§ã³ã®äœæããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããäžçäžã®ãŠãŒã¶ãŒãåã°ãã補åãéç«ãããããšãã§ããŸãã
ãããã®é«åºŠãªãã¿ãŒã³ãæ¡çšããŠã次äžä»£ã®ããã©ãŒãã³ã¹ã®é«ããé åçãªããããŠçã«ãŠãŒã¶ãŒäžå¿ã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠãã ããã倿§ãªåœéçãªãªãŒãã£ãšã³ã¹ã«åããŠéçºãç¶ããéã«ã¯ãå¿çæ§ãã¢ã¯ã»ã·ããªãã£ãšå šäœçãªæºè¶³åºŠã®éèŠãªèŠçŽ ã§ããããšãå¿ããªãã§ãã ããã