ãããåŠçã§Reactã®ããã©ãŒãã³ã¹ãæå€§éã«åŒãåºããŸãããïŒãã®å æ¬çãªã¬ã€ãã§ã¯ãReactãç¶æ æŽæ°ãæé©åããæ¹æ³ãããŸããŸãªãããåŠçæè¡ããããŠè€éãªã¢ããªã±ãŒã·ã§ã³ã§å¹çãæå€§åããããã®æŠç¥ãæ¢ããŸãã
Reactã®ãããåŠçïŒé«ããã©ãŒãã³ã¹ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®ç¶æ æŽæ°æé©åæŠç¥
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®åŒ·åãªJavaScriptã©ã€ãã©ãªã§ããReactã¯ãæé©ãªããã©ãŒãã³ã¹ãç®æããŠããŸãããã®ããã«æ¡çšãããŠããäž»èŠãªã¡ã«ããºã ã®äžã€ããããåŠçã§ãããããã¯ç¶æ æŽæ°ã®åŠçæ¹æ³ãæé©åãããã®ã§ããReactã®ãããåŠçãçè§£ããããšã¯ãç¹ã«è€éããå¢ãã«ã€ããŠãé«ããã©ãŒãã³ã¹ã§ã¬ã¹ãã³ã·ããªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãããã®å æ¬çãªã¬ã€ãã§ã¯ãReactã®ãããåŠçã®è€éãªè©³çްãæãäžãããã®å©ç¹ãããŸããŸãªæŠç¥ããããŠå¹æãæå€§åããããã®é«åºŠãªãã¯ããã¯ãæ¢ããŸãã
Reactã®ãããåŠçãšã¯ïŒ
Reactã®ãããåŠçãšã¯ãè€æ°ã®ç¶æ æŽæ°ãã°ã«ãŒãåããŠåäžã®åã¬ã³ããªã³ã°ã«ãŸãšããããã»ã¹ã§ããReactã¯ç¶æ æŽæ°ããšã«ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãã代ããã«ããã¹ãŠã®æŽæ°ãå®äºããã®ãåŸ ã£ãŠããåäžã®ã¬ã³ããªã³ã°ãå®è¡ããŸããããã«ãããåã¬ã³ããªã³ã°ã®æ°ãåçã«æžå°ããå€§å¹ ãªããã©ãŒãã³ã¹åäžã«ã€ãªãããŸãã
åãã€ãã³ããã³ãã©å ã§è€æ°ã®ç¶æ 倿°ãæŽæ°ããå¿ èŠãããã·ããªãªãèããŠã¿ãŸãããïŒ
function MyComponent() {
const [countA, setCountA] = React.useState(0);
const [countB, setCountB] = React.useState(0);
const handleClick = () => {
setCountA(countA + 1);
setCountB(countB + 1);
};
return (
<button onClick={handleClick}>
Increment Both
</button>
);
}
ãããåŠçããªããã°ããã®ã³ãŒãã¯2åã®åã¬ã³ããªã³ã°ãåŒãèµ·ãããŸãã1ã€ã¯setCountAã®ããããã1ã€ã¯setCountBã®ããã§ããããããReactã®ãããåŠçã¯ãããã®æŽæ°ãè³¢ãã°ã«ãŒãåããŠåäžã®åã¬ã³ããªã³ã°ã«ãŸãšããçµæãšããŠããã©ãŒãã³ã¹ãåäžããŸããããã¯ãããè€éãªã³ã³ããŒãã³ããé »ç¹ãªç¶æ
倿Žãæ±ãå Žåã«ç¹ã«é¡èã§ãã
ãããåŠçã®å©ç¹
Reactã®ãããåŠçã®äž»ãªå©ç¹ã¯ãããã©ãŒãã³ã¹ã®åäžã§ããåã¬ã³ããªã³ã°ã®æ°ãæžããããšã§ããã©ãŠã¶ãè¡ãå¿ èŠã®ããäœæ¥éãæå°éã«æããããã¹ã ãŒãºã§ã¬ã¹ãã³ã·ããªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸããå ·äœçã«ã¯ããããåŠçã«ã¯ä»¥äžã®å©ç¹ããããŸãïŒ
- åã¬ã³ããªã³ã°ã®åæžïŒ æã倧ããªå©ç¹ã¯ãåã¬ã³ããªã³ã°ã®æ°ãæžå°ããããšã§ããããã¯çŽæ¥çã«CPU䜿çšçã®äœäžãšã¬ã³ããªã³ã°æéã®ççž®ã«ã€ãªãããŸãã
- ã¬ã¹ãã³ã¹æ§ã®åäžïŒ åã¬ã³ããªã³ã°ãæå°éã«æããããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«å¯ŸããŠããã¬ã¹ãã³ã·ãã«ãªããŸãããŠãŒã¶ãŒã¯ã©ã°ãå°ãªããããæ»ãããªã€ã³ã¿ãŒãã§ãŒã¹ãäœéšã§ããŸãã
- ããã©ãŒãã³ã¹ã®æé©åïŒ ãããåŠçã¯ã¢ããªã±ãŒã·ã§ã³å šäœã®ããã©ãŒãã³ã¹ãæé©åããç¹ã«ãªãœãŒã¹ãéãããããã€ã¹ã«ãããŠãããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
- ãšãã«ã®ãŒæ¶è²»ã®åæžïŒ åã¬ã³ããªã³ã°ãå°ãªãããšã¯ããšãã«ã®ãŒæ¶è²»ã®åæžã«ãã€ãªãããŸããããã¯ã¢ãã€ã«ããã€ã¹ãã©ãããããã«ãšã£ãŠéèŠãªèæ ®äºé ã§ãã
React 18以éã®èªåãããåŠç
React 18以åã¯ããããåŠçã¯äž»ã«Reactã®ã€ãã³ããã³ãã©å
ã®ç¶æ
æŽæ°ã«éå®ãããŠããŸãããããã¯ãsetTimeoutãPromiseããŸãã¯ãã€ãã£ãã€ãã³ããã³ãã©å
ã®ãããªãã€ãã³ããã³ãã©ã®å€ã§ã®ç¶æ
æŽæ°ã¯ãããåŠçãããªãããšãæå³ããŠããŸãããReact 18ã§ã¯èªåãããåŠçãå°å
¥ãããããã«ãããããåŠçã¯ãã©ãã§çºçãããã«é¢ããããã»ãŒãã¹ãŠã®ç¶æ
æŽæ°ã察象ãšããããã«æ¡åŒµãããŸããããã®æ©èœåŒ·åã«ãããããã©ãŒãã³ã¹ã®æé©åã倧å¹
ã«ç°¡çŽ åãããæåã§ã®ä»å
¥ã®å¿
èŠæ§ãæžå°ããŸãã
èªåãããåŠçã«ããã以äžã®ã³ãŒãã¯React 18ã§ãããåŠçãããããã«ãªããŸãïŒ
function MyComponent() {
const [countA, setCountA] = React.useState(0);
const [countB, setCountB] = React.useState(0);
const handleClick = () => {
setTimeout(() => {
setCountA(countA + 1);
setCountB(countB + 1);
}, 0);
};
return (
<button onClick={handleClick}>
Increment Both
</button>
);
}
ãã®äŸã§ã¯ãç¶æ
æŽæ°ãsetTimeoutã³ãŒã«ããã¯å
ã«ãã£ãŠããReact 18ã¯ããããåäžã®åã¬ã³ããªã³ã°ã«ãããåŠçããŸãããã®èªåçãªæ¯ãèãã¯ãããã©ãŒãã³ã¹ã®æé©åãç°¡çŽ åããç°ãªãã³ãŒããã¿ãŒã³éã§äžè²«ãããããåŠçãä¿èšŒããŸãã
ãããåŠçãè¡ãããªãå ŽåïŒãšãã®å¯ŸåŠæ³ïŒ
Reactã®èªåãããåŠçæ©èœã«ãããããããæåŸ éãã«ãããåŠçãè¡ãããªãç¶æ³ããããŸãããããã®ã·ããªãªãçè§£ããå¯ŸåŠæ³ãç¥ãããšã¯ãæé©ãªããã©ãŒãã³ã¹ãç¶æããããã«éèŠã§ãã
1. Reactã®ã¬ã³ããŒããªãŒå€ã§ã®æŽæ°
ç¶æ æŽæ°ãReactã®ã¬ã³ããŒããªãŒã®å€ïŒäŸïŒDOMãçŽæ¥æäœããã©ã€ãã©ãªå ïŒã§çºçããå Žåãèªåçã«ãããåŠçã¯è¡ãããŸããããã®ãããªå Žåãæåã§åã¬ã³ããªã³ã°ãããªã¬ãŒããããReactã®èª¿æŽã¡ã«ããºã ã䜿çšããŠäžè²«æ§ã確ä¿ããå¿ èŠããããããããŸããã
2. ã¬ã¬ã·ãŒã³ãŒããã©ã€ãã©ãª
å€ãã³ãŒãããŒã¹ããµãŒãããŒãã£ã®ã©ã€ãã©ãªããReactã®ãããåŠçã¡ã«ããºã ã劚ãããã¿ãŒã³ã«äŸåããŠããå¯èœæ§ããããŸããäŸãã°ãã©ã€ãã©ãªãæç€ºçã«åã¬ã³ããªã³ã°ãããªã¬ãŒããããå€ãAPIã䜿çšããŠãããããå Žåã§ãããã®ãããªå Žåã¯ãã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããããReactã®ãããåŠçã®æåãšäºææ§ã®ãã代æ¿ã©ã€ãã©ãªãèŠã€ããå¿ èŠããããããããŸããã
3. 峿ã¬ã³ããªã³ã°ãå¿ èŠãªç·æ¥ã®æŽæ°
çšã«ãç¹å®ã®ç¶æ
æŽæ°ã«å¯ŸããŠå³æã®åã¬ã³ããªã³ã°ã匷å¶ããå¿
èŠãããå ŽåããããŸããããã¯ãæŽæ°ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ãšã£ãŠéèŠã§ãé
å»¶ãããããšãã§ããªãå Žåã«å¿
èŠã«ãªããããããŸãããReactã¯ãã®ãããªç¶æ³ã®ããã«flushSync APIãæäŸããŠããŸãïŒè©³çްã¯åŸè¿°ïŒã
ç¶æ æŽæ°ãæé©åããããã®æŠç¥
Reactã®ãããåŠçã¯èªåçãªããã©ãŒãã³ã¹åäžããããããŸãããããã«ç¶æ æŽæ°ãæé©åããŠããè¯ãçµæãåŸãããšãã§ããŸãã以äžã«å¹æçãªæŠç¥ãããã€ã玹ä»ããŸãïŒ
1. é¢é£ããç¶æ æŽæ°ãã°ã«ãŒãåãã
å¯èœãªéããé¢é£ããç¶æ æŽæ°ãåäžã®æŽæ°ã«ãŸãšããŸããããã«ãããåã¬ã³ããªã³ã°ã®æ°ãæžããããã©ãŒãã³ã¹ãåäžããŸããäŸãã°ãè€æ°ã®åå¥ã®ç¶æ 倿°ãæŽæ°ãã代ããã«ãé¢é£ãããã¹ãŠã®å€ãæã€ãªããžã§ã¯ããä¿æããåäžã®ç¶æ 倿°ã䜿çšããããšãæ€èšããŠãã ããã
function MyComponent() {
const [data, setData] = React.useState({
name: '',
email: '',
age: 0,
});
const handleChange = (e) => {
const { name, value } = e.target;
setData({ ...data, [name]: value });
};
return (
<form>
<input type="text" name="name" value={data.name} onChange={handleChange} />
<input type="email" name="email" value={data.email} onChange={handleChange} />
<input type="number" name="age" value={data.age} onChange={handleChange} />
</form>
);
}
ãã®äŸã§ã¯ããã¹ãŠã®ãã©ãŒã å
¥åã®å€æŽããdataç¶æ
倿°ãæŽæ°ããåäžã®handleChange颿°ã«ãã£ãŠåŠçãããŸããããã«ãããé¢é£ãããã¹ãŠã®ç¶æ
æŽæ°ãåäžã®åã¬ã³ããªã³ã°ã«ãããåŠçãããããšãä¿èšŒãããŸãã
2. 颿°ã«ããæŽæ°ã䜿çšãã
以åã®å€ã«åºã¥ããŠç¶æ ãæŽæ°ããå Žåã¯ã颿°ã«ããæŽæ°ã䜿çšããŸãã颿°ã«ããæŽæ°ã¯ãæŽæ°é¢æ°ã«ä»¥åã®ç¶æ å€ãåŒæ°ãšããŠæäŸãããããéåæã®ã·ããªãªã§ãã£ãŠãåžžã«æ£ããå€ã§äœæ¥ããŠããããšãä¿èšŒãããŸãã
function MyComponent() {
const [count, setCount] = React.useState(0);
const handleClick = () => {
setCount((prevCount) => prevCount + 1);
};
return (
<button onClick={handleClick}>
Increment
</button>
);
}
颿°ã«ããæŽæ°setCount((prevCount) => prevCount + 1)ã䜿çšããããšã§ãè€æ°ã®æŽæ°ãäžç·ã«ãããåŠçãããå Žåã§ããæŽæ°ãæ£ãã以åã®å€ã«åºã¥ããŠããããšãä¿èšŒãããŸãã
3. useCallbackãšuseMemoãæŽ»çšãã
useCallbackãšuseMemoã¯ãReactã®ããã©ãŒãã³ã¹ãæé©åããããã«äžå¯æ¬ ãªããã¯ã§ãããããã«ããã颿°ãå€ãã¡ã¢åããåã³ã³ããŒãã³ãã®äžèŠãªåã¬ã³ããªã³ã°ãé²ãããšãã§ããŸããããã¯ããããã®å€ã«äŸåããåã³ã³ããŒãã³ãã«propsãæž¡ãå Žåã«ç¹ã«éèŠã§ãã
function MyComponent() {
const [count, setCount] = React.useState(0);
const increment = React.useCallback(() => {
setCount((prevCount) => prevCount + 1);
}, []);
return (
<ChildComponent increment={increment} />
);
}
function ChildComponent({ increment }) {
React.useEffect(() => {
console.log('ChildComponent rendered');
});
return (<button onClick={increment}>Increment</button>);
}
ãã®äŸã§ã¯ãuseCallbackãincrement颿°ãã¡ã¢åãããã®äŸåé¢ä¿ã倿Žãããå Žåã«ã®ã¿ïŒãã®å Žåã¯ãªãïŒå€æŽãããããã«ããŸããããã«ãããcountã®ç¶æ
ã倿ŽãããŠãChildComponentãäžå¿
èŠã«åã¬ã³ããªã³ã°ãããã®ãé²ããŸãã
4. ãããŠã³ã¹ãšã¹ããããªã³ã°
ãããŠã³ã¹ãšã¹ããããªã³ã°ã¯ã颿°ãå®è¡ãããé »åºŠãå¶éããããã®ãã¯ããã¯ã§ãããããã¯ãã¹ã¯ããŒã«ã€ãã³ããå ¥å倿Žãªã©ãé »ç¹ãªæŽæ°ãåŒãèµ·ããã€ãã³ããåŠçããã®ã«ç¹ã«åœ¹ç«ã¡ãŸãããããŠã³ã¹ã¯ãäžå®æéã®ç¡æäœåŸã«é¢æ°ãå®è¡ãããããšãä¿èšŒããã¹ããããªã³ã°ã¯ãç¹å®ã®æéééå ã«æå€§ã§1åãã颿°ãå®è¡ãããªãããšãä¿èšŒããŸãã
import { debounce } from 'lodash';
function MyComponent() {
const [searchTerm, setSearchTerm] = React.useState('');
const handleInputChange = (e) => {
const value = e.target.value;
setSearchTerm(value);
debouncedSearch(value);
};
const search = (term) => {
console.log('Searching for:', term);
// Perform search logic here
};
const debouncedSearch = React.useMemo(() => debounce(search, 300), []);
return (
<input type="text" onChange={handleInputChange} />
);
}
ãã®äŸã§ã¯ãLodashã®debounce颿°ã䜿çšããŠsearch颿°ããããŠã³ã¹ããŠããŸããããã«ããããŠãŒã¶ãŒã300ããªç§éã¿ã€ãã³ã°ã忢ããåŸã«ã®ã¿æ€çޢ颿°ãå®è¡ãããããã«ãªããäžèŠãªAPIåŒã³åºããé²ããããã©ãŒãã³ã¹ãåäžãããŸãã
é«åºŠãªãã¯ããã¯ïŒrequestAnimationFrameãšflushSync
ããé«åºŠãªã·ããªãªã®ããã«ãReactã¯2ã€ã®åŒ·åãªAPIãrequestAnimationFrameãšflushSyncãæäŸããŠããŸãããããã®APIã䜿çšãããšãç¶æ
æŽæ°ã®ã¿ã€ãã³ã°ã埮調æŽããåã¬ã³ããªã³ã°ãçºçããã¿ã€ãã³ã°ãå¶åŸ¡ã§ããŸãã
1. requestAnimationFrame
requestAnimationFrameã¯ã次ã®åæç»ã®åã«å®è¡ããã颿°ãã¹ã±ãžã¥ãŒã«ãããã©ãŠã¶APIã§ããã¢ãã¡ãŒã·ã§ã³ããã®ä»ã®èŠèŠçãªæŽæ°ãã¹ã ãŒãºãã€å¹ççã«å®è¡ããããã«ãã䜿çšãããŸããReactã§ã¯ãrequestAnimationFrameã䜿çšããŠç¶æ
æŽæ°ããããåŠçãããã©ãŠã¶ã®ã¬ã³ããªã³ã°ãµã€ã¯ã«ãšåæãããããšãã§ããŸãã
function MyComponent() {
const [position, setPosition] = React.useState(0);
React.useEffect(() => {
const animate = () => {
requestAnimationFrame(() => {
setPosition((prevPosition) => prevPosition + 1);
animate();
});
};
animate();
}, []);
return (
<div style={{ transform: `translateX(${position}px)` }}>
Moving Element
</div>
);
}
ãã®äŸã§ã¯ãrequestAnimationFrameã䜿çšããŠpositionç¶æ
倿°ãç¶ç¶çã«æŽæ°ããæ»ãããªã¢ãã¡ãŒã·ã§ã³ãäœæããŠããŸããrequestAnimationFrameã䜿çšããããšã§ãæŽæ°ããã©ãŠã¶ã®ã¬ã³ããªã³ã°ãµã€ã¯ã«ãšåæãããã«ã¯ã«ã¯ããã¢ãã¡ãŒã·ã§ã³ãé²ããæé©ãªããã©ãŒãã³ã¹ãä¿èšŒããŸãã
2. flushSync
flushSyncã¯ãDOMãžã®å³æåææŽæ°ã匷å¶ããReactã®APIã§ããéåžžãå€éšã©ã€ãã©ãªãšã®é£æºæããéèŠãªUIæŽæ°ãå®è¡ããéãªã©ãç¶æ
æŽæ°ãããã«UIã«åæ ãããããšãä¿èšŒããå¿
èŠãããçšãªã±ãŒã¹ã§äœ¿çšãããŸãããããåŠçã®ããã©ãŒãã³ã¹äžã®å©ç¹ãç¡å¹ã«ããå¯èœæ§ããããããæ
éã«äœ¿çšããŠãã ããã
import { flushSync } from 'react-dom';
function MyComponent() {
const [text, setText] = React.useState('');
const handleChange = (e) => {
const value = e.target.value;
flushSync(() => {
setText(value);
});
// Perform other synchronous operations that rely on the updated text
console.log('Text updated synchronously:', value);
};
return (
<input type="text" onChange={handleChange} />
);
}
ãã®äŸã§ã¯ãflushSyncã䜿çšããŠãå
¥åã倿Žããããã³ã«textç¶æ
倿°ãå³åº§ã«æŽæ°ããŠããŸããããã«ãããæŽæ°ãããããã¹ãã«äŸåããåŸç¶ã®åææäœãæ£ããå€ã«ã¢ã¯ã»ã¹ã§ããããšãä¿èšŒãããŸããflushSyncã¯Reactã®ãããåŠçã¡ã«ããºã ã劚ããé床ã«äœ¿çšãããšããã©ãŒãã³ã¹ã®åé¡ãåŒãèµ·ããå¯èœæ§ããããããè³¢æã«äœ¿çšããããšãéèŠã§ãã
å®äžçã®äŸïŒã°ããŒãã«eã³ããŒã¹ãšéèããã·ã¥ããŒã
Reactã®ãããåŠçãšæé©åæŠç¥ã®éèŠæ§ã説æããããã«ã2ã€ã®å®äžçã®äŸãèããŠã¿ãŸãããïŒ
1. ã°ããŒãã«eã³ããŒã¹ãã©ãããã©ãŒã
ã°ããŒãã«ãªeã³ããŒã¹ãã©ãããã©ãŒã ã¯ãååã®é²èЧãã«ãŒããžã®ååã®è¿œå ãè³Œå ¥ã®å®äºãªã©ãèšå€§ãªéã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãåŠçããŸããé©åãªæé©åããªããã°ãã«ãŒãã®åèšéé¡ãååã®åšåº«ç¶æ³ãéæã«é¢é£ããç¶æ æŽæ°ã倿°ã®åã¬ã³ããªã³ã°ãåŒãèµ·ãããç¹ã«æ°èåžå Žã®ã€ã³ã¿ãŒãããæ¥ç¶ãé ããŠãŒã¶ãŒã«ãšã£ãŠã¯ãé ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããå¯èœæ§ããããŸããReactã®ãããåŠçããæ€çŽ¢ã¯ãšãªã®ãããŠã³ã¹ãã«ãŒãåèšã®æŽæ°ã®ã¹ããããªã³ã°ãªã©ã®ãã¯ããã¯ãå®è£ ããããšã§ããã©ãããã©ãŒã ã¯ããã©ãŒãã³ã¹ãšã¬ã¹ãã³ã¹æ§ãå€§å¹ ã«åäžãããäžçäžã®ãŠãŒã¶ãŒã«ã¹ã ãŒãºãªã·ã§ããã³ã°äœéšãä¿èšŒã§ããŸãã
2. éèããã·ã¥ããŒã
éèããã·ã¥ããŒãã¯ããªã¢ã«ã¿ã€ã ã®åžå ŽããŒã¿ãããŒããã©ãªãªã®ããã©ãŒãã³ã¹ãååŒå±¥æŽã衚瀺ããŸããããã·ã¥ããŒãã¯ææ°ã®åžå Žç¶æ³ãåæ ããããã«é »ç¹ã«æŽæ°ãããå¿
èŠããããŸããããããéå°ãªåã¬ã³ããªã³ã°ã¯ãããã¡ãªãåå¿ã®æªãã€ã³ã¿ãŒãã§ãŒã¹ã«ã€ãªããå¯èœæ§ããããŸããuseMemoã䜿ã£ãŠé«ã³ã¹ããªèšç®ãã¡ã¢åããããrequestAnimationFrameã䜿ã£ãп޿°ããã©ãŠã¶ã®ã¬ã³ããªã³ã°ãµã€ã¯ã«ãšåæãããããããªã©ã®ãã¯ããã¯ã掻çšããããšã§ãé«é »åºŠã®ããŒã¿æŽæ°ããã£ãŠããããã·ã¥ããŒãã¯ã¹ã ãŒãºã§æµåçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãç¶æã§ããŸããããã«ãéèããŒã¿ã®ã¹ããªãŒãã³ã°ã«ãã䜿çšããããµãŒããŒã»ã³ãã€ãã³ãã¯ãReact 18ã®èªåãããåŠçæ©èœãã倧ããªæ©æµãåããŸããSSEãä»ããŠåä¿¡ããæŽæ°ã¯èªåçã«ãããåŠçãããäžèŠãªåã¬ã³ããªã³ã°ã鲿¢ãããŸãã
çµè«
Reactã®ãããåŠçã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããããšãã§ããåºæ¬çãªæé©åãã¯ããã¯ã§ãããããåŠçã®ä»çµã¿ãçè§£ãã广çãªæé©åæŠç¥ãå®è£
ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®è€éãããŠãŒã¶ãŒã®æåšå°ã«é¢ããããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããé«ããã©ãŒãã³ã¹ã§ã¬ã¹ãã³ã·ããªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ã§ããŸããReact 18ã®èªåãããåŠçãããrequestAnimationFrameãflushSyncãªã©ã®é«åºŠãªãã¯ããã¯ãŸã§ãReactã¯ç¶æ
æŽæ°ã埮調æŽããããã©ãŒãã³ã¹ãæå€§åããããã®è±å¯ãªããŒã«ã»ãããæäŸããŠããŸããReactã¢ããªã±ãŒã·ã§ã³ãç¶ç¶çã«ç£èŠããæé©åããããšã§ãäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠé«éã§ã¬ã¹ãã³ã·ãã§ã楜ãã䜿ããç¶æ
ãç¶æã§ããŸãã