äžåºŠã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 次ã®ããããã£ã¹ãã«ã¯éã質åãšåçããããŸãã