Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®åãè§£ãæŸã¡ãã¬ã³ããªã³ã°ã®åªå é äœãæé©åãè€éãªã³ã³ããŒãã³ããããŒã¿æŽæ°ããã£ãŠããæµåçã§å¿çæ§ã®é«ãUIãå®çŸããŸãã
Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ïŒåè¶ãããŠãŒã¶ãŒäœéšã®ããã®ã¬ã³ããªã³ã°åªå 床ãã¹ã¿ãŒè¡
å€åã®æ¿ãããŠã§ãéçºã®äžçã§ã¯ãå¿çæ§ãé«ãé åçãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ïŒUIïŒãäœæããããšãæãéèŠã§ãããŠãŒã¶ãŒã¯ãè€éãªã¢ããªã±ãŒã·ã§ã³ãæ±ãå Žåã§ããã·ãŒã ã¬ã¹ãªã€ã³ã¿ã©ã¯ã·ã§ã³ãšå³æã®ãã£ãŒãããã¯ãæåŸ ããŸããUIæ§ç¯ã§äººæ°ã®JavaScriptã©ã€ãã©ãªã§ããReactã¯ããããéæããããã®åŒ·åãªããŒã«ãæäŸããŠããããã®äžã§ãæã广çãªãã®ã®äžã€ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ã§ãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãReactã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®æŠå¿µãæ¢ãããã®å©ç¹ãå®è£ ããã¹ããã©ã¯ãã£ã¹ãæ·±ãæãäžããŠãããŸããããã«ãããã¬ã³ããªã³ã°ã¿ã¹ã¯ã®åªå é äœä»ããå¯èœã«ãªããéèŠãªæŽæ°ãã€ã³ã¿ã©ã¯ã·ã§ã³ãè¿ éã«åŠçãããããã¹ã ãŒãºã§æ¥œãããŠãŒã¶ãŒäœéšã«ã€ãªããæ¹æ³ãè§£ãæãããŸãã
Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ãšã¯äœãïŒ
Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãReactã®ã³ã³ã«ã¬ã³ãã¢ãŒãã®äžéšãšããŠå°å ¥ãããæ©èœã§ããããã«ãããReactã¯ã¬ã³ããªã³ã°äœæ¥ãäžæå¯èœãªå°ããªåäœã«åå²ã§ããŸããåäžã®é·ãã¬ã³ããªã³ã°ã¿ã¹ã¯ã§ã¡ã€ã³ã¹ã¬ããããããã¯ãã代ããã«ãReactã¯äžæåæ¢ãããã©ãŠã¶ã«åŠçãè²ã£ãŠãŠãŒã¶ãŒå ¥åãä»ã®ã¿ã¹ã¯ãåŠçããããã®åŸäžæãããšããããã¬ã³ããªã³ã°ãåéã§ããŸããããã¯ãã·ã§ããè€éãªæçãæºåãããããªãã®ã ãšèããŠãã ãããéèãå»ã¿ïŒUIã®äžéšãã¬ã³ããªã³ã°ãïŒã次ã«ãœãŒã¹ãããæ··ãïŒãŠãŒã¶ãŒã®æäœãåŠçãïŒããããŠåã³éèãå»ãäœæ¥ã«æ»ãã®ã§ããããã«ãããç¹ã«å€§èŠæš¡ãªæŽæ°ãè€éãªã³ã³ããŒãã³ãããªãŒãããå Žåã«ããŠãŒã¶ãŒãããªãŒãºãã©ã°ãçµéšããã®ãé²ããŸãã
æŽå²çã«ãReactã®ã¬ã³ããªã³ã°ã¯åæçã§ãããã€ãŸããã³ã³ããŒãã³ããæŽæ°ãããå¿ èŠãããå Žåãã¬ã³ããªã³ã°ããã»ã¹å šäœãå®äºãããŸã§ã¡ã€ã³ã¹ã¬ããããããã¯ããŠããŸãããããã¯ãç¹ã«è€éãªUIãé »ç¹ãªããŒã¿å€æŽãããã¢ããªã±ãŒã·ã§ã³ã§ãé¡èãªé å»¶ãåŒãèµ·ããå¯èœæ§ããããŸãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãReactãã¬ã³ããªã³ã°äœæ¥ãšä»ã®ã¿ã¹ã¯ã亀äºã«å®è¡ã§ããããã«ããããšã§ããã®åé¡ã«å¯ŸåŠããŸãã
äžå¿çãªæŠå¿µïŒFiberãšäžŠè¡åŠç
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ãçè§£ããã«ã¯ã2ã€ã®äž»èŠãªæŠå¿µã«ç²ŸéããŠããå¿ èŠããããŸãïŒ
- FiberïŒ Fiberã¯ã³ã³ããŒãã³ãã®Reactå éšè¡šçŸã§ããããã¯ReactãåŠçã§ããäœæ¥ã®åäœã衚ããŸããè¿œå æ å ±ãæã€ä»®æ³DOMããŒãã®ãããªãã®ã ãšèããŠãã ãããããã«ãããReactã¯ã¬ã³ããªã³ã°ã®é²æã远跡ã§ããŸãã
- 䞊è¡åŠçïŒConcurrencyïŒïŒ Reactã®æèã«ããã䞊è¡åŠçãšã¯ãè€æ°ã®ã¿ã¹ã¯ãåæã«å®è¡ããŠãããã®ããã«èŠããèœåãæããŸããReactã¯UIã®ç°ãªãéšåã«åæã«åãçµãããšãã§ããæŽæ°ããã®éèŠæ§ã«åºã¥ããŠåªå é äœä»ãããŸãã
Fiberã¯ãReactãã¬ã³ããªã³ã°ã¿ã¹ã¯ãäžæåæ¢ããã³åéã§ããããã«ããããšã§ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ãå¯èœã«ããŸãã䞊è¡åŠçã«ãããReactã¯ç°ãªãã¿ã¹ã¯ã«åªå é äœãä»ããæãéèŠãªæŽæ°ãæåã«åŠçãããããã«ããŸãã
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®å©ç¹
Reactã¢ããªã±ãŒã·ã§ã³ã«ã¿ã€ã ã¹ã©ã€ã·ã³ã°ãå®è£ ãããšãããã€ãã®å€§ããªå©ç¹ããããŸãïŒ
- å¿çæ§ã®åäžïŒ ã¬ã³ããªã³ã°ãå°ããªãã£ã³ã¯ã«åå²ããããšã§ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ã¡ã€ã³ã¹ã¬ããããããã¯ãããã®ãé²ããããå¿çæ§ã®é«ãUIã«ã€ãªãããŸãããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã¯ãããããããšæããããã¢ãã¡ãŒã·ã§ã³ã¯ããã¹ã ãŒãºã«è¡šç€ºãããŸãã
- ãŠãŒã¶ãŒäœéšã®åäžïŒ å¿çæ§ã®é«ãUIã¯ãããè¯ããŠãŒã¶ãŒäœéšã«çŽæ¥ã€ãªãããŸãããŠãŒã¶ãŒã¯ã€ã©ã€ã©ããé å»¶ãããªãŒãºãçµéšããå¯èœæ§ãäœããªããã¢ããªã±ãŒã·ã§ã³ã®äœ¿çšãããæ¥œãããªããŸããäŸãã°ããŠãŒã¶ãŒã倧ããªããã¹ããšãªã¢ã«å ¥åããŠããå Žé¢ãæ³åããŠã¿ãŠãã ãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ããªããã°ãåããŒã¹ãããŒã¯ãUIãäžæçã«ããªãŒãºãããåã¬ã³ããªã³ã°ãåŒãèµ·ããå¯èœæ§ããããŸããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã䜿ãã°ãåã¬ã³ããªã³ã°ã¯ããå°ããªãã£ã³ã¯ã«åå²ããããŠãŒã¶ãŒã¯äžæããããšãªãå ¥åãç¶ããããšãã§ããŸãã
- æŽæ°ã®åªå é äœä»ãïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã«ãããç°ãªãçš®é¡ã®æŽæ°ã«åªå é äœãä»ããããšãã§ããŸããäŸãã°ãããã¯ã°ã©ãŠã³ãã®ããŒã¿ãã§ããããããŠãŒã¶ãŒå ¥åãåªå ãããUIããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«åžžã«å¿çã§ããããã«ããããšãã§ããŸãã
- äœã¹ããã¯ããã€ã¹ã§ã®ããã©ãŒãã³ã¹åäžïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãåŠçèœåãéãããããã€ã¹ã§ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããã¬ã³ããªã³ã°äœæ¥ãæéçã«åæ£ãããããšã§ãCPUãžã®è² è·ã軜æžããããã€ã¹ãéè² è·ã«ãªãã®ãé²ããŸããçºå±éäžåœã®å€ãã¹ããŒããã©ã³ã§ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããŠãããŠãŒã¶ãŒãèããŠã¿ãŠãã ãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ã䜿ããäœéšãšäœ¿ããªãäœéšã®å·®ãçãããšããããŸãã
ã³ã³ã«ã¬ã³ãã¢ãŒãã«ããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®å®è£
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã掻çšããã«ã¯ãReactã¢ããªã±ãŒã·ã§ã³ã§ã³ã³ã«ã¬ã³ãã¢ãŒããæå¹ã«ããå¿ èŠããããŸããã³ã³ã«ã¬ã³ãã¢ãŒãã¯ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ããã®ä»ã®ããã©ãŒãã³ã¹æé©åã®å¯èœæ§ãæå€§éã«åŒãåºãReactã®æ°ããæ©èœçŸ€ã§ãã
ã³ã³ã«ã¬ã³ãã¢ãŒããæå¹ã«ããæ¹æ³ã¯æ¬¡ã®ãšããã§ãïŒ
1. ReactãšReactDOMã®æŽæ°
React 18以éã®ããŒãžã§ã³ã䜿çšããŠããããšã確èªããŠãã ãããpackage.json
ãã¡ã€ã«ã§äŸåé¢ä¿ãæŽæ°ããŸãïŒ
"dependencies": {
"react": "^18.0.0",
"react-dom": "^18.0.0"
}
ãã®åŸãnpm install
ãŸãã¯yarn install
ãå®è¡ããŠäŸåé¢ä¿ãæŽæ°ããŸãã
2. ã«ãŒãã¬ã³ããªã³ã°APIã®æŽæ°
index.js
ãŸãã¯index.tsx
ãã¡ã€ã«ãä¿®æ£ããŠãreact-dom/client
ããæ°ããcreateRoot
APIã䜿çšããŸãïŒ
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
);
éèŠãªå€æŽç¹ã¯ãReactDOM.render
ã®ä»£ããã«ReactDOM.createRoot
ã䜿çšããããšã§ããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ã«ã¬ã³ãã¢ãŒããæå¹ã«ãªããŸãã
ã¬ã³ããªã³ã°åªå 床ã管çãããã¯ããã¯
ã³ã³ã«ã¬ã³ãã¢ãŒããæå¹ã«ãããšãããŸããŸãªãã¯ããã¯ã䜿çšããŠã¬ã³ããªã³ã°ã®åªå 床ã管çããããã©ãŒãã³ã¹ãæé©åã§ããŸãã
1. useDeferredValue
useDeferredValue
ããã¯ã䜿çšãããšãéèŠã§ãªãUIéšåã®æŽæ°ãé
å»¶ãããããšãã§ããŸããããã¯ã衚瀺ããå¿
èŠãããå€§èŠæš¡ãªããŒã¿ã»ããããããããŠãŒã¶ãŒå
¥åãä»ã®ããéèŠãªæŽæ°ãåªå
ãããå Žåã«äŸ¿å©ã§ããããã¯å®è³ªçã«Reactã«ããã®å€ã¯æçµçã«æŽæ°ããŠã»ãããããããåŸ
ã€ããã«ã¡ã€ã³ã¹ã¬ããããããã¯ããªãã§ããšäŒããŸãã
ãªãŒããµãžã§ã¹ãæ©èœä»ãã®æ€çŽ¢ããŒãèããŠã¿ãŠãã ããããŠãŒã¶ãŒãå
¥åãããšãåè£ã衚瀺ãããŸãããããã®åè£ã¯`useDeferredValue`ã䜿çšããŠé
å»¶ãããããšãã§ãããããã¿ã€ãã³ã°äœéšã¯ã¹ã ãŒãºãªãŸãŸã§ãåè£ã¯ãããã«é
ããŠæŽæ°ãããŸãã
import React, { useState, useDeferredValue } from 'react';
function SearchBar() {
const [query, setQuery] = useState('');
const deferredQuery = useDeferredValue(query);
return (
setQuery(e.target.value)} />
);
}
function Suggestions({ query }) {
// This component will re-render with a deferred value of the query.
// The rendering of suggestions will be deprioritized.
const suggestions = getSuggestions(query); //Simulate getting suggestions based on the query
return (
{suggestions.map((suggestion) => (
- {suggestion}
))}
);
}
function getSuggestions(query) {
// Simulate fetching suggestions from an API or data source.
// In a real application, this would likely involve an API call.
const allSuggestions = ["apple", "banana", "cherry", "date", "elderberry"];
return allSuggestions.filter(suggestion => suggestion.startsWith(query));
}
export default SearchBar;
ãã®äŸã§ã¯ãSuggestions
ã³ã³ããŒãã³ãã¯é
å»¶ãããã¯ãšãªã®å€ã§åã¬ã³ããªã³ã°ãããŸããããã¯ãReactãåè£ã®ã¬ã³ããªã³ã°ãããå
¥åãã£ãŒã«ãã®æŽæ°ãšãŠãŒã¶ãŒå
¥åã®åŠçãåªå
ããããšãæå³ããããã¹ã ãŒãºãªã¿ã€ãã³ã°äœéšã«ã€ãªãããŸãã
2. useTransition
useTransition
ããã¯ã¯ãç¹å®ã®ç¶æ
æŽæ°ãç·æ¥ã§ãªããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããæ¹æ³ãæäŸããŸããããã¯ããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«å¿ããŠUIãæŽæ°ããããããã®æŽæ°ãã¡ã€ã³ã¹ã¬ããããããã¯ããªãããã«ãããå Žåã«äŸ¿å©ã§ããããã«ãããç¶æ
æŽæ°ããç·æ¥ãïŒã¿ã€ãã³ã°ãªã©ïŒãšããã©ã³ãžã·ã§ã³ãïŒæ°ããããŒãžãžã®ããã²ãŒã·ã§ã³ãªã©ïŒã«åé¡ããã®ã«åœ¹ç«ã¡ãŸãã
ããã·ã¥ããŒãã®ç°ãªãã»ã¯ã·ã§ã³éãç§»åããããšãæ³åããŠã¿ãŠãã ããã`useTransition`ã䜿çšãããšãããã²ãŒã·ã§ã³ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ã§ããæ°ããã»ã¯ã·ã§ã³ãèªã¿èŸŒãŸããŠã¬ã³ããªã³ã°ãããéãUIã®å¿çæ§ãç¶æã§ããŸãã
import React, { useState, useTransition } from 'react';
function Dashboard() {
const [isPending, startTransition] = useTransition();
const [section, setSection] = useState('home');
const navigateTo = (newSection) => {
startTransition(() => {
setSection(newSection);
});
};
return (
{isPending && Loading...
}
);
}
function Section({ content }) {
// Simulate loading content based on the section.
let sectionContent;
if (content === 'home') {
sectionContent = Welcome to the home page!
;
} else if (content === 'profile') {
sectionContent = This is your profile.
;
} else if (content === 'settings') {
sectionContent = Configure your settings here.
;
} else {
sectionContent = Section not found.
;
}
return {sectionContent};
}
export default Dashboard;
ãã®äŸã§ã¯ãnavigateTo
颿°ãstartTransition
ã䜿çšããŠç¶æ
æŽæ°ãç·æ¥ã§ãªããã®ãšããŠããŒã¯ããŠããŸããããã¯ãReactãæ°ããã»ã¯ã·ã§ã³ã®ã³ã³ãã³ãã§UIãæŽæ°ãããããããŠãŒã¶ãŒå
¥åã®åŠçãªã©ã®ä»ã®ã¿ã¹ã¯ãåªå
ããããšãæå³ããŸããisPending
ã®å€ã¯ãã©ã³ãžã·ã§ã³ããŸã é²è¡äžãã©ããã瀺ããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã衚瀺ã§ããŸãã
3. Suspense
Suspense
ã䜿çšãããšãäœããã®æ¡ä»¶ãæºãããããŸã§ïŒäŸïŒããŒã¿ãèªã¿èŸŒãŸãããŸã§ïŒãã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ããäžæåæ¢ãã§ããŸããããã¯äž»ã«ãããŒã¿ãã§ãããªã©ã®éåææäœãåŠçããããã«äœ¿çšãããŸããããã«ãããå¿çãåŸ
ã£ãŠããéã«UIãäžå®å
šãŸãã¯å£ããããŒã¿ã衚瀺ããã®ãé²ããŸãã
ãŠãŒã¶ãŒãããã¡ã€ã«æ å ±ã®èªã¿èŸŒã¿ãèããŠã¿ãŠãã ãããããŒã¿ãèªã¿èŸŒãŸããéã空çœãŸãã¯å£ãããããã¡ã€ã«ã衚瀺ãã代ããã«ã`Suspense`ã¯ããŒã¿ãæºåã§ãããŸã§ãã©ãŒã«ããã¯ïŒããŒãã£ã³ã°ã¹ãããŒãªã©ïŒã衚瀺ãããã®åŸã·ãŒã ã¬ã¹ã«å®å šãªãããã¡ã€ã«ã®è¡šç€ºã«ç§»è¡ã§ããŸãã
import React, { Suspense } from 'react';
// Simulate a component that suspends while loading data
const ProfileDetails = React.lazy(() => import('./ProfileDetails'));
function ProfilePage() {
return (
Loading profile...}>
);
}
// Assume ProfileDetails.js contains something like:
// export default function ProfileDetails() {
// const data = useFetchProfileData(); // Custom hook that fetches data
// return (
//
// {data.name}
// {data.bio}
//
// );
// }
export default ProfilePage;
ãã®äŸã§ã¯ãProfileDetails
ã³ã³ããŒãã³ããSuspense
ã³ã³ããŒãã³ãã§ã©ãããããŠããŸããfallback
ããããã£ã¯ãProfileDetails
ã³ã³ããŒãã³ããããŒã¿ãèªã¿èŸŒãã§ããéã«äœã衚瀺ããããæå®ããŸããããã«ãããUIãäžå®å
šãªããŒã¿ã衚瀺ããã®ãé²ããããã¹ã ãŒãºãªèªã¿èŸŒã¿äœéšãæäŸããŸãã
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®ãã¹ããã©ã¯ãã£ã¹
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã广çã«æŽ»çšããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããŠãã ããïŒ
- ããã«ããã¯ã®ç¹å®ïŒ ãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠãããã©ãŒãã³ã¹ã®ããã«ããã¯ãåŒãèµ·ãããŠããã³ã³ããŒãã³ããç¹å®ããŸãããŸããããã®ã³ã³ããŒãã³ãã®æé©åã«éäžããŠãã ãããReact DevTools Profilerã¯åªããéžæè¢ã§ãã
- æŽæ°ã®åªå é äœä»ãïŒ ã©ã®æŽæ°ãéèŠã§ãã©ããé å»¶å¯èœããæ éã«æ€èšããŸãããŠãŒã¶ãŒå ¥åããã®ä»ã®éèŠãªã€ã³ã¿ã©ã¯ã·ã§ã³ãåªå ããŠãã ããã
- äžèŠãªåã¬ã³ããªã³ã°ã®åé¿ïŒ ã³ã³ããŒãã³ããå¿
èŠãªå Žåã«ã®ã¿åã¬ã³ããªã³ã°ãããããã«ããŸãã
React.memo
ãuseCallback
ãªã©ã®ãã¯ããã¯ã䜿çšããŠãäžèŠãªåã¬ã³ããªã³ã°ãé²ããŸãã - 培åºçãªãã¹ãïŒ ããŸããŸãªããã€ã¹ããããã¯ãŒã¯æ¡ä»¶äžã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã广çã«ããã©ãŒãã³ã¹ãåäžãããŠããããšã確èªããŸãã
- ã©ã€ãã©ãªã®è³¢æãªäœ¿çšïŒ ã³ã³ã«ã¬ã³ãã¢ãŒããšäºææ§ããªãå¯èœæ§ã®ãããµãŒãããŒãã£ã©ã€ãã©ãªã«ã¯æ³šæããŠãã ãããã¢ããªã±ãŒã·ã§ã³ã«çµ±åããåã«åŸ¹åºçã«ãã¹ãããŠãã ãããããã©ãŒãã³ã¹ãäœäžããå Žåã¯ä»£æ¿æ¡ãæ€èšããŠãã ããã
- 枬å®ã枬å®ã枬å®ïŒ ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã宿çã«ãããã¡ã€ãªã³ã°ããŠãã ãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯éæ³ã®åŒŸäžžã§ã¯ãããŸãããçŸå®äžçã®ããŒã¿ã«åºã¥ããæ³šææ·±ãåæãšæé©åãå¿ èŠã§ããæã蟌ã¿ã«é Œããªãã§ãã ããã
ããŸããŸãªæ¥çã§ã®äŸ
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®å©ç¹ã¯ãããŸããŸãªæ¥çã§èŠãããŸãïŒ
- Eã³ããŒã¹ïŒ Eã³ããŒã¹ãµã€ãïŒäŸãã°ãAlibabaãAmazonã®ãããªã°ããŒãã«ãªããŒã±ãããã¬ã€ã¹ïŒã§ã¯ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãå€§èŠæš¡ãªã«ã¿ãã°ãè€éãªãã£ã«ã¿ãªã³ã°ãæ±ãå Žåã§ããæ€çŽ¢çµæãåå詳现ãè¿ éã«èªã¿èŸŒãŸããããšãä¿èšŒããŸããããã¯ãç¹ã«æ±åã¢ãžã¢ãã¢ããªã«ã®ãããªæ¥ç¶ãé ãå°åã®ã¢ãã€ã«ããã€ã¹ã§ãã³ã³ããŒãžã§ã³çã®åäžãšé¡§å®¢æºè¶³åºŠã®æ¹åã«ã€ãªãããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ïŒ ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒFacebookãInstagramãTikTokã®ãããªäžççã«äœ¿çšããããã©ãããã©ãŒã ãèããŠã¿ãŠãã ããïŒã§ã¯ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãã¥ãŒã¹ãã£ãŒããã³ã¡ã³ãã»ã¯ã·ã§ã³ã®ã¬ã³ããªã³ã°ãæé©åããé »ç¹ãªæŽæ°ã倧éã®ããŒã¿ãæ±ãå Žåã§ãUIã®å¿çæ§ãç¶æããŸããã€ã³ãã§ãã£ãŒããã¹ã¯ããŒã«ããŠãããŠãŒã¶ãŒã¯ãããã¹ã ãŒãºãªã¹ã¯ããŒã«ãäœéšã§ããŸãã
- éèã¢ããªã±ãŒã·ã§ã³ïŒ éèã¢ããªã±ãŒã·ã§ã³ïŒãšãŒããããåç±³ã§äœ¿çšããããªã³ã©ã€ã³ãã¬ãŒãã£ã³ã°ãã©ãããã©ãŒã ãéè¡ã¢ããªãªã©ïŒã§ã¯ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãæ ªäŸ¡ãååŒå±¥æŽãªã©ã®ãªã¢ã«ã¿ã€ã ããŒã¿æŽæ°ãé å»¶ãªãã¹ã ãŒãºã«è¡šç€ºãããããšãä¿èšŒãããŠãŒã¶ãŒã«ææ°ã®æ å ±ãæäŸããŸãã
- ã²ãŒã ïŒ Reactã¯è€éãªã²ãŒã ã®äž»èŠãšã³ãžã³ã§ã¯ãªããããããŸããããã²ãŒã ã®UIïŒã¡ãã¥ãŒãã€ã³ãã³ããªç»é¢ïŒã«ã¯ãã䜿çšãããŸããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãããã®ã€ã³ã¿ãŒãã§ãŒã¹ã®å¿çæ§ãç¶æããã®ã«åœ¹ç«ã¡ãããã€ã¹ã«é¢ä¿ãªãäžçäžã®ãã¬ã€ã€ãŒã«ã·ãŒã ã¬ã¹ãªäœéšãä¿èšŒããŸãã
- æè²ïŒ Eã©ãŒãã³ã°ãã©ãããã©ãŒã ã¯å€§ããªæ©æµãåããããšãã§ããŸãã垯åå¹ ãéãããå°æ¹ã®åŠçãã¢ã¯ã»ã¹ãããã€ã³ã¿ã©ã¯ãã£ããªã·ãã¥ã¬ãŒã·ã§ã³ããããªè¬çŸ©ããªã¢ã«ã¿ã€ã ã³ã©ãã¬ãŒã·ã§ã³æ©èœãåãããã©ãããã©ãŒã ãèããŠã¿ãŠãã ãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯UIã®å¿çæ§ãç¶æããåŠçãã€ã©ã€ã©ããã©ã°ãäžæãªãã«åå ã§ããããã«ããåŠç¿ææãé«ããŸãã
å¶éãšèæ ®äºé
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯å€§ããªå©ç¹ãæäŸããŸããããã®å¶éãšæœåšçãªæ¬ ç¹ãèªèããããšãéèŠã§ãïŒ
- è€éæ§ã®å¢å ïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ãå®è£ ãããšãã³ãŒãããŒã¹ãè€éã«ãªããReactã®å éšåäœã«ã€ããŠããæ·±ãçè§£ãå¿ èŠã«ãªãå ŽåããããŸãã
- ãããã°ã®èª²é¡ïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã«é¢é£ããåé¡ã®ãããã°ã¯ãåŸæ¥ã®Reactã¢ããªã±ãŒã·ã§ã³ã®ãããã°ãããå°é£ã«ãªãå¯èœæ§ããããŸããéåæçãªæ§è³ªã«ãããåé¡ã®åå ãçªãæ¢ããã®ãé£ãããªãããšããããŸãã
- äºææ§ã®åé¡ïŒ äžéšã®ãµãŒãããŒãã£ã©ã€ãã©ãªã¯ã³ã³ã«ã¬ã³ãã¢ãŒããšå®å šãªäºææ§ããªãå Žåããããäºæããªãåäœãããã©ãŒãã³ã¹ã®åé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã
- äžèœè¬ã§ã¯ãªãïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ä»ã®ããã©ãŒãã³ã¹æé©åãã¯ããã¯ã®ä»£æ¿ã«ã¯ãªããŸãããã³ã³ããŒãã³ããããŒã¿æ§é ã®æ ¹æ¬çãªããã©ãŒãã³ã¹åé¡ã«å¯ŸåŠããããšãéèŠã§ãã
- èŠèŠçãªã¢ãŒãã£ãã¡ã¯ãã®å¯èœæ§ïŒ å Žåã«ãã£ãŠã¯ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ãã¡ãã€ããäžå®å šãªUIæŽæ°ãªã©ã®èŠèŠçãªã¢ãŒãã£ãã¡ã¯ããåŒãèµ·ããããšããããŸãããããã®åé¡ãç¹å®ããŠå¯ŸåŠããããã«ãã¢ããªã±ãŒã·ã§ã³ãæ éã«ãã¹ãããããšãéèŠã§ãã
çµè«
Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãã¬ã³ããªã³ã°ã®åªå 床ãæé©åããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžãããããã®åŒ·åãªããŒã«ã§ããã¬ã³ããªã³ã°äœæ¥ãå°ããªãã£ã³ã¯ã«åå²ããéèŠãªæŽæ°ãåªå ããããšã§ãããã¹ã ãŒãºã§æ¥œãããŠãŒã¶ãŒäœéšãäœãåºãããšãã§ããŸããå€å°ã®è€éãã¯äŒŽããŸãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®å©ç¹ãç¹ã«è€éãªã¢ããªã±ãŒã·ã§ã³ãäœã¹ããã¯ããã€ã¹ã«ãããŠã¯ããã®åŽåã«èŠåã䟡å€ããããŸããã³ã³ã«ã¬ã³ãã¢ãŒããšã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®åãæŽ»çšããŠãåè¶ããUIããã©ãŒãã³ã¹ãå®çŸããäžçäžã®ãŠãŒã¶ãŒãåã°ããŸãããã
FiberãšäžŠè¡åŠçã®æŠå¿µãçè§£ããuseDeferredValue
ãuseTransition
ã®ãããªããã¯ã掻çšãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãReactã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®æœåšèœåãæå€§éã«åŒãåºããäžçäžã®ãªãŒãã£ãšã³ã¹ã«åããŠçã«ããã©ãŒãã³ã¹ãé«ãé
åçãªãŠã§ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããæè¯ã®çµæãåŸãããã«ãã¢ãããŒããç¶ç¶çã«æž¬å®ããæ¹è¯ããããšãå¿ããªãã§ãã ããã