äžåºŠãReact_JS Telegramãã£ããïŒãšããã§ããã·ã¢èªãã£ãããåå ïŒã§ããReactã¢ããªã±ãŒã·ã§ã³ã®ã©ãã«ããžãã¹ããžãã¯ãæ åœããã³ãŒããããã¹ããããšãã質åã«ã€ããŠè©±ãåããŸããã ããã€ãã®ãªãã·ã§ã³ãæèŠãåãããŸããã ããŠã ããããã£ã¹ããèšé²ããããšã«ããŸããïŒby @PetrMyazin ïŒã
ã¯ã©ã€ã¢ã³ãã®ã¿ã§ããžãã¹ããžãã¯ã䜿çšããç¹å®ã®äŸãèããŠã¿ãŸãããã ããŒã³èšç®ã¢ããªã±ãŒã·ã§ã³ã ãŠãŒã¶ãŒã¯ããã©ãŒã ã«åæããŒã¿ãå ¥åããŸããéé¡ãããŒã³æ¡ä»¶ããã®ä»ã®ãã©ã¡ãŒã¿ãŒã ãããŠããã®å Žã§çµæãäŸãã°ãéæãã®éé¡ãååŸããŸãã éæãã®éé¡ãèšç®ããããã®ããªãããŒãªã¢ã«ãŽãªãºã ã¯ãã¹ãŠæ¢ç¥ã§ãããJSé¢æ°ãšããŠå®è£ ãããŠããŸããfãšåŒã³ãŸããããããã¯ããã€ãã®ãã©ã¡ãŒã¿ãåããŸãããã©ãŒã ããã®åãããŒã¿ãabcd -ãããããžãã¹ããžãã¯ã§ãã
é¢æ°ãã¯ãªãŒã³ã§ããããšã«æ³šæããŠãã ããã çµæã¯å ¥åãã©ã¡ãŒã¿ãŒã®ã¿ã«äŸåããŸãã å¯äœçšã¯çºçãããã°ããŒãã«å€æ°ããã¯èªã¿åããŸããã ãŸãããã®é¢æ°ã¯ãReactã¢ããªã±ãŒã·ã§ã³ãAngularãEmberãjQueryãããã³VanillaJSã§ãåãããã«æ©èœããããããã¬ãŒã ã¯ãŒã¯ããç¬ç«ããŠåŒã³åºãããšãã§ããŸãã
ããããReact + Reduxã§ã€ã³ã¿ãŒãã§ã€ã¹ãæ§ç¯ããããšã«æ±ºããããããããžãã¹ããžãã¯ã®èšç®ããã€ããéå§ãããããšããçåãçããŸããã ãã®ããããã£ã¹ãã§ã¯ãåçŽåãããäŸã®ã¿ãæ€èšããããšãå床匷調ããŸããã¯ã©ã€ã¢ã³ãäžã®ãã¹ãŠã®èšç®ã§ããããµãŒããŒãžã®ãªã¯ãšã¹ãã¯ãããŸããã å®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããµãŒããŒãšã®éä¿¡ã«é¢é£ããããžãã¯ã®äžéšã確å®ã«ååšããŸãããæ¢åã®ããŒã¿ã䜿çšããŠã¯ã©ã€ã¢ã³ãäžã§å®å šã«èšç®ã§ããéšåããããŸãã ãããã£ãŠãããã«ãã¹ãŠã®æšè«ã¯ãã¯ã©ã€ã¢ã³ãã³ã³ãã¥ãŒãã£ã³ã°ãšãã第2éšã«æ£ç¢ºã«é©çšã§ããŸãã
ããŠããã©ãŒã ãèŠãŠãã ããã æ§æã¯æ¬¡ã®ãšããã§ãã1çµã®ããã¹ããã£ãŒã«ããã¹ã©ã€ããŒãããããããŠã³ãªã¹ãããã§ãã¯ããã¯ã¹ã ãããã®ãã£ãŒã«ãã®ãŠãŒã¶ãŒå ¥åå€ã¯ãé¢æ°fãžã®å ¥åãã©ã¡ãŒã¿ãŒã«ãªããŸãã æåã®è³ªåïŒããã£ãŒã«ãå€ãã©ãã«ã©ã®ããã«ä¿åããããã ãªãã·ã§ã³ã¯2ã€ã ãã§ããã³ã³ããŒãã³ãèªäœã®ããŒã«ã«ç¶æ ïŒãã§ãã¯ããã¯ã¹ãã¹ã©ã€ããŒãªã©ïŒããŸãã¯Reduxã¹ãã¢ã§ãã
ãã®å Žåãè€æ°ã®ã³ã³ããŒãã³ãã«ãŸãããããŒã«ã«ç¶æ ã¯äžäŸ¿ã§ãããªããªãã æçµçã«ãabcdãã©ã¡ãŒã¿ãããžãã¹ããžãã¯é¢æ°ã«æž¡ãããã«ããã¹ãŠã®å€ãåæã«ååŸããå¿ èŠããããŸãã å ±éã®ç¥å ïŒ ç¶æ ã解é€ããããšãå¿ããªãã§ãã ããïŒãŸãã¯Redux-storeã®ããããã§ããã¹ãŠã1ãæã«ä¿åããããšæããŸãã ãã®ããããã£ã¹ãã®ãããã¯ã¯Reduxã¢ããªã±ãŒã·ã§ã³ã®ããžãã¹ããžãã¯ã確èªããããšãªã®ã§ãReduxã«ä¿åããŸãã
ã€ãã³ããã§ãŒã³å šäœã®æé ãå®è¡ããããžãã¹ããžãã¯é¢æ°fãåŒã³åºãã®ãæé©ãªã¿ã€ãã³ã°ãå€æããŸãã
ãã®ããããŠãŒã¶ãŒã¯ãã©ãŒã äžã®äœããå€æŽããããå ¥åããã¹ãããã¯ã¹ã«æ°ããæ°åãå ¥åããããã¹ã©ã€ããŒã移åãããããŸãã ç¹å®ã®handleChangeãã³ãã©ãŒãæ©èœããŸã-ãããããžãã¹ããžãã¯ãåŒã³åºãæåã®å Žæã§ãã ãã ããhandleChangeãã³ãã©ãŒã§ã¯ãçŸåšã®å€æŽãããå ¥åãã£ãŒã«ãã®å€ã®ã¿ãevent.target.valueããèªã¿åãããšãã§ãããã©ãŒã ããŒã¿ã®æ®ãã®éšåã¯ãŸã å©çšã§ããŸããã é¢æ°fã¯çŽç²ã§ãããã°ããŒãã«å€æ°ããããŒã¿ãèªã¿åããªãããšãæãåºãããŠãã ããã abcdãã©ã¡ãŒã¿ãŒã®ã¿ãåãåããxã®çµæãè¿ããŸãã ã€ãŸããhandleChangeãã³ãã©ãŒèªäœã¯é©åã§ã¯ãããŸããã
次ã®ã¹ãããã¯ãã¢ã¯ã·ã§ã³äœææ©èœã§ãã ããã§ã Redux-thunkã䜿çšããŠãç¶æ ãªããžã§ã¯ãå šäœãååŸã§ããŸãã fãåŒã³åºãabcdãååŸããŸãã ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã¯åªããåè£ã§ããèŠããŠãããŠãã ããã
ç¶ããŸãããã å®è¡ã®ã¹ã¬ããã¯ããã¹ãŠã®ãªãã¥ãŒãµãŒæ©èœãèµ·åããŸãã ã¬ãã¥ãŒãµãŒã¯ããŸããŸãªæ¹æ³ã§å®è£ ã§ããŸãã ããšãã°ããã£ãŒã«ãaããã£ãŒã«ãbããã£ãŒã«ãcãããã³ãã£ãŒã«ãdã®4ã€ã®åå¥ã®é¢æ°ãæºåããŸãã ãã®å Žåãåã¬ãã¥ãŒãµãŒã¯ãå ¥åãã£ãŒã«ãã®ä»¥åã®ç¶æ ãšã¢ã¯ã·ã§ã³ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸãã é¢æ°fãéå§ããã«ã¯ãabcdã®ãã¹ãŠã®å€ãåæã«å¿ èŠã§ãã ãã®ãããªã¬ãã¥ãŒãµãŒã®çµç¹ã§ã¯ãã¢ã¯ã·ã§ã³ãªããžã§ã¯ãå ã®4ã€ã®abcdå€ãã¹ãŠã転éããããšãå¯äžã®ãã£ã³ã¹ã§ãã ã€ãŸããæ¬è³ªçã«ã¯ãã¹ãã¢ã®ã»ãŒå®å šãªã³ããŒãã¢ã¯ã·ã§ã³ãªããžã§ã¯ãã«æž¡ããŸãã ããŸãèãããŸãããããæ°ããããŸããã
ã¬ãã¥ãŒãµãŒãæŽçãããã1ã€ã®æ¹æ³ã¯ããã¹ãŠã®ãã©ãŒã ãã£ãŒã«ããäžåºŠã«æŽæ°ããåäžã®ã¬ãã¥ãŒãµãŒã䜿çšããããšã§ããããã¯ãformDataã¬ãã¥ãŒãµãŒã®äžçš®ã§ãã ãã©ãŒã ãã£ãŒã«ãã®ä»¥åã®ç¶æ ãabcdãå«ããªããžã§ã¯ããšããŠååŸããå€æŽãããå€ãæŽæ°ããŠãããããžãã¹ããžãã¯é¢æ°fãå®è¡ããŸãã ããããèšç®çµæãã€ãŸãéå°æ¯æxãã©ãã«è¿œå ããã®ã§ããããïŒ formDataã¬ãã¥ãŒãµãŒå ã§ãxãä¿åã§ããå¯äžã®å Žæã¯åããªããžã§ã¯ãå ã«ãããŸãããã®ãªããžã§ã¯ãã«ã¯ãabcdãšxãšãã5ã€ã®ãã£ãŒã«ãããããŸãã ãã®ãªãã¥ãŒãµãŒã®ååãformDataAndResult-reducerã«å€æŽããã®ã¯æ£ããããšã§ãã 圌ã¯ãã¹ãŠãè¡ããŸãããã©ãŒã ã®å€åãèŠããŠãããããžãã¹ããžãã¯ã®èšç®çµæãèŠããŠããŸãã 5ã€ã®ãã£ãŒã«ãã®1ã€ã®å€§ããªãªããžã§ã¯ãã«ãã¹ãŠå«ãŸããŠããŸãã ããã¯ããŸãè¯ãèãããŸããã èèªæžå°å€ãå€ãããã Reduxã¯ãã¬ãã¥ãŒãµãŒã®æ§æã®ããã®æ©èœçã¢ãããŒããèšå®ããŸãã ãããŠãããã§ã¯ããã¹ãŠãäžåºŠã«ç®¡çããããã®1ã€ã®å€§ããªé¢æ°ãäœæããŠããŸãã
次ã«ãã³ã³ããã³ã³ããŒãã³ãã§ã»ã¬ã¯ã¿ãŒãèµ·åããŸãã ã»ã¬ã¯ã¿ãŒã¯mapStateToPropsã®é¢æ°ã§ãã æçµçµæxã衚瀺ããã³ã³ããŒãã³ãã®ã»ã¬ã¯ã¿ãŒã«èå³ããããŸãã ã¯ããããã§ããžãã¹ããžãã¯é¢æ°ãåŒã³åºãããšãã§ããŸãã ã»ã¬ã¯ã¿ãŒã¯ç¶æ å šäœãããã³æ°ããabcdå€ãæã€æ¢ã«æŽæ°ãããç¶æ ã«ã¢ã¯ã»ã¹ã§ããŸãïŒããã«ã€ããŠã¯å°ã匷調ããŸãïŒã ã»ã¬ã¯ã¿ãŒå ã§åŒã³åºãããé¢æ°fã®èšç®çµæã¯ãéæãã®éé¡ã衚瀺ããã³ã³ããŒãã³ãã®å°éå ·ã«åé¡ãããŸã-ããã¯å®å šã«æ©èœãããœãªã¥ãŒã·ã§ã³ã§ãã
ã»ã¬ã¯ã¿ãŒã«ãªãå Žåãããžãã¹ããžãã¯ãåŒã³åºãæåŸã®æ©äŒã¯ãã³ã³ããŒãã³ãxã®renderã¡ãœããã§é¢æ°fãçŽæ¥åŒã³åºãããšã§ãããã®ã¡ãœããã¯ãæ¯æãè¶ éé¡ã衚瀺ããŸãã ãããè¡ãã«ã¯ãå°éå ·ã§ã4ã€ã®å¿ é abcdå€ãã¹ãŠãã¹ãããããå¿ èŠããããŸãã ç§ã®æèŠã§ã¯ãããã¯ä»¥åã®ãã®ããããšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããã ã»ã¬ã¯ã¿ãŒã¯ãèšç®ãéå§ããæ¢è£œã®xãæž¡ããŠè¡šç€ºããã®ã«é©åãªå Žæã®ããã§ãã
ãã¹ãŠã®ãªãã·ã§ã³ãæ€èšããŸããã ãŸããã»ãšãã©ãã¹ãŠã ã³ã³ããŒãã³ãã§èšç®ãéå§ãããªã©ã®ç©ã®èšããªãæ¹æ³ã«ã€ããŠã¯ãå°éå ·ãåãåããããŸãã¯äœãä»ã®ãã®ãæãã€ãããšãã§ããŸããã ããããæéãç¡é§ã«ããªãããã«ããŸãããã
åèšã§ãããžãã¹ããžãã¯ãèµ·åããããã®2ã€ã®æçœãªåè£ããããŸããããã¯ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒãšã³ã³ããŒãã³ãã»ã¬ã¯ã¿ãŒxã§ãã
ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã®è©³çŽ°ãã芧ãã ããã æåã«ãããã©ãŒã ã®ãã¹ãŠã®ãã£ãŒã«ãã«å¯ŸããŠ1人ã®ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã䜿çšãããããã£ãŒã«ãããšã«åå¥ã®é¢æ°ã䜿çšããããšãã質åã«çããŸãã å¥ã ã®é¢æ°ãäœæãããšã4ã€ã®ã¢ã¯ã·ã§ã³äœæè ãchangeAãchangeBãchangeCãchangeDãåŸãããŸãã å®éã«ã¯ã2滎ã®æ°Žã®ããã«äºãã«äŒŒãŠããŸãã ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒå ã§é¢æ°fãåŒã³åºãå Žåããããã®åŒã³åºãã4ã€ã®é¢æ°ãã¹ãŠã®ã³ãŒãã«ã³ããŒããå¿ èŠããããŸãã ã³ããŒïŒããŒã¹ããããããã Reduxãšå¯æ¥ã«é£æºããŠãã人ãªã誰ã§ããå®åã³ãŒãã¯æããŸããã ããã§ãã¡ã¯ããªãæŽçã§ããŸã-ã³ãŒããã³ããŒããªãããã«ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒãäœæããŸãã
ãããããã®æ¹åã«æ·±ãå ¥ããªãããšããå§ãããŸããfieldNameãšnewValueãåãå ¥ããã¢ã¯ã·ã§ã³äœæé¢æ°ã1ã€èª¬æããŸãããã fieldNameã¯ããŠãŒã¶ãŒãäœããå ¥åããå ¥åãã£ãŒã«ãã瀺ãæååå€æ°ã§ãã Redux-thunkã䜿çšãããšãã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒå ã®çŸåšã®ç¶æ å šäœã«ã¢ã¯ã»ã¹ã§ããŸããããã¯ãé¢æ°fãåŒã³åºãããã«å¿ èŠãªãã®ã§ãã
ãã ããé¢æ°fã¯ææ°ã®abcdå€ãååŸããå¿ èŠããããReduxãµã³ã¯ã®ãããã§ååŸããç¶æ ã¯ãã§ã«å€ãç¶æ ã§ããããšã«æ³šæããŠãã ããã ãã£ãŒã«ãã®1ã€ã«ã¯å€ãæå³ããããŸãã é¢æ°fãåŒã³åºãåã«ãnewValueã眮ãæãããã©ã¡ãŒã¿ãŒãç解ããå¿ èŠããããŸãã JSã·ã³ã¿ãã¯ã¹ã®èŠ³ç¹ãããããã§ã¯å€ãã®ãšã¬ã¬ã³ãã§ããã»ã©ããã§ã¯ãªããœãªã¥ãŒã·ã§ã³ãæãã€ãããšãã§ããŸãã ãã ããã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒå ã§fãåŒã³åºãããå Žåã¯ãçŸåšã®ç¶æ ãã€ãŸã ãã§ã«æ代é ãã§ãå°çããã°ããã®newValueãšçµã¿åãããŸãã ããã¯ããŸã£ããåãããšãè¡ããªãã¥ãŒãµãŒé¢æ°ãæãåºãããŸãããïŒ ææ°ã®abcdå€ã圢æããããã«ãã¢ã¯ã·ã§ã³äœæè å ã§ã¬ãã¥ãŒãµãŒã®ããžãã¯ãè€è£œããå¿ èŠãããããšãããããŸãã
ããã«ãã£ãšã ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒå ã§ããžãã¹ããžãã¯é¢æ°ãåŒã³åºããçµæãååŸãããšä»®å®ããŸãããä»åºŠã¯xã®çµæã®å€ããæ¯æãè¶ éé¡ã衚瀺ããã³ã³ããŒãã³ãã«æž¡ãå¿ èŠããããŸãã é©åãªãªãã¥ãŒãµãŒãšã»ã¬ã¯ã¿ãŒãäœæããŠãReduxã¹ãã¢ã転éããå¿ èŠããããŸãã ãããè¡ã£ãåŸãã¹ãã¢ã¯abcdãšãã圢åŒã®ããŒã¿ãæ ŒçŽãããšåæã«ãxãè©äŸ¡ããçµæãæ ŒçŽããããšã«æ³šæããŠãã ããã ã¹ãã¢ã¯åé·ã§ããããšãå€æããŸããã ãœãŒã¹ããŒã¿ã«å ããŠã埮åèšç®ã®çµæãå«ãŸããŸãã ããã¯å€ãã®çç±ã§è¯ããããŸããã 以åã®ãªãªãŒã¹ã§ãããã®ããã€ãã«ã€ããŠèª¬æããŸããã çµè«ïŒã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã¯ãããžãã¹ããžãã¯é¢æ°ãåŒã³åºãããã®é©åãªéžæè¢ã§ã¯ãããŸããã
ã»ã¬ã¯ã¿ããããžãã¹ããžãã¯é¢æ°ãåŒã³åºããªãã·ã§ã³ã«æž¡ããŸãã ç§ã¯ãã§ã«ãã®ã¡ã«ããºã ã«ã€ããŠäžèšã§èšåããŸããã éæãé¡ã衚瀺ããã³ã³ããŒãã³ãã®ã»ã¬ã¯ã¿ãŒã¯ãã¹ãã¢å šäœã«ã¢ã¯ã»ã¹ã§ããŸãã ãããŠãæãé¢é£ããabcdå€ã ã¬ãã¥ãŒãµãŒã³ãŒãã®éè€ã¯ãããŸããã ã»ã¬ã¯ã¿ãŒå ã«abcdãããå ŽåãfãåŒã³åºããxã®çµæãå°éå ·ãšããŠãéæãé¡ã衚瀺ããã³ã³ããŒãã³ãã«æž¡ããŸãã ã³ãŒãã®éè€ãåé·æ§ã®ãªãã·ã³ãã«ã§è«ççãªã ã»ã¬ã¯ã¿ã¯ãããŒã¿ã®çŽç²ãªé¢æ°ã§è¡šãããããžãã¹ããžãã¯é¢æ°ãåŒã³åºãã®ã«æé©ãªå Žæã§ãã
ã¯ã©ã€ã¢ã³ãã§ã®ã³ã³ãã¥ãŒãã£ã³ã°ã®ã¿ãæ€èšããæåŸã®ãã¬ãŒãºã«çŠç¹ãåœãŠãŸãã ããªãã®ããžãã¹ããžãã¯ãçŽç²ãªæ©èœã§ã¯ãªãããµãŒããŒãžã®æ è¡ã䌎ãããã»ã¹å šäœã§ããå Žåãããªãã¡ ããã€ãã®å¯äœçšãããå Žåãããã¯å¥ã®è°è«ã®ãããã¯ã§ãã ããã§ã¯ãã¢ã¯ã·ã§ã³äœæè ãšããã«ãŠã§ã¢ã®äž¡æ¹ã«æ³šæãæãã ãã§ãã ããããããã«ã€ããŠã¯ãŸãå¥ã®æ©äŒã«è°è«ããŸãã
Reactã§æžããŠç¹æ ããŸãããïŒ
PS 次ã®ããããã£ã¹ãã«ã¯éã質åãšåçããããŸãã