React Concurrent Modeã®ãªãœãŒã¹ã¹ã±ãžã¥ãŒãªã³ã°ãšã¡ã¢ãªç®¡çãæ¢æ±ããã°ããŒãã«ãªæèã§é«ããã©ãŒãã³ã¹ã§å¿çæ§ã®é«ãUIãæ§ç¯ããŸãã
React Concurrent Modeã®ãªãœãŒã¹ã¹ã±ãžã¥ãŒãªã³ã°ïŒã¡ã¢ãªãæèããã¿ã¹ã¯ç®¡ç
React Concurrent Modeã¯ãéçºè ãããå¿çæ§ãé«ããããã©ãŒãã³ã¹ã«åªãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããã®ãå©ããReactã®æ°ããæ©èœçŸ€ã§ãããã®æ žãšãªãã®ã¯ãããŸããŸãªã¿ã¹ã¯ã®å®è¡ã管çãããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãåªå ããé«è² è·äžã§ãã¹ã ãŒãºãªãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããæŽç·ŽããããªãœãŒã¹ã¹ã±ãžã¥ãŒãªã³ã°ã¡ã«ããºã ã§ãããã®èšäºã§ã¯ãReact Concurrent Modeã®ãªãœãŒã¹ã¹ã±ãžã¥ãŒãªã³ã°ã®è€éããæãäžããã°ããŒãã«ãªèŠèŽè ã«å¯ŸããŠæé©ãªããã©ãŒãã³ã¹ãæäŸããããã«ãã¡ã¢ãªç®¡çãã©ã®ããã«åŠçããã¿ã¹ã¯ãåªå é äœä»ããããã«çŠç¹ãåœãŠãŸãã
Concurrent Modeãšãã®ç®æšãçè§£ãã
åŸæ¥ã®Reactã®ã¬ã³ããªã³ã°ã¯åæçã§ããããã³ã°ã§ããããã¯ãReactãã³ã³ããŒãã³ãããªãŒã®ã¬ã³ããªã³ã°ãéå§ãããšãããªãŒå šäœãã¬ã³ããªã³ã°ããããŸã§ç¶ç¶ããã¡ã€ã³ã¹ã¬ããããããã¯ããŠUIã®æŽæ°ãé ããªãå¯èœæ§ãããããšãæå³ããŸããConcurrent Modeã¯ãã¬ã³ããªã³ã°ã¿ã¹ã¯ãäžæãäžæåæ¢ãåéããããã¯ç Žæ£ããæ©èœãå°å ¥ããããšã§ããã®å¶éã«å¯ŸåŠããŸããããã«ãããReactã¯ã¬ã³ããªã³ã°ããŠãŒã¶ãŒå ¥åã®åŠçãã¢ãã¡ãŒã·ã§ã³ã®æç»ããããã¯ãŒã¯ãªã¯ãšã¹ããžã®å¿çãªã©ãä»ã®éèŠãªã¿ã¹ã¯ãšäº€äºã«å®è¡ã§ããããã«ãªããŸãã
Concurrent Modeã®äž»ãªç®æšã¯æ¬¡ã®ãšããã§ãïŒ
- å¿çæ§ïŒé·æéã®ã¿ã¹ã¯ãã¡ã€ã³ã¹ã¬ããããããã¯ããã®ãé²ããã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãç¶æããŸãã
- åªå é äœä»ãïŒç·æ¥æ§ã®äœãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ãããããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ïŒäŸïŒã¿ã€ãã³ã°ãã¯ãªãã¯ïŒãåªå ããŸãã
- éåæã¬ã³ããªã³ã°ïŒã¬ã³ããªã³ã°ããäžæå¯èœãªããå°ããªäœæ¥åäœã«åå²ããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒç¹ã«ãªãœãŒã¹ãéãããŠããããã€ã¹ããããã¯ãŒã¯æ¥ç¶ãé ãå Žåã«ãããæµåçã§ã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
Fiberã¢ãŒããã¯ãã£ïŒäžŠè¡åŠçã®åºç€
Concurrent Modeã¯ãReactã®å éšã¬ã³ããªã³ã°ãšã³ãžã³ãå®å šã«æžãçŽããFiberã¢ãŒããã¯ãã£ã®äžã«æ§ç¯ãããŠããŸããFiberã¯UIå ã®åã³ã³ããŒãã³ããäžã€ã®äœæ¥åäœãšããŠè¡šçŸããŸãã以åã®ã¹ã¿ãã¯ããŒã¹ã®ãªã³ã³ãµã€ã©ãšã¯ç°ãªããFiberã¯é£çµãªã¹ãã®ããŒã¿æ§é ã䜿çšããŠäœæ¥ã®ããªãŒãäœæããŸããããã«ãããReactã¯ç·æ¥åºŠã«åºã¥ããŠã¬ã³ããªã³ã°ã¿ã¹ã¯ãäžæåæ¢ãåéãåªå é äœä»ãããããšãã§ããŸãã
Fiberã®äž»èŠãªæŠå¿µïŒ
- FiberããŒãïŒäœæ¥åäœïŒäŸïŒã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ïŒã衚ããŸãã
- WorkLoopïŒFiberããªãŒãå埩åŠçããåFiberããŒãã§äœæ¥ãå®è¡ããã«ãŒãã§ãã
- ã¹ã±ãžã¥ãŒã©ïŒåªå 床ã«åºã¥ããŠã次ã«åŠçããFiberããŒããæ±ºå®ããŸãã
- 差忀åºïŒReconciliationïŒïŒçŸåšã®FiberããªãŒãšåã®ããªãŒãæ¯èŒããŠãDOMã«é©çšããå¿ èŠããã倿Žãç¹å®ããããã»ã¹ã§ãã
Concurrent Modeã§ã®ãªãœãŒã¹ã¹ã±ãžã¥ãŒãªã³ã°
ãªãœãŒã¹ã¹ã±ãžã¥ãŒã©ã¯ãConcurrent Modeã§ããŸããŸãªã¿ã¹ã¯ã®å®è¡ã管çãã責任ããããŸããã¿ã¹ã¯ãç·æ¥åºŠã«åºã¥ããŠåªå é äœä»ãããããã«å¿ããŠãªãœãŒã¹ïŒCPUæéãã¡ã¢ãªïŒãå²ãåœãŠãŸããã¹ã±ãžã¥ãŒã©ã¯ãæãéèŠãªã¿ã¹ã¯ãæåã«å®äºããããšãä¿èšŒããããã«ããŸããŸãªæè¡ã䜿çšããç·æ¥æ§ã®äœãã¿ã¹ã¯ã¯åŸåãã«ããŸãã
ã¿ã¹ã¯ã®åªå é äœä»ã
React Concurrent Modeã¯ãã¿ã¹ã¯ãå®è¡ãããé åºã決å®ããããã«ãåªå 床ããŒã¹ã®ã¹ã±ãžã¥ãŒãªã³ã°ã·ã¹ãã ã䜿çšããŸããã¿ã¹ã¯ã«ã¯ããã®éèŠæ§ã«åºã¥ããŠç°ãªãåªå 床ãå²ãåœãŠãããŸããäžè¬çãªåªå 床ã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- 峿åªå 床ïŒãŠãŒã¶ãŒå ¥åã®åŠçãªã©ãå³åº§ã«å®äºããå¿ èŠãããã¿ã¹ã¯çšã
- ãŠãŒã¶ãŒããããã³ã°åªå 床ïŒãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«å¿ããŠUIãæŽæ°ãããªã©ããŠãŒã¶ãŒãUIãšå¯Ÿè©±ããã®ããããã¯ããã¿ã¹ã¯çšã
- éåžžåªå 床ïŒUIã®éèŠã§ãªãéšåã®ã¬ã³ããªã³ã°ãªã©ãæéçå¶çŽãå³ãããªãã¿ã¹ã¯çšã
- äœåªå 床ïŒããã«ã¯è¡šç€ºãããªãã³ã³ãã³ãã®äºåã¬ã³ããªã³ã°ãªã©ãåŸåãã«ã§ããã¿ã¹ã¯çšã
- ã¢ã€ãã«åªå 床ïŒããã¯ã°ã©ãŠã³ãã§ã®ããŒã¿ååŸãªã©ããã©ãŠã¶ãã¢ã€ãã«ç¶æ ã®ãšãã«ã®ã¿å®è¡ãããã¿ã¹ã¯çšã
ã¹ã±ãžã¥ãŒã©ã¯ãããã®åªå 床ã䜿çšããŠã次ã«å®è¡ããã¿ã¹ã¯ã決å®ããŸããåªå 床ã®é«ãã¿ã¹ã¯ã¯ãåªå 床ã®äœãã¿ã¹ã¯ã®åã«å®è¡ãããŸããããã«ãããã·ã¹ãã ãé«è² è·äžã«ãã£ãŠããæãéèŠãªã¿ã¹ã¯ãæåã«å®äºããããšãä¿èšŒãããŸãã
äžæå¯èœãªã¬ã³ããªã³ã°
Concurrent Modeã®äž»èŠãªæ©èœã®1ã€ã¯ãäžæå¯èœãªã¬ã³ããªã³ã°ã§ããããã¯ãããåªå 床ã®é«ãã¿ã¹ã¯ãå®è¡ããå¿ èŠãããå Žåãã¹ã±ãžã¥ãŒã©ãã¬ã³ããªã³ã°ã¿ã¹ã¯ãäžæã§ããããšãæå³ããŸããããšãã°ãReactã倧ããªã³ã³ããŒãã³ãããªãŒãã¬ã³ããªã³ã°ããŠããæäžã«ãŠãŒã¶ãŒãå ¥åãã£ãŒã«ãã«ã¿ã€ãã³ã°ãéå§ããå Žåãã¹ã±ãžã¥ãŒã©ã¯ã¬ã³ããªã³ã°ã¿ã¹ã¯ãäžæãããŸããŠãŒã¶ãŒå ¥åãåŠçã§ããŸããããã«ãããReactãè€éãªã¬ã³ããªã³ã°æäœãå®è¡ããŠãããšãã§ããUIã®å¿çæ§ãç¶æãããŸãã
ã¬ã³ããªã³ã°ã¿ã¹ã¯ãäžæããããšãReactã¯FiberããªãŒã®çŸåšã®ç¶æ ãä¿åããŸããã¹ã±ãžã¥ãŒã©ãã¬ã³ããªã³ã°ã¿ã¹ã¯ãåéãããšãæåããããçŽãå¿ èŠãªããäžæãããšããããç¶è¡ã§ããŸããããã«ãããç¹ã«å€§èŠæš¡ã§è€éãªUIãæ±ãå Žåã«ãReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
ã¿ã€ã ã¹ã©ã€ã·ã³ã°
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ããªãœãŒã¹ã¹ã±ãžã¥ãŒã©ãReactã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžãããããã«äœ¿çšãããã1ã€ã®ææ³ã§ããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã§ã¯ãã¬ã³ããªã³ã°ã¿ã¹ã¯ãããå°ããªäœæ¥ã®ãã£ã³ã¯ã«åå²ããŸããã¹ã±ãžã¥ãŒã©ã¯ãåäœæ¥ãã£ã³ã¯ã«å°éã®æéïŒãã¿ã€ã ã¹ã©ã€ã¹ãïŒãå²ãåœãŠãŸããã¿ã€ã ã¹ã©ã€ã¹ãæéåãã«ãªããšãã¹ã±ãžã¥ãŒã©ã¯å®è¡ããå¿ èŠã®ããããåªå 床ã®é«ãã¿ã¹ã¯ããããã©ããã確èªããŸããããããã°ãã¹ã±ãžã¥ãŒã©ã¯çŸåšã®ã¿ã¹ã¯ãäžæããããåªå 床ã®é«ãã¿ã¹ã¯ãå®è¡ããŸããããã§ãªããã°ãã¹ã±ãžã¥ãŒã©ã¯çŸåšã®ã¿ã¹ã¯ãå®äºããããå¥ã®ããåªå 床ã®é«ãã¿ã¹ã¯ãå°çãããŸã§ç¶è¡ããŸãã
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãé·æéã®ã¬ã³ããªã³ã°ã¿ã¹ã¯ãã¡ã€ã³ã¹ã¬ãããé·æéãããã¯ããã®ãé²ããŸããããã«ãããReactãè€éãªã¬ã³ããªã³ã°æäœãå®è¡ããŠãããšãã§ããã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãç¶æããã®ã«åœ¹ç«ã¡ãŸãã
ã¡ã¢ãªãæèããã¿ã¹ã¯ç®¡ç
React Concurrent Modeã®ãªãœãŒã¹ã¹ã±ãžã¥ãŒãªã³ã°ã¯ãã¡ã¢ãªäœ¿çšéãèæ ®ããŸããReactã¯ãç¹ã«ãªãœãŒã¹ãéãããŠããããã€ã¹ã§ã®ããã©ãŒãã³ã¹ãåäžãããããã«ãã¡ã¢ãªå²ãåœãŠãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãæå°éã«æããããšãç®æããŠããŸããããã¯ããã€ãã®æŠç¥ãéããŠéæãããŸãïŒ
ãªããžã§ã¯ãããŒãªã³ã°
ãªããžã§ã¯ãããŒãªã³ã°ã¯ãæ°ãããªããžã§ã¯ããäœæãã代ããã«æ¢åã®ãªããžã§ã¯ããåå©çšããææ³ã§ããããã«ãããReactã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠå²ãåœãŠãããã¡ã¢ãªã®éãå€§å¹ ã«åæžã§ããŸããReactã¯ãFiberããŒããæŽæ°ãã¥ãŒãªã©ãé »ç¹ã«äœæããã³ç Žæ£ããããªããžã§ã¯ãã«ãªããžã§ã¯ãããŒãªã³ã°ã䜿çšããŸãã
ãªããžã§ã¯ããäžèŠã«ãªããšãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ããã代ããã«ããŒã«ã«è¿ãããŸããæ¬¡ã«ãã®ã¿ã€ãã®ãªããžã§ã¯ããå¿ èŠã«ãªããšããŒãããäœæãããã®ã§ã¯ãªããããŒã«ããååŸãããŸããããã«ãããã¡ã¢ãªå²ãåœãŠãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒããããåæžãããReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããŸãã
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãžã®é æ ®
Concurrent Modeã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«é æ ®ããŠèšèšãããŠããŸããã¹ã±ãžã¥ãŒã©ã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãããã©ãŒãã³ã¹ã«äžãã圱é¿ãæå°éã«æããæ¹æ³ã§ã¿ã¹ã¯ãã¹ã±ãžã¥ãŒã«ããããšããŸããããšãã°ãã¹ã±ãžã¥ãŒã©ã¯äžåºŠã«å€æ°ã®ãªããžã§ã¯ããäœæããããšãé¿ãããããããŸãããããã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãµã€ã¯ã«ãåŒãèµ·ããå¯èœæ§ãããããã§ãããŸãããã€ã§ãã¡ã¢ãªãããããªã³ããåæžããããã«ãäœæ¥ãããå°ããªãã£ã³ã¯ã§å®è¡ããããšããŸãã
éèŠã§ãªãã¿ã¹ã¯ã®å»¶æ
ãŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãåªå ããéèŠã§ãªãã¿ã¹ã¯ãå»¶æããããšã§ãReactã¯ãã€ã§ã䜿çšãããã¡ã¢ãªã®éãæžããããšãã§ããŸãããŠãŒã¶ãŒã«ããã«èŠããªãã³ã³ãã³ãã®äºåã¬ã³ããªã³ã°ãªã©ãçŽã¡ã«å¿ èŠã§ãªãã¿ã¹ã¯ã¯ãã·ã¹ãã ãæ··éããŠããªãåŸåãã«ããããšãã§ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªãããããªã³ããåæžãããå šäœçãªããã©ãŒãã³ã¹ãåäžããŸãã
å®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹
React Concurrent Modeã®ãªãœãŒã¹ã¹ã±ãžã¥ãŒãªã³ã°ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãã©ã®ããã«åäžãããããããã€ãã®å®è·µçãªäŸãèŠãŠã¿ãŸãããïŒ
äŸ1ïŒå ¥ååŠç
è€æ°ã®å ¥åãã£ãŒã«ããšè€éãªããªããŒã·ã§ã³ããžãã¯ãæã€ãã©ãŒã ãæ³åããŠã¿ãŠãã ãããåŸæ¥ã®Reactã¢ããªã±ãŒã·ã§ã³ã§ã¯ãå ¥åãã£ãŒã«ãã«ã¿ã€ãã³ã°ãããšããã©ãŒã å šäœã®åæçãªæŽæ°ãããªã¬ãŒãããé¡èãªé å»¶ãçããå¯èœæ§ããããŸããConcurrent Modeã䜿çšãããšãReactã¯ãŠãŒã¶ãŒå ¥ååŠçãåªå ããããªããŒã·ã§ã³ããžãã¯ãè€éã§ãã£ãŠãUIã®å¿çæ§ãç¶æã§ããŸãããŠãŒã¶ãŒãã¿ã€ãã³ã°ãããšãReactã¯ããã«å ¥åãã£ãŒã«ããæŽæ°ããŸããããªããŒã·ã§ã³ããžãã¯ã¯ãã®åŸãåªå 床ã®äœãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ãšããŠå®è¡ããããŠãŒã¶ãŒã®ã¿ã€ãã³ã°äœéšã劚ããªãããã«ããŸããç°ãªãæåã»ããã§ããŒã¿ãå ¥åããåœéçãªãŠãŒã¶ãŒã«ãšã£ãŠãç¹ã«ããã»ããµã®æ§èœãäœãããã€ã¹ã§ã¯ããã®å¿çæ§ã¯éåžžã«éèŠã§ãã
äŸ2ïŒããŒã¿ååŸ
è€æ°ã®APIããã®ããŒã¿ã衚瀺ããããã·ã¥ããŒããèããŠã¿ãŸããããåŸæ¥ã®Reactã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¹ãŠã®ããŒã¿ãäžåºŠã«ååŸãããšããã¹ãŠã®ãªã¯ãšã¹ããå®äºãããŸã§UIããããã¯ãããå¯èœæ§ããããŸããConcurrent Modeã䜿çšãããšãReactã¯éåæã§ããŒã¿ãååŸããUIãæ®µéçã«ã¬ã³ããªã³ã°ã§ããŸããæãéèŠãªããŒã¿ãæåã«ååŸããŠè¡šç€ºããéèŠåºŠã®äœãããŒã¿ã¯åŸã§ååŸããŠè¡šç€ºããŸããããã«ãããåæããŒãæéãççž®ãããããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãããŸããäžçäžã§äœ¿çšãããæ ªåŒååŒã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ãããç°ãªãã¿ã€ã ãŸãŒã³ã®ãã¬ãŒããŒã¯ãªã¢ã«ã¿ã€ã ã®ããŒã¿æŽæ°ãå¿ èŠãšããŸããConcurrent Modeã§ã¯ãéèŠãªæ ªäŸ¡æ å ±ãå³åº§ã«è¡šç€ºããéèŠåºŠã®äœãåžå Žåæã¯ããã¯ã°ã©ãŠã³ãã§èªã¿èŸŒãããšã§ãäžçäžã®ããŸããŸãªãããã¯ãŒã¯é床ã§ãå¿çæ§ã®é«ãäœéšãæäŸã§ããŸãã
äŸ3ïŒã¢ãã¡ãŒã·ã§ã³
ã¢ãã¡ãŒã·ã§ã³ã¯èšç®ã³ã¹ããé«ãããã¬ãŒã èœã¡ãã«ã¯ã«ã¯ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããå¯èœæ§ããããŸããConcurrent Modeã䜿çšãããšãReactã¯ã¢ãã¡ãŒã·ã§ã³ãåªå ããä»ã®ã¿ã¹ã¯ãããã¯ã°ã©ãŠã³ãã§å®è¡ãããŠãããšãã§ãã¹ã ãŒãºã«ã¬ã³ããªã³ã°ãããããã«ããŸããã¢ãã¡ãŒã·ã§ã³ã¿ã¹ã¯ã«é«ãåªå 床ãå²ãåœãŠãããšã§ãReactã¯ã¢ãã¡ãŒã·ã§ã³ãã¬ãŒã ãæééãã«ã¬ã³ããªã³ã°ãããããšãä¿èšŒããèŠèŠçã«é åçãªäœéšãæäŸããŸããããšãã°ãååããŒãžéã®é·ç§»ã«ã¢ãã¡ãŒã·ã§ã³ã䜿çšããeã³ããŒã¹ãµã€ãã¯ãããã€ã¹ãå Žæã«é¢ä¿ãªããåœéçãªè²·ãç©å®¢ã«æµåçã§èŠèŠçã«å¿«é©ãªäœéšãä¿èšŒã§ããŸãã
Concurrent Modeãæå¹ã«ãã
Reactã¢ããªã±ãŒã·ã§ã³ã§Concurrent Modeãæå¹ã«ããã«ã¯ãåŸæ¥ã®`ReactDOM.render` APIã®ä»£ããã«`createRoot` APIã䜿çšããå¿ èŠããããŸãã以äžã«äŸã瀺ããŸãïŒ
import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';
const container = document.getElementById('root');
const root = createRoot(container); // TypeScriptã䜿çšããå Žå㯠createRoot(container!)
root.render( );
ãŸããã³ã³ããŒãã³ããConcurrent Modeãšäºææ§ãããããšã確èªããå¿ èŠããããŸããããã¯ãã³ã³ããŒãã³ããå¯äœçšãå¯å€ç¶æ ã«äŸåããªãçŽç²é¢æ°ã§ããã¹ãããšãæå³ããŸããã¯ã©ã¹ã³ã³ããŒãã³ãã䜿çšããŠããå Žåã¯ãããã¯ã䜿çšãã颿°ã³ã³ããŒãã³ããžã®ç§»è¡ãæ€èšããå¿ èŠããããŸãã
Concurrent Modeã§ã®ã¡ã¢ãªæé©åã®ãã¹ããã©ã¯ãã£ã¹
React Concurrent Modeã¢ããªã±ãŒã·ã§ã³ã§ã¡ã¢ãªäœ¿çšéãæé©åããããã®ãã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãïŒ
- äžèŠãªåã¬ã³ããªã³ã°ãé¿ããïŒ`React.memo`ã`useMemo`ã䜿çšããŠãpropsã倿ŽãããŠããªãã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãé²ããŸããããã«ãããReactãè¡ãå¿ èŠã®ããäœæ¥éãå€§å¹ ã«åæžãããããã©ãŒãã³ã¹ãåäžããŸãã
- é å»¶èªã¿èŸŒã¿ã䜿çšããïŒã³ã³ããŒãã³ãã¯å¿ èŠãªãšãã«ã®ã¿èªã¿èŸŒã¿ãŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®åæããŒãæéãççž®ãããå¿çæ§ãåäžããŸãã
- ç»åãæé©åããïŒæé©åãããç»åã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºãçž®å°ããŸããããã«ãããããŒãæéãæ¹åãããã¢ããªã±ãŒã·ã§ã³ã䜿çšããã¡ã¢ãªéãåæžãããŸãã
- ã³ãŒãåå²ã䜿çšããïŒã³ãŒããããªã³ããã³ãã§èªã¿èŸŒããããå°ããªãã£ã³ã¯ã«åå²ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®åæããŒãæéãççž®ãããå¿çæ§ãåäžããŸãã
- ã¡ã¢ãªãªãŒã¯ãé¿ããïŒã³ã³ããŒãã³ããã¢ã³ããŠã³ãããããšãã«ã䜿çšããŠãããªãœãŒã¹ãå¿ ãã¯ãªãŒã³ã¢ããããŠãã ãããããã«ãããã¡ã¢ãªãªãŒã¯ãé²ããã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ãåäžãããããšãã§ããŸããå ·äœçã«ã¯ããµãã¹ã¯ãªãã·ã§ã³ã®è§£é€ãã¿ã€ããŒã®ãã£ã³ã»ã«ãä¿æããŠããä»ã®ãªãœãŒã¹ã®è§£æŸãè¡ã£ãŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³ããããã¡ã€ãªã³ã°ããïŒReact Profilerã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããã«ããã¯ãç¹å®ããŸããããã«ãããããã©ãŒãã³ã¹ãæ¹åããã¡ã¢ãªäœ¿çšéãåæžã§ããé åãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
åœéåãšã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
ã°ããŒãã«ãªèŠèŽè åãã«Reactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå ŽåãåœéåïŒi18nïŒãšã¢ã¯ã»ã·ããªãã£ïŒa11yïŒãèæ ®ããããšãéèŠã§ãããããã®èæ ®äºé ã¯ãã¬ã³ããªã³ã°ã®éåæçãªæ§è³ªããé害ãæã€ãŠãŒã¶ãŒãç°ãªããã±ãŒã«ã®ãŠãŒã¶ãŒã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããããConcurrent Modeã䜿çšããéã«ã¯ããã«éèŠã«ãªããŸãã
åœéå
- i18nã©ã€ãã©ãªã䜿çšããïŒ`react-intl`ã`i18next`ãªã©ã®ã©ã€ãã©ãªã䜿çšããŠã翻蚳ã管çããç°ãªããã±ãŒã«ãåŠçããŸããUIããããã¯ããªãããã«ã翻蚳ãéåæã§èªã¿èŸŒãŸããããšã確èªããŠãã ããã
- æ¥ä»ãšæ°å€ããã©ãŒãããããïŒãŠãŒã¶ãŒã®ãã±ãŒã«ã«åºã¥ããŠãæ¥ä»ãæ°å€ãé貚ã«é©åãªãã©ãŒãããã䜿çšããŸãã
- å³ããå·Šãžèšè¿°ããèšèªããµããŒãããïŒã¢ããªã±ãŒã·ã§ã³ãå³ããå·Šãžèšè¿°ããèšèªããµããŒãããå¿ èŠãããå Žåã¯ãã¬ã€ã¢ãŠããšã¹ã¿ã€ãªã³ã°ããããã®èšèªãšäºææ§ãããããšã確èªããŠãã ããã
- å°åå·®ãèæ ®ããïŒæåçãªéããèªèããã³ã³ãã³ããšãã¶ã€ã³ãããã«å¿ããŠé©å¿ãããŸããããšãã°ãè²ã®è±¡åŸŽãç»åãããã«ã¯ãã¿ã³ã®é 眮ã§ãããæåã«ãã£ãŠç°ãªãæå³ãæã€ããšããããŸãããã¹ãŠã®ãŠãŒã¶ãŒã«çè§£ãããªãå¯èœæ§ã®ããæååºæã®ã€ãã£ãªã ãã¹ã©ã³ã°ã®äœ¿çšã¯é¿ããŠãã ãããç°¡åãªäŸãšããŠãæ¥ä»ã®ãã©ãŒãããïŒMM/DD/YYYY vs DD/MM/YYYYïŒããããããã¯é©åã«åŠçããå¿ èŠããããŸãã
ã¢ã¯ã»ã·ããªãã£
- ã»ãã³ãã£ãã¯HTMLã䜿çšããïŒã»ãã³ãã£ãã¯HTMLèŠçŽ ã䜿çšããŠãã³ã³ãã³ãã«æ§é ãšæå³ãæäŸããŸããããã«ãããã¹ã¯ãªãŒã³ãªãŒããŒããã®ä»ã®æ¯æŽæè¡ãã¢ããªã±ãŒã·ã§ã³ãçè§£ãããããªããŸãã
- ç»åã®ä»£æ¿ããã¹ããæäŸããïŒèŠèŠé害ã®ãããŠãŒã¶ãŒãç»åã®å 容ãçè§£ã§ããããã«ãåžžã«ç»åã®ä»£æ¿ããã¹ããæäŸããŠãã ããã
- ARIA屿§ã䜿çšããïŒARIA屿§ã䜿çšããŠãæ¯æŽæè¡ã«ã¢ããªã±ãŒã·ã§ã³ã«é¢ããè¿œå æ å ±ãæäŸããŸãã
- ããŒããŒãã¢ã¯ã»ã·ããªãã£ã確ä¿ããïŒã¢ããªã±ãŒã·ã§ã³å ã®ãã¹ãŠã®ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ãããŒããŒãã§ã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ããã
- æ¯æŽæè¡ã§ãã¹ãããïŒã¹ã¯ãªãŒã³ãªãŒããŒããã®ä»ã®æ¯æŽæè¡ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ããããã¹ãŠã®ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ããããã¹ãŠã®èšèªã§æ£ããã¬ã³ããªã³ã°ãããããã«ãåœéçãªæåã»ããã§ãã¹ãããŠãã ããã
çµè«
React Concurrent Modeã®ãªãœãŒã¹ã¹ã±ãžã¥ãŒãªã³ã°ãšã¡ã¢ãªãæèããã¿ã¹ã¯ç®¡çã¯ãããã©ãŒãã³ã¹ãé«ãå¿çæ§ã®è¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®åŒ·åãªããŒã«ã§ãããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãåªå ããéèŠã§ãªãã¿ã¹ã¯ãå»¶æããã¡ã¢ãªäœ¿çšéãæé©åããããšã§ãããã€ã¹ããããã¯ãŒã¯æ¡ä»¶ã«é¢ä¿ãªããäžçäžã®ãŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ãªäœéšãæäŸããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãããããã®æ©èœã掻çšããããšã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããã ãã§ãªãããã¹ãŠã®äººã«ãšã£ãŠããå æ¬çã§ã¢ã¯ã»ã¹ãããããŠã§ãã«è²¢ç®ããŸããReactãé²åãç¶ããäžã§ãConcurrent Modeãçè§£ãæŽ»çšããããšã¯ãçŸä»£çã§é«æ§èœãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ãšãªãã§ãããã