Reactã®experimental_useTransitionããã¯ã掻çšããŠããã©ã³ãžã·ã§ã³ã管çãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããWebã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããæ¹æ³ãåŠã³ãŸããã°ããŒãã«ãªäŸãšãã¹ããã©ã¯ãã£ã¹ãæ¢ããŸãã
Reactã®experimental_useTransition: ã¢ããªã±ãŒã·ã§ã³ã®ãã©ã³ãžã·ã§ã³ããã¹ã¿ãŒãã
æ¥éã«é²åããWebéçºã®äžçã§ã¯ãã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšãæãéèŠã§ãããŠãŒã¶ãŒã¯ã·ãŒã ã¬ã¹ãªã€ã³ã¿ã©ã¯ã·ã§ã³ãæåŸ
ããŠãããç¥èŠãããã©ã°ãé
å»¶ã¯äžæºãé¢è±ã«ã€ãªããå¯èœæ§ããããŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®äž»èŠãªJavaScriptã©ã€ãã©ãªã§ããReactã¯ããããã®èª²é¡ã«å¯ŸåŠããããã®åŒ·åãªããŒã«ãæäŸããŸãããã®ãããªããŒã«ã®1ã€ãexperimental_useTransitionããã¯ã§ãããããã¯ãã©ã³ãžã·ã§ã³ã管çããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããã®éèŠãªã³ã³ããŒãã³ãã§ãã
ãã©ã³ãžã·ã§ã³ã®éèŠæ§ãçè§£ãã
ãã©ã³ãžã·ã§ã³ã¯ãããžãã£ããªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åºæ¬ã§ãããããã¯ããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³å ã§ã¬ã€ãããèŠèŠçããã³ã€ã³ã¿ã©ã¯ãã£ããªæãããã§ããããã£ãŒãããã¯ãšç¶ç¶æ§ã®æèŠãæäŸããŸãã广çã«å®è£ ããããšããã©ã³ãžã·ã§ã³ã¯æ¬¡ã®ããšãå¯èœã«ããŸãïŒ
- ç¥èŠãããããã©ãŒãã³ã¹ãåäžãããã¢ããªã±ãŒã·ã§ã³ãããéããããå¿çæ§ãé«ããšæããããã
- èŠèŠçãªãã£ãŒãããã¯ãæäŸãããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã確èªããæ³šæãå°ãã
- ã¢ããªã±ãŒã·ã§ã³ã®å šäœçãªçŸçé åãé«ããããé åçã«ããã
éã«ã管çãäžååãªãã©ã³ãžã·ã§ã³ã¯ã次ã®ããšã«ã€ãªããå¯èœæ§ããããŸãïŒ
- äžå¿«ã§å¿çæ§ã®ãªããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã
- äžæºãšã¢ããªã±ãŒã·ã§ã³ã®å質ã«å¯ŸããåŠå®çãªèªèã
- çŽåž°çã®å¢å ãšãŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ãã®äœäžã
experimental_useTransitionã®ç޹ä»
experimental_useTransitionããã¯ã¯ããã®åã®éãããŸã éçºäžã§ããå®éšçãªãã®ãšèŠãªãããŠããŸããããã¯ãå°æ¥ã®ReactãªãªãŒã¹ã§APIã倿Žãããå¯èœæ§ãããããšãæå³ããŸããããããæŽæ°ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããããšã§ãReactããããã®æŽæ°ã®åªå
é äœããã现ããå¶åŸ¡ã§ããããã«ãªãããã©ã³ãžã·ã§ã³ã管çããããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸãã
å
·äœçã«ã¯ãexperimental_useTransitionã¯æ¬¡ã®ããšã«åœ¹ç«ã¡ãŸãïŒ
- æŽæ°ã®åªå é äœä»ãïŒ ç·æ¥ã®æŽæ°ïŒäŸïŒã¿ã€ãã³ã°ãªã©ã®çŽæ¥çãªãŠãŒã¶ãŒå ¥åïŒãšãããã»ã©ç·æ¥ã§ãªãæŽæ°ïŒäŸïŒããŒã¿ååŸãè€éãªUIã®å€æŽã®ã¬ã³ããªã³ã°ïŒãåºå¥ããŸãã
- UIã®ããããã³ã°ã鲿¢ïŒ ç·æ¥ã®æŽæ°ãããã»ã©ç·æ¥ã§ãªãæŽæ°ã«ãã£ãŠãããã¯ãããªãããã«ããéäžçãªããã¯ã°ã©ãŠã³ãããã»ã¹äžã§ãUIã®å¿çæ§ãç¶æããŸãã
- ãã£ãŒãããã¯ã®æäŸïŒ ãã©ã³ãžã·ã§ã³ãé²è¡äžã§ããããšããŠãŒã¶ãŒã«ç€ºãããšãã§ããŸãïŒäŸïŒããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãªã©ïŒã
experimental_useTransitionã®ä»çµã¿
experimental_useTransitionããã¯ã¯ã2ã€ã®èŠçŽ ãå«ãé
åãè¿ããŸãïŒ
isPending: ãã©ã³ãžã·ã§ã³ãçŸåšé²è¡äžãã©ããã瀺ãããŒã«å€ãstartTransition: ç¶æ ã®æŽæ°ããã©ã³ãžã·ã§ã³å ã«ã©ããããããšãã§ãã颿°ã
åºæ¬çãªäŸã次ã«ç€ºããŸãïŒ
import { experimental_useTransition } from 'react';
function MyComponent() {
const [isPending, startTransition] = experimental_useTransition();
const [data, setData] = React.useState(null);
const handleClick = () => {
startTransition(() => {
// Simulate fetching data
setTimeout(() => {
setData({ message: 'Data loaded!' });
}, 2000);
});
};
return (
<div>
<button onClick={handleClick} disabled={isPending}>
{isPending ? 'Loading...' : 'Load Data'}
</button>
{data && <p>{data.message}</p>}
</div>
);
}
ãã®äŸã§ã¯ïŒ
startTransitionã¯ãããŒã¿ååŸãã·ãã¥ã¬ãŒãããç¶æ æŽæ°ãã©ããããŸããisPendingã¯ããã©ã³ãžã·ã§ã³ãé²è¡äžã«ãã¿ã³ãç¡å¹ã«ãããLoading...ãã¡ãã»ãŒãžã衚瀺ããããã«äœ¿çšãããŸãã
å®è·µçãªãŠãŒã¹ã±ãŒã¹ãšäŸ
1. ãã¥ãŒéã®ããã²ãŒã·ã§ã³
æ
è¡äºçŽãã©ãããã©ãŒã ã®ãããªWebã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ããããŠãŒã¶ãŒããã©ã€ã詳现ããŒãžã衚瀺ããããã«ãªã³ã¯ãã¯ãªãã¯ãããšãïŒäŸãã°ãæ€çŽ¢çµæã®ãªã¹ãããïŒãçªç¶ã®ããŒãžãªãã¬ãã·ã¥ã§ã¯ãªããã¹ã ãŒãºãªãã©ã³ãžã·ã§ã³ã衚瀺ããããšæãã§ããããexperimental_useTransitionã䜿çšããŠããã®ãã©ã³ãžã·ã§ã³ã管çã§ããŸãïŒ
import { experimental_useTransition } from 'react';
import { Link, useLocation } from 'react-router-dom'; // Or your preferred router
function FlightSearchResults() {
const [isPending, startTransition] = experimental_useTransition();
const location = useLocation();
const [flightDetails, setFlightDetails] = React.useState(null);
// Simulate fetching flight details based on the route parameter (e.g., flight ID)
React.useEffect(() => {
if (!location.pathname.startsWith('/flight/')) {
setFlightDetails(null); // Reset when navigating away
return;
}
const flightId = location.pathname.split('/').pop();
startTransition(() => {
// Simulate API call - replace with your actual data fetching
setTimeout(() => {
setFlightDetails({ id: flightId, airline: 'Example Airlines', origin: 'JFK', destination: 'LHR' });
}, 1000);
});
}, [location.pathname, startTransition]);
return (
<div>
<h2>Flight Search Results</h2>
{/* Display flight search results here */}
<ul>
<li>
<Link to="/flight/1234">Flight 1234 (JFK to LHR)</Link>
</li>
</ul>
{isPending && <p>Loading flight details...</p>}
{flightDetails && (
<div>
<h3>Flight Details</h3>
<p>Airline: {flightDetails.airline}</p>
<p>Origin: {flightDetails.origin}</p>
<p>Destination: {flightDetails.destination}</p>
</div>
)}
</div>
);
}
export default FlightSearchResults;
ãã®äŸã§ã¯ããŠãŒã¶ãŒããã©ã€ãã®ãªã³ã¯ãã¯ãªãã¯ãããšãstartTransitionããã©ã€ã詳现ãååŸããéåææäœãã©ããããããã«äœ¿çšãããŸãã詳现ãããŒããããŠããéããLoading...ãã¡ãã»ãŒãžã衚瀺ããããŠãŒã¶ãŒã«ãã£ãŒãããã¯ãæäŸãããŸããããã«ãããããŒã¿ååŸããã»ã¹äžã«UIãå¿çããªãããã«èŠããã®ãé²ããŸãããã®ã¢ãããŒãã¯ãeã³ããŒã¹ã¹ãã¢ã®ååããŒãžéã®ç§»åããããœãŒã·ã£ã«ã¡ãã£ã¢ã®ãããã£ãŒã«ã®ã»ã¯ã·ã§ã³éã®ããã²ãŒã·ã§ã³ãŸã§ãããããããã²ãŒã·ã§ã³ã®ãŠãŒã¹ã±ãŒã¹ã«é©çšã§ããŸãã
2. ããŒã¿ã®ãã£ã«ã¿ãªã³ã°ãšãœãŒã
ãŠãŒã¶ãŒãæ§ã
ãªåºæºïŒäŸ¡æ Œããã©ã³ãããµã€ãºãªã©ïŒã«åºã¥ããŠååããã£ã«ã¿ãªã³ã°ããããœãŒããããã§ããeã³ããŒã¹Webãµã€ããèããŠã¿ãŸãããããã£ã«ã¿ããœãŒããªãã·ã§ã³ãé©çšããã«ã¯ãããŒã¿ã®åååŸãååŠçãå¿
èŠã«ãªãããšããããããŸããexperimental_useTransitionã䜿çšãããšããã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãã¯ããã«ã¹ã ãŒãºã«æããããããã«ãªããŸãïŒ
import { experimental_useTransition } from 'react';
function ProductList() {
const [isPending, startTransition] = experimental_useTransition();
const [products, setProducts] = React.useState([]);
const [filters, setFilters] = React.useState({});
// Simulate fetching products with filters and sorting - replace with actual API call
React.useEffect(() => {
startTransition(() => {
// Simulate an API call to fetch filtered products
setTimeout(() => {
const filteredProducts = // ... your filtering logic based on 'filters'
setProducts(filteredProducts);
}, 1000);
});
}, [filters, startTransition]);
const handleFilterChange = (newFilters) => {
setFilters(newFilters);
};
return (
<div>
<h2>Product List</h2>
{/* Filter controls (e.g., select elements, checkboxes) */}
<FilterControls onChange={handleFilterChange} />
{isPending && <p>Loading products...</p>}
<ul>
{products.map((product) => (
<li key={product.id}>{product.name} - ${product.price}</li>
))}
</ul>
</div>
);
}
ãŠãŒã¶ãŒããã£ã«ã¿ã倿ŽããïŒäŸãã°ãäŸ¡æ Œåž¯ãéžæããïŒãšãstartTransitionãproductsã®ç¶æ
ãžã®æŽæ°ãã©ããããŸããããã«ããããã£ã«ã¿ãªã³ã°ãããããŒã¿ãååŸãããŠããéãUIã®å¿çæ§ãç¶æãããŸããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒïŒ<p>Loading products...</p>ïŒã¯ããã©ã³ãžã·ã§ã³äžã«ãŠãŒã¶ãŒã«ãã£ãŒãããã¯ãæäŸããŸãããã®ã¢ãããŒãã¯ãããŒã¿å¯èŠåããã·ã¥ããŒãã®ããã«ããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«åºã¥ããŠããŒã¿ãåååŸãŸãã¯ååŠçããå¿
èŠãããããããã€ã³ã¿ãŒãã§ãŒã¹ã«é©çšã§ããŸãã
3. ãªããã£ãã¹ãã£ãã¯æŽæ°ã®å®è£
ãªããã£ãã¹ãã£ãã¯æŽæ°ãšã¯ããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ãæåãããšä»®å®ããŠUIãå³åº§ã«æŽæ°ããåŸã§ãµãŒããŒãšèª¿æŽããææ³ã§ããããã«ãããç¹ã«ããŒã¿ã®ä¿åãæçš¿ãžã®ããããïŒããªã©ã®ã¢ã¯ã·ã§ã³ã«ãããŠãã¢ããªã±ãŒã·ã§ã³ãéåžžã«å¿çæ§ãé«ããšæããããããã«ãªããŸããexperimental_useTransitionã䜿çšããŠããªããã£ãã¹ãã£ãã¯æŽæ°ãšãµãŒããŒã®ç¢ºèªãšã®éã®ãã©ã³ãžã·ã§ã³ã管çã§ããŸãïŒ
import { experimental_useTransition } from 'react';
function LikeButton({ postId }) {
const [isPending, startTransition] = experimental_useTransition();
const [isLiked, setIsLiked] = React.useState(false);
const handleLikeClick = () => {
startTransition(() => {
// Optimistically update the UI
setIsLiked(!isLiked);
// Simulate a network request to update the like status on the server
setTimeout(() => {
// Replace this with your actual API call
// If the server update fails, you would revert the UI change here (e.g., setIsLiked(isLiked))
}, 1000);
});
};
return (
<button onClick={handleLikeClick} disabled={isPending}>
{isPending ? 'Liking...' : (isLiked ? 'Unlike' : 'Like')}
</button>
);
}
ãã®äŸã§ã¯ããŠãŒã¶ãŒãããããããã¿ã³ãã¯ãªãã¯ãããšãUIã¯å³åº§ã«ããããããåæ ããããã«æŽæ°ãããŸãããã®åŸãstartTransition颿°ããµãŒããŒã«ããããããéä¿¡ããããžãã¯ãã©ããããŸãããµãŒããŒãªã¯ãšã¹ããé²è¡äžã§ãã£ãŠããUIã¯å¿çæ§ãä¿ã¡ããã¿ã³ã«ã¯ãLiking...ããšããã¡ãã»ãŒãžã衚瀺ãããŸããããã«ãããããéããããé
åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçãŸããŸããããã¯ãã³ã¡ã³ãã®æçš¿ããã©ãŒã ããŒã¿ã®ä¿åãªã©ãéåæã®ãµãŒããŒéä¿¡ã䌎ãä»ã®ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«ãå¿çšã§ããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšèæ ®äºé
- è³¢æãªäœ¿çšïŒ
experimental_useTransitionã䜿ããããªãã§ãã ãããã¡ã€ã³ã¹ã¬ããããããã¯ããããªãéåææäœãè€éãªUIæŽæ°ãå«ããã©ã³ãžã·ã§ã³ã«æãæçã§ããã³ãŒããé床ã«è€éã«ããªãããã«ãè³¢æã«é©çšããŠãã ããã - æç¢ºãªãã£ãŒãããã¯ã®æäŸïŒ ãã©ã³ãžã·ã§ã³äžã¯åžžã«ãŠãŒã¶ãŒã«èŠèŠçãªãã£ãŒãããã¯ãæäŸããŠãã ãããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãããã°ã¬ã¹ããŒããã®ä»ã®èŠèŠçãªæãããã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ãåäœããŠããããšããŠãŒã¶ãŒã«ç¥ãããŸããããã«ããä¿¡é Œãæ§ç¯ãããé ãã®èªèãæžå°ããŸãã
- ãšã©ãŒåŠçïŒ ãã©ã³ãžã·ã§ã³å ã®éåææäœãæ±ãéã¯ãå ç¢ãªãšã©ãŒåŠçãå®è£ ããŠãã ãããæäœã倱æããå ŽåïŒäŸïŒãããã¯ãŒã¯ãªã¯ãšã¹ãã®ã¿ã€ã ã¢ãŠãïŒããªããã£ãã¹ãã£ãã¯ãªUIæŽæ°ãå ã«æ»ãããé©åãªãšã©ãŒã¡ãã»ãŒãžããŠãŒã¶ãŒã«è¡šç€ºããããã«ããŠãã ãããããã¯ä¿¡é Œæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ãšã£ãŠéèŠã§ãã
- ã³ã³ããã¹ãã®èæ
®ïŒ
experimental_useTransitionã䜿çšããŠããã³ã³ããã¹ããçè§£ããŠãã ãããäŸãã°ãè€æ°ã®åææäœãããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãæå³ããªãå¯äœçšãé¿ããããã«ãã©ã³ãžã·ã§ã³ã®ã¹ã³ãŒããæ éã«ç®¡çããå¿ èŠããããããããŸãããReactã®ããã¥ã¡ã³ããæ³šææ·±ã確èªããŠãã ããã - ããã©ãŒãã³ã¹ã¢ãã¿ãªã³ã°ïŒ ãã©ã³ãžã·ã§ã³ã®ããã©ãŒãã³ã¹ãç£èŠããŠãã ããããã©ãŠã¶ã®éçºè ããŒã«ïŒChrome DevToolsãªã©ïŒã䜿çšããŠãããã©ãŒãã³ã¹ã®ããã«ããã¯ãæé©åã®äœå°ãããé åãç¹å®ããŸãããã©ã³ãžã·ã§ã³ãå®äºãããŸã§ã«ãããæéãæž¬å®ããŸããããã¯å®è£ ãæŽç·Žãããã®ã«åœ¹ç«ã¡ãŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒ ãã©ã³ãžã·ã§ã³ããé害ãæã€ãŠãŒã¶ãŒãå«ããã¹ãŠã®ãŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ãããå®å šã«å æ¬çãªãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããããã«ãããŒããŒãããã²ãŒã·ã§ã³ãã¹ã¯ãªãŒã³ãªãŒããŒã®ãµããŒããªã©ãã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ããããã®ä»£æ¿æ¹æ³ãæäŸããŠãã ããã
- åæå®è¡æ§ãšåæå®è¡å¶éïŒ ãã©ã³ãžã·ã§ã³ã¯åæã«å®è¡ãããå¯èœæ§ãããããšã«æ³šæããŠãã ãããããåªå 床ã®é«ãæŽæ°ãå ¥ã£ãŠããå ŽåãReactã¯ãã©ã³ãžã·ã§ã³ãäžæããããšããããŸããããã¯å¿çæ§ã«ãšã£ãŠæçã§ããããã©ã³ãžã·ã§ã³ãäºãã«äŸåããŠããå Žåã¯ãæœåšçãªç«¶åç¶æ ãèæ ®ããå¿ èŠããããããããŸããã
- ããã¥ã¡ã³ããšã³ã¡ã³ãïŒ
experimental_useTransitionã®äœ¿çšæ³ãæç¢ºã«ææžåããŠãã ãããããã䜿çšããçç±ããé¢é£ããèæ ®äºé ããã¬ãŒããªãã説æããŸããè¯ãã³ã¡ã³ãã¯ãç¹ã«å€§èŠæš¡ãŸãã¯è€éãªãããžã§ã¯ãã§ãã³ãŒããçè§£ãããããä¿å®ããããããŸãã
ã°ããŒãã«ãªèŠç¹ïŒæåãè¶ ãããã©ã³ãžã·ã§ã³ç®¡ç
åªãããã©ã³ãžã·ã§ã³ç®¡çã®ååã¯ãå Žæãæåã«é¢ä¿ãªãæ®éçã«é©çšãããŸãããã ããå ·äœçãªå®è£ ãèŠèŠçãªæãããã¯ãå°åã®å¥œã¿ã«åãããŠèª¿æŽããå¿ èŠããããããããŸãããã°ããŒãã«ãªèŠç¹ããã©ã³ãžã·ã§ã³ãã¶ã€ã³ã«ã©ã®ããã«åœ±é¿ãäžãããã以äžã«ç€ºããŸãïŒ
- ããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒ ãã©ã³ãžã·ã§ã³å ã®ãã¹ãŠã®ããã¹ãããŠãŒã¶ãŒã®åªå èšèªã«ç¿»èš³ãããŠããããšã確èªããŠãã ãããã¢ãã¡ãŒã·ã§ã³ããã©ã³ãžã·ã§ã³ããã¶ã€ã³ããéã«ã¯ãèšèªã®æ¹åæ§ïŒäŸïŒå·Šããå³ vs. å³ããå·ŠïŒã®éããèæ ®ããŠãã ããã
- æåçæåæ§ïŒ ç¹å®ã®æåã§äžå¿«ãŸãã¯äžé©åãšèŠãªãããå¯èœæ§ã®ããèŠèŠèŠçŽ ãã¢ãã¡ãŒã·ã§ã³ã®äœ¿çšãé¿ããŠãã ãããã¿ãŒã²ãããªãŒãã£ãšã³ã¹ã®æåçèŠç¯ã調æ»ããããã«å¿ããŠãã¶ã€ã³ã調æŽããŠãã ãããã«ã©ãŒãã¬ãããã¢ãã¡ãŒã·ã§ã³ã¹ã¿ã€ã«ãç»åã¯æåçæåæ§ãå°éããå¿ èŠããããŸãã
- ãããã¯ãŒã¯ç¶æ³ïŒ ç°ãªãå°åã®å žåçãªãããã¯ãŒã¯é床ãèæ ®ããŠãã ãããã€ã³ã¿ãŒãããæ¥ç¶ãé ãå°åã§ãã¹ã ãŒãºãªãã©ã³ãžã·ã§ã³ãä¿èšŒããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããŠãã ããããããã¯ãŒã¯ã¹ããããªã³ã°ããŒã«ã䜿çšããŠãããŸããŸãªãããã¯ãŒã¯ç¶æ³ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŠãã ããã
- ã¢ãã€ã«ãã¡ãŒã¹ãã¢ãããŒãïŒ ã¢ãã€ã«ããã€ã¹ã念é ã«çœ®ããŠãã©ã³ãžã·ã§ã³ããã¶ã€ã³ããŠãã ãããã¿ããã€ã³ã¿ã©ã¯ã·ã§ã³çšã«ã¢ããªã±ãŒã·ã§ã³ãæé©åãããã©ã³ãžã·ã§ã³ãå¿çæ§ãé«ããããŸããŸãªç»é¢ãµã€ãºã§ããŸãæ©èœããããšã確èªããŠãã ãããã¢ãã€ã«ããã€ã¹ã®å©çšã¯äžççã«æ¥éã«å¢å ããŠããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒ ãã©ã³ãžã·ã§ã³ãã¢ã¯ã»ã·ããªãã£ã«æªåœ±é¿ãäžããªãããã«ããŠãã ãããå®å šã«å æ¬çãªãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããããã«ãããŒããŒãããã²ãŒã·ã§ã³ãã¹ã¯ãªãŒã³ãªãŒããŒã®ãµããŒããªã©ãã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ããããã®ä»£æ¿æ¹æ³ãæäŸããŠãã ãããã¢ãŒã·ã§ã³ã®äœæžãªãã·ã§ã³ãªã©ããŠãŒã¶ãŒã®å¥œã¿ãèæ ®ããŠãã ããã
- ãŠãŒã¶ãŒãã¹ãïŒ å€æ§ãªæåçèæ¯ãæã€å人ãšãŠãŒã¶ãŒãã¹ãã宿œãããã©ã³ãžã·ã§ã³ã«é¢ãããã£ãŒãããã¯ãåéããŠãã ãããããã«ããã察åŠãå¿ èŠãªäœ¿ããããã®åé¡ãæåçæåæ§ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãããŠãŒã¶ãŒã®ãã£ãŒãããã¯ã¯ãã°ããŒãã«ã§æåãã補åã«ãšã£ãŠäžå¯æ¬ ã§ãã
äŸãã°ãæ¥æ¬ã®ãŠãŒã¶ãŒãã¿ãŒã²ããã«ããæ è¡äºçŽãµã€ãã§ã¯ãæ¥æ¬ã®ãã¶ã€ã³ååãåæ ããŠãç¹çްã§ãšã¬ã¬ã³ããªã¢ãã¡ãŒã·ã§ã³ããã©ã³ãžã·ã§ã³ãåªå ãããããããŸãããéã«ããã©ãžã«ã®ãŠãŒã¶ãŒãã¿ãŒã²ããã«ããåæ§ã®ãµã€ãã§ã¯ããã©ãžã«ã®æåçå奜ã«åããããããé®®ãããªè²ãšãã€ãããã¯ãªã¢ãã¡ãŒã·ã§ã³ã䜿çšãããããããŸããããããã¯äŸç€ºã§ããã培åºçãªãŠãŒã¶ãŒãªãµãŒããšçŸå°ã®æèã®èæ ®ãéµãšãªããŸãã
ããã©ãŒãã³ã¹æé©åã®è©³çް
å¿çæ§ã®çŽæ¥çãªå©ç¹ãè¶
ããŠãexperimental_useTransitionã®äœ¿çšãå«ã广çãªãã©ã³ãžã·ã§ã³ç®¡çã¯ãã¢ããªã±ãŒã·ã§ã³å
šäœã®ããã©ãŒãã³ã¹ã«å€§ããè²¢ç®ããŸãã以äžã«ãã®æ¹æ³ã瀺ããŸãïŒ
- ããããã³ã°æéã®åæžïŒ ReactãæŽæ°ã®åªå é äœãä»ããããšãèš±å¯ããããšã§ããã©ã³ãžã·ã§ã³ã¯ã¡ã€ã³ã¹ã¬ããããããã¯ãããæéãæå°éã«æããããšãã§ããŸããããã¯ãç¹ã«ããŒã¿ååŸãè€éãªUIã¬ã³ããªã³ã°ãªã©ã®èšç®éçŽçãªæäœäžã«ãã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãç¶æããããã«éèŠã§ãã
- å¹ççãªã¬ã³ããªã³ã°ïŒ
experimental_useTransitionã䜿çšããããšã§ãUIã®äžèŠãªåã¬ã³ããªã³ã°ãé¿ããããšãã§ããŸããäŸãã°ãå€§èŠæš¡ãªããŒã¿ã»ããããã£ã«ã¿ãªã³ã°ããå Žåããã£ã«ã¿ãªã³ã°ãããã¯ã°ã©ãŠã³ãã§å®è¡ãããŠããéã«è¡šç€ºããŒã¿ãæŽæ°ãããã©ã³ãžã·ã§ã³ãããªã¬ãŒã§ããŸããããã«ãããäžéçãªãã£ã«ã¿å€æŽããšã«ã³ã³ããŒãã³ãããªãŒå šäœãåã¬ã³ããªã³ã°ããã®ãé¿ããããã©ãŒãã³ã¹ãåäžãããŸãã - ç¥èŠããã©ãŒãã³ã¹ã®åäžïŒ æäœã®å®éã®èªã¿èŸŒã¿æéãåãã§ãã£ãŠãããã©ã³ãžã·ã§ã³ã䜿çšããããšã§ã¢ããªã±ãŒã·ã§ã³ãããéãæããããããã«ãªããŸããèŠèŠçãªãã£ãŒãããã¯ãæäŸããUIã®å¿çæ§ãç¶æããããšã§ããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ããã髿§èœã§ãããšèªèããŸãã
- ãžã£ã³ã¯ã®åæžïŒ ãžã£ã³ã¯ãšã¯ãUIã®èŠèŠçãªã«ã¯ã€ãããã¬ãŒã èœã¡ãæããŸãããã©ã³ãžã·ã§ã³ã¯ãéèŠãªUIæŽæ°ãéèŠåºŠã®äœããã®ã«ãã£ãŠé å»¶ãããªãããã«ããããšã§ããžã£ã³ã¯ã軜æžããã®ã«åœ¹ç«ã¡ãŸããããã¯åªå é äœä»ããããã¬ã³ããªã³ã°ã«ãã£ãŠéæãããŸãã
- ãã³ãã«ãµã€ãºã®æé©åïŒ
experimental_useTransitionèªäœã¯ãã³ãã«ãµã€ãºã«çŽæ¥åœ±é¿ããŸãããããã®äœ¿çšã¯éæ¥çã«å°ããªãã³ãã«ã«è²¢ç®ãããã©ã¯ãã£ã¹ã奚å±ããŸããäŸãã°ãUIæŽæ°ãããŒã¿ååŸæäœããåé¢ããããšã§ãåã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããã«å¿ èŠãªã³ãŒãéãæå°éã«æãããã³ãã«ãã³ã³ãã¯ãã«ä¿ã€ããšãã§ããŸãã - é
å»¶èªã¿èŸŒã¿ãšã®çµ±åïŒ
experimental_useTransitionãã³ãŒãåå²ãé å»¶èªã¿èŸŒã¿ãªã©ã®æè¡ãšçµã¿åãããããšã§ãããã©ãŒãã³ã¹ãããã«æé©åããŸããé å»¶èªã¿èŸŒã¿ã¯ãéèŠã§ãªãã³ã³ããŒãã³ãã®èªã¿èŸŒã¿ãå¿ èŠã«ãªããŸã§é ãããããšãã§ããåæèªã¿èŸŒã¿æéãççž®ãããã©ã³ãžã·ã§ã³äžã®å¿çæ§ãåäžãããŸãã
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
ã¢ã¯ã»ã·ããªãã£ã¯ããŠãŒã¶ãŒãã¬ã³ããªãŒã§å æ¬çãªWebã¢ããªã±ãŒã·ã§ã³ãäœæããäžã§éèŠãªåŽé¢ã§ãããã©ã³ãžã·ã§ã³ãå®è£ ããéã¯ãåžžã«ã¢ã¯ã»ã·ããªãã£ã念é ã«çœ®ããŠãã ããã以äžã«ããã€ãã®éèŠãªèæ ®äºé ã瀺ããŸãïŒ
- ä»£æ¿ææ®µã®æäŸïŒ ã¢ãã¡ãŒã·ã§ã³ããã©ã³ãžã·ã§ã³ãèŠãããªããŠãŒã¶ãŒïŒäŸïŒååºé害ãæã€ãŠãŒã¶ãŒïŒã®ããã«ãããããç¡å¹ã«ããæ¹æ³ãæäŸããŠãã ããããã¢ãŒã·ã§ã³ã®äœæžãèšå®ãæäŸããã¢ãã¡ãŒã·ã§ã³ããã©ã³ãžã·ã§ã³ãç¡å¹ã«ããããšã§ãããã¢ã¯ã»ã¹ããããäœéšãæäŸããŸãã
- ããŒããŒãããã²ãŒã·ã§ã³ïŒ ãã©ã³ãžã·ã§ã³ã«é¢ãããã¹ãŠã®èŠçŽ ãããŒããŒãããã²ãŒã·ã§ã³ã§ã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ãããããã¯ãããŠã¹ãä»ã®ãã€ã³ãã£ã³ã°ããã€ã¹ã䜿çšã§ããªããŠãŒã¶ãŒã«ãšã£ãŠäžå¯æ¬ ã§ãããã©ã³ãžã·ã§ã³äžã«ãã©ãŒã«ã¹ãæ£ãã管çãããŠããããšã確èªããŠãã ããã
- ã¹ã¯ãªãŒã³ãªãŒããŒãšã®äºææ§ïŒ ã¹ã¯ãªãŒã³ãªãŒããŒããã©ã³ãžã·ã§ã³äžã«èµ·ãã£ãŠããå€åãæ£ããã¢ããŠã³ã¹ããããšã確èªããŠãã ãããé©åãªARIA屿§ïŒäŸïŒ
aria-liveïŒã䜿çšããŠãã¹ã¯ãªãŒã³ãªãŒããŒã®ãŠãŒã¶ãŒã«å€åãäŒããŸããæ å ±ãé©åã«æŽæ°ãããããšã確èªããŠãã ããã - æç¢ºãªãã£ãŒãããã¯ïŒ ãã©ã³ãžã·ã§ã³äžã«äœãèµ·ãã£ãŠãããã説æããããã«ãæç¢ºã§ç°¡æœãªèšèã䜿çšããŠãã ããããŠãŒã¶ãŒãæ··ä¹±ãããå¯èœæ§ã®ããå°éçšèªãæè¡çšèªãé¿ããŠãã ãããããã¹ãã©ãã«ãä»ã®èŠèŠçãªæãããã䜿çšããŠãã ããã
- ååãªã³ã³ãã©ã¹ãïŒ ãã©ã³ãžã·ã§ã³ã§äœ¿çšãããè²ããç¹ã«ããã¹ããã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ã«ã€ããŠãèæ¯ã«å¯ŸããŠååãªã³ã³ãã©ã¹ããæã£ãŠããããšã確èªããŠãã ãããè²ã®ã³ã³ãã©ã¹ãã«é¢ããWCAGã¬ã€ãã©ã€ã³ã«åŸã£ãŠãã ãããã³ã³ãã©ã¹ãã¯èªã¿ããããåäžãããŸãã
- ãŠãŒã¶ãŒã³ã³ãããŒã«ïŒ ãŠãŒã¶ãŒããã©ã³ãžã·ã§ã³ã®æç¶æéãé床ãå¶åŸ¡ã§ããããã«ããŠãã ãããããã¯ãèªç¥é害ããã®ä»ã®é害ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠæçãªå ŽåããããŸãããã©ã³ãžã·ã§ã³é床ã調æŽããèšå®ãæäŸããŠãã ããã
- æ¯æŽæè¡ã§ã®ãã¹ãïŒ ã¹ã¯ãªãŒã³ãªãŒããŒãé³å£°èªèãœãããŠã§ã¢ãããŒããŒããšãã¥ã¬ãŒã¿ãªã©ãããŸããŸãªæ¯æŽæè¡ã§ãã©ã³ãžã·ã§ã³ããã¹ããããã¹ãŠã®ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ããããã¹ãã¯æ©èœæ§ãä¿èšŒããŸãã
ã¢ã¯ã»ã·ããªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãå®è£ ããããšã¯ãèœåã«é¢ä¿ãªãããã¹ãŠã®äººã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸããèšèšãšéçºã®ããã»ã¹å šäœã§ã¢ã¯ã»ã·ããªãã£ãèæ ®ããããšã«ãããããå æ¬çã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªWebã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
é«åºŠãªãŠãŒã¹ã±ãŒã¹ãšãã¯ããã¯
- ã³ã³ã«ã¬ã³ã·ãŒãšã®çµã¿åããïŒ Reactã®å®éšçãªæ©èœïŒã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ãå«ãïŒã¯ã
experimental_useTransitionãšã·ãŒã ã¬ã¹ã«é£æºããŸããããã«ãããReactãç·æ¥åºŠã«åºã¥ããŠã¬ã³ããªã³ã°ã¿ã¹ã¯ãäžæããåªå é äœãä»ããããšãã§ãããããããå¿çæ§ãé«ãå¹ççãªæŽæ°ãå¯èœã«ãªããŸãã - ãã©ã³ãžã·ã§ã³ã®ã°ã«ãŒãåïŒ è€æ°ã®åæãã©ã³ãžã·ã§ã³ãããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã©ã³ãžã·ã§ã³ã°ã«ãŒããã©ã€ãã©ãªã䜿çšããŠããã©ã³ãžã·ã§ã³ã®é åºãšåæã管çããããšãæ€èšããŠãã ããããããã®ã©ã€ãã©ãªã¯ãç»é¢ã«åæã«å ¥éå Žããè€æ°ã®èŠçŽ ãã¢ãã¡ãŒã·ã§ã³åãããªã©ãããæŽç·Žããã广ãäœæããããã«ãã©ã³ãžã·ã§ã³ã調æŽããã®ã«åœ¹ç«ã¡ãŸãã
- ãããŠã³ã¹ãšã¹ããããªã³ã°ïŒ ãã©ã³ãžã·ã§ã³ãããªã¬ãŒãããŠãŒã¶ãŒå ¥åïŒäŸïŒæ€çŽ¢å ¥åïŒãæ±ãå ŽåãæŽæ°ã®é »åºŠãå¶éããããã«ãããŠã³ã¹ãŸãã¯ã¹ããããªã³ã°æè¡ã®äœ¿çšãæ€èšããŠãã ãããããã¯ãäžèŠãªåã¬ã³ããªã³ã°ãé²ããããã©ãŒãã³ã¹ãåäžãããã®ã«åœ¹ç«ã¡ãŸãããããã®æè¡ã䜿çšããŠããã©ãŒãã³ã¹ã®åé¡ãé²ããŸãã
- ãã©ã³ãžã·ã§ã³çšã®ã«ã¹ã¿ã ããã¯ïŒ åå©çšæ§ã®ããã«ããã©ã³ãžã·ã§ã³ããžãã¯ãã«ã¹ã¿ã ããã¯ã«ã«ãã»ã«åããŸããããã«ãããã³ãŒãã®æ§æãä¿é²ãããã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®ã³ã³ããŒãã³ãã«ããã£ãŠãã©ã³ãžã·ã§ã³ç®¡çãé©çšãããããªããŸããã«ãã»ã«åã¯ä¿å®æ§ãä¿é²ããŸãã
- ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒSSRïŒïŒ SSRã䜿çšããå Žåãåæã¬ã³ããªã³ã°äžã«ãã©ã³ãžã·ã§ã³ãã©ã®ããã«ç®¡çããããæ éã«æ€èšããŠãã ãããåæã®ãµãŒããŒã¬ã³ããªã³ã°ãããã³ã³ãã³ããè¿ éã«è¡šç€ºãããã¯ã©ã€ã¢ã³ããµã€ãã®JavaScriptãåŒãç¶ãã åŸã«ãã©ã³ãžã·ã§ã³ãã¹ã ãŒãºã«é©çšãããããã«ããŠãã ãããSSRã¯ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãã
- ã©ã€ãã©ãªãšã®çµ±åïŒ
experimental_useTransitionãFramer MotionãReact Springãªã©ã®ã¢ãã¡ãŒã·ã§ã³ã©ã€ãã©ãªãšçµ±åããŠãããé«åºŠã§èŠèŠçã«é åçãªãã©ã³ãžã·ã§ã³ãäœæããŸããããã¯è€éãªã¢ãã¡ãŒã·ã§ã³ãäœæããã®ã«åœ¹ç«ã¡ãŸãã
çµè«
experimental_useTransitionã¯ãReactã¢ããªã±ãŒã·ã§ã³ã§ãã©ã³ãžã·ã§ã³ã管çããå
šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã®åŒ·åãªããŒã«ã§ãããã®ç®çãçè§£ãããã¹ããã©ã¯ãã£ã¹ãé©çšããã°ããŒãã«ãªèŠç¹ãèæ
®ããããšã§ãäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠããéããããå¿çæ§ãé«ããããé
åçãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããReactãé²åãç¶ããäžã§ããããã®å®éšçãªæ©èœã«ã€ããŠåžžã«æ
å ±ãåŸãŠããããšã¯ãçŸä»£çã§é«æ§èœãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãããã©ã³ãžã·ã§ã³ã®åãæŽ»çšããããªãã®Webã¢ããªã±ãŒã·ã§ã³ãèŒãããŸãããïŒ
ãã©ã³ãžã·ã§ã³ãå®è£ ããéã¯ãåžžã«ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšã¢ã¯ã»ã·ããªãã£ãåªå ããããšãå¿ããªãã§ãã ããããã©ã³ãžã·ã§ã³ã®æé©åã«æè³ããåªåã¯ããŠãŒã¶ãŒæºè¶³åºŠãšãšã³ã²ãŒãžã¡ã³ãã®åäžãšãã圢ã§å ±ãããã§ãããã