Reduxãªããžããªããã©ããŒããŠãããããŸã 詳ãã調ã¹ãŠããªãå ŽåããŸãã¯ãã®åºæ¬çãªåŽé¢ã®ããã€ãã«ã€ããŠæ··ä¹±ããŠããå Žåã¯ãEggheadãç§ã®Getting Started withReduxã·ãªãŒãºãå ¬éããããšãç¥ã£ãŠå¹žãã§ãã
ããã¥ã¡ã³ãã®ãåºæ¬ãã®éšåãšåããããã¯ãã«ããŒããŠããŸãããããŸãããã°ãããå°ãæ·±ãæãäžããŠãReduxã®åºæ¬ã_æ¬åœã«_ç解ã§ããããã«ããŸãã
Redux on Eggheadã«é¢ããã³ã³ãã³ããããã«äœæããäºå®ã§ããä»åã¯ããµãã¹ã¯ã©ã€ããŒã®ã¿ã察象ãšããŠããŸãã ããé«åºŠãªãããã¯ãåãäžããŸãã ç¹å®ã®ææ¡ãããã°ããã®ã¹ã¬ããã§ç¥ãããŠãã ããïŒ
ïŒ+1ïŒ
ïŒ+1ïŒ
ã·ãªãŒãºã®æåã®16ãšããœãŒããèŠãã°ããã§ããããããã¯ãç§ãåããŠããäŒç€Ÿã®ç€Ÿå ãã¬ãŒãã³ã°ã«äœ¿çšããå¯èœæ§ãé«ãåªãããªãœãŒã¹ã ãšæããŸãã ãã ããç¶æ ããªãŒã«ãã¬ãŒã³ãªããžã§ã¯ããšãã£ãŒãããªãŒãºã®ã¿ã䜿çšãã immutable-jsã®ãã
ããã«ã€ããŠã®ããªãã®èããç¥ãããšã¯çŽ æŽãããããšã§ãã
Immutableãããã¯ã¹ã«æå ¥ãããšãReduxãšImmutable APIãåºå¥ããããšãåŠã¶å¿ èŠãããåå¿è ãæ··ä¹±ãããããImmutableãå¿ èŠã§ãããšæ³å®ãããããå¯èœæ§ããããŸãã
Immutableãããã¯ã¹ã«æå ¥ãããšãReduxãšImmutable APIãåºå¥ããããšãåŠã¶å¿ èŠãããåå¿è ãæ··ä¹±ãããããImmutableãå¿ èŠã§ãããšæ³å®ãããããå¯èœæ§ããããŸãã
ããããŸãããçã«ããªã£ãŠããŸãã ãã®æ±ºå®ã®èåŸã«ããããªãã®èããç¥ã£ãŠããã®ã¯è¯ãããšã§ã:-)ã
@smashercosmoãèšã£ãããšïŒ+1ïŒ
ãŠããããã¹ãã TDDã
@catelandãèšã£ãããšïŒ+1ïŒ
ç§ã¯ããªãã®ã¹ãã«ã»ããã«éåžžã«æéãåããŠãããšèšããªããã°ãªããŸããããã®æ¹æ³ã§ãè±å¯ãªããã¥ã¡ã³ããšç°¡æœãªãã¥ãŒããªã¢ã«ãåããåªããjsã©ã€ãã©ãªãäœæã§ããŸãã
ãã¹ãŠã®ãããªãèŠãåŸãç§ã¯ã¡ãŒã«ã§éãç¹å®ã®ãããªã«ã€ããŠããããã®ãã£ãŒãããã¯ãæã£ãŠããŸãã çµè«ã¯ãããã¯Reduxã®çŽ¹ä»ä»¥äžã®ãã®ã§ãããšããããšã§ãã ã³ãŒããã©ã¯ãã£ã¹ãã³ã³ããŒãã³ãã¢ãŒããã¯ãã£ãªã©ãã«ããŒããŸãã ããã¯æ¬åœã«çŽ æŽããããéåžžã«æè²çã§ãã ãããªã¯3ã€ã®ã°ã«ãŒãã«åããããšãã§ãããšæããŸãã åºæ¬çãªReduxãèå°è£ã§ã®ReduxãReactã䜿çšããReduxã
ä»åŸã®ãããªã§ã¯ãç¹å®ã®æŠå¿µã«åå¿ããããšãå°ãªãããéåæã¢ã¯ã·ã§ã³ãšãã¹ãã«ã€ããŠãã£ãšè©³ããèŠãŠãããããšæããŸãã
éåžžã«ãããã£ãããããç¶ããŠãã ããïŒ :)
ãããª21ã§ã¯ãTodoAppã³ã³ããŒãã³ãã¯ã¯ã©ã¹ã§ããå¿ èŠã¯ãªããé¢æ°ã§ããå¯èœæ§ãããããšã«æ³šæããŠãã ããã ãã®å®çŸã«è³ã£ãçµç·¯ã説æã§ããã°çŽ æŽããããšæããŸãããããæ©èœã³ã³ããŒãã³ããšããŠé©ããŠããçç±ãšãããã«ãã£ãŠã©ã®ãããªã¡ãªãããåŸãããã®ã§ããããã
ããããããããã
@smashercosmoã®ãªã¹ãã®é ç®3ãç¥ãããã§ãã
@wpannellãèšã£ãããšïŒ ãŠããããã¹ã/ TDDïŒ
ãŸããé«åºŠãªããã¥ã¡ã³ãã§ã«ããŒãããŠãããããã¯ã«é¢ãããããªãèŠãããšæããŸãã
ãŠããããã¹ãã«é¢ããŠãå
·äœçã«äœã«èå³ããããŸããïŒ
ã¬ãã¹ã³5ã11ã12ã¯ãã¬ãã¥ãŒãµãŒã®åäœãã¹ãã®æ¹æ³ã瀺ããŠããŸãã
...ããã¯è¯ã質åã§ãã ã¢ã«ãã¹ãã®å Žåãããã»ã¹ã¯å€§ããå€ãããŸããïŒ
ããŸãã ããããããã¯äžé£ã®é«åºŠãªã¬ãã¹ã³ã«ãšã£ãŠè¯ããããã¯ã ãšæããŸãã ãŠããããã¹ãã¬ãã¥ãŒãµãŒãã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒãã³ã³ããŒãã³ããªã©ã
ãŸããçŽ æŽããããããªã ãã§ã«reduxãç解ããŠããŸãããããã¯ããããã§ããã
ããé«åºŠãªãããªãäœæããŠããå Žåã¯ãéåæã¢ã¯ã·ã§ã³/ããã«ãŠã§ã¢ããå§ãããŸãã
ãŠããããã¹ããå®éã«ã«ãã¬ããžãå¿
èŠãšãããšã¯æããªãã§ãã ããã ã¬ãã¥ãŒãµãŒé¢æ°ãåŒã³åºããŠãããããã¢ãµãŒãã§ããŸããïŒ
ãããã¢ã«ãã¹ãã§expect
ã©ãããã以å€ã«ãå®éã«ã¯ããã»ã©å€ãã¯ãªããšæããŸãã ïŒãããïŒ
ãããããããšã«ããã¹ãŠããšãŠãã·ã³ãã«ã§ãïŒ
ãªããžã§ã¯ãIDããã·ã¥ã«ããäžå€æ§ïŒäŸïŒ [post._id]: {...post}
ïŒã
reduce
é¢æ°ã«é床ã«äŸåããŠãAPIãšã³ãã£ãã£ã®é
åãååŸããããã䜿çšããŠIDããã·ã¥ãçæããŠããããšã«æ°ä»ããŸããã normalizrãããã®äžéšãåŠçããããšã¯ç¥ã£ãŠããŸããããã€ã³ãAããBã«ç§»åããEggheadIOãããªã«äŒŒããããªã欲ããã§ããããã¯ãReduxããŒã¹ã®ãã®ã ãã§ã¯ãªããéåžžã«çµ¡ã¿åã£ãŠããŸãã
@raquelxmoss
ãããª21ã§ã¯ãTodoAppã³ã³ããŒãã³ãã¯ã¯ã©ã¹ã§ããå¿ èŠã¯ãªããé¢æ°ã§ããå¯èœæ§ãããããšã«æ³šæããŠãã ããã ãã®å®çŸã«è³ã£ãçµç·¯ã説æã§ããã°çŽ æŽããããšæããŸãããããæ©èœã³ã³ããŒãã³ããšããŠé©ããŠããçç±ãšãããã«ãã£ãŠã©ã®ãããªã¡ãªãããåŸãããã®ã§ããããã
ããã¯å®éãç§ã®åŽã§ã®ããããªã¬ãã¹ã³èšç»ã§ããã æåããæ©èœçãªã³ã³ããŒãã³ãã«ããããšãã§ããã®ã¯æé
ãã«ãªããŸã§æ°ã¥ããŸããã§ããã ã¯ã©ã¹ãããé¢æ°ã䜿çšããå©ç¹ã¯åçŽãã§ãããããã§ããéããã€ã§ããããå®è¡ããŠãã ããã åºæ¬çã«ã componentDidMount
ãstateã®ãããªã©ã€ããµã€ã¯ã«ããã¯ãå¿
èŠãªãå Žåã¯ãæ©èœã³ã³ããŒãã³ãã䜿çšããŸãã
ãããã®ã³ãŒããå®éã®ãã£ã¬ã¯ããªæ§é ã«åå²ããŠåœ¹ç«ã€ããã«ããæ¹æ³ã«ã€ããŠã®ã¬ãã¹ã³ãèŠã€ããŸãã ãã¹ãŠãæã£ãŠããéããããããæ©èœããããšã¯ããã£ãŠããŸããããã©ã«ããŒã®åœåèŠåïŒã³ã³ããŒãã³ã/ã³ã³ãããŒ/ã¹ãã¢/ã¬ãã¥ãŒãµãŒãªã©ïŒãã©ã®çš®é¡ã®ãã¡ã€ã«ãã©ã®ãã©ã«ããŒã«å ¥ãã®ããªã©ããå§ãããŸãã
é«åºŠãªã¬ãã¥ãŒãµãŒæ§æããé¡ãããŸãã
è€éãªã³ã³ããŒãã³ãã®åå©çšïŒã¬ãã¥ãŒãµãŒãŸãã¯è€æ°ã®ã¬ãã¥ãŒãµãŒãäžé£ã®ã¢ã¯ã·ã§ã³ãã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒããµãŒããŒåŽAPIãžã®ã¢ã¯ã»ã¹ãredux圢åŒãªã©ã®ããã€ãã®Reactã³ã³ããŒãã³ãã§æ§æãããŠããŸãããããçŸå®çãªã¢ããªåºæã§ãïŒã ããã«ã¯ãã¢ãžã¥ã©ãŒãã£ã¬ã¯ããªæ§é ã®ç·šæãå«ãŸããŸãã
å
šéšèŠãŠããšãŠãè¯ãã£ãïŒ ES6 / 7æ§æïŒ Object.assign
ãããªïŒã®äœ¿çšãReact 0.14é¢æ°ã³ã³ããŒãã³ããããã³äžå€ã®ãã®ã®åé¿ã«æè¬ããŸãã
ãããããæšå¥šãããã³ãŒãã¢ãŒããã¯ãã£ã説æãããããªã§ãã
ãããŠãES6 / 7æ§æã䜿çšããããã«ããã¥ã¡ã³ããæŽæ°ããŸããïŒ ïŒPRã¯ãã®æ¹åã«æè¿ãããŸããïŒïŒ
åäœãã¹ããAPIããã«ãŠã§ã¢ã®äœæãReduxã§ã®OAuth /ããçš®ã®ãŠãŒã¶ãŒèªèšŒã®å®è¡ãreduxã§ã®Immutableã®äœ¿çšïŒã»ããã¢ããæ¹æ³ããã¹ããã©ã¯ãã£ã¹ãªã©ïŒ
ãã®ã·ãªãŒãºã¯ãReduxãåäžååç¶æ ãããã³é¢é£ããå²åŠã®åªããå ¥éæžãšããŠåœ¹ç«ã¡ãŸãã ç§ã¯ããªããèªç¥çéè² è·ãèªçºããããšãé¿ããªãããã³ã¢ååã«çŠç¹ãåããããšããçŽ æŽãããä»äºããããšæããŸããã äœæ¥ããç°å¢ãç°¡åã«è€è£œã§ãããããå®è·µçãªéšåãããã«èŠªãã¿ããããªããŸãã
@gaearonãµã³ãã«åç»ã®æ§é åã¢ã¯ã·ã§ã³ã¯ãæåããæšæºã®{ type: string, payload: Object }
ãªããããšæããŸããïŒ ãã€ããŒããã¢ã¯ã·ã§ã³ãªããžã§ã¯ãèªäœã«é
眮ãããã«ãŠã³ã¿ãŒãªã¹ãã®äŸã«ã€ããŠè©±ããŠããŸãã { type: string, index: number }
ã ããã¯ç§ã«ã¯ã¢ã³ããã¿ãŒã³ã®ããã«èŠããŸãã
ãµã³ãã«åç»ã®æ§é åã¢ã¯ã·ã§ã³ããæåããæšæºã®{typeïŒstringãpayloadïŒObject}ã«ããããšæããŸããïŒ ãã€ããŒããã¢ã¯ã·ã§ã³ãªããžã§ã¯ãèªäœã«é 眮ãããã«ãŠã³ã¿ãŒãªã¹ãã®äŸã«ã€ããŠè©±ããŠããŸãã {ã¿ã€ãïŒæååãã€ã³ããã¯ã¹ïŒæ°å€}ã ããã¯ç§ã«ã¯ã¢ã³ããã¿ãŒã³ã®ããã«èŠããŸãã
ããã¯æ±ºããŠã¢ã³ããã¿ãŒã³ã§ã¯ãããŸããã ããã¯éåžžã®ã¢ã¯ã·ã§ã³ãªããžã§ã¯ãã§ãã FSAã¯åé¡ãããŸããããããã¯_ã³ã³ãã³ã·ã§ã³_ã§ãã Reduxèªäœã«ã¯ããã®èŠåã«äŸåãããããã®èŠåããå©çãåŸãããããã®ã¯ãªãããã匷å¶ããããããŸããã
人ã
source
ãå
ã®Fluxããã¥ã¡ã³ãã®payload
ã source
ã«ã€ããŠããããçš®é¡ã®éæ³ã®ããšãèããŠããŸããã 圌ãã¯ããªãããããååšããã®ããç解ãããããããå¿
èŠãã©ããã泚ææ·±ãè©äŸ¡ããããšãªããç²ç®çã«ãããã®ãã®ãã³ããŒããŸããã ãã®åŸã圌ãã¯Fluxãè€éã§åé·ã§ããããšã«äžæºãæŒãããŸããããå®éã«ã¯å€ãã®å Žåãåé·ãªïŒãã ãå¿
é ã§ã¯ãªãïŒéšåãèªåã§ã³ããŒããŸããã
ãããã®ã¬ãã¹ã³ã§ã¯ãReduxã®éèŠãªéšåã®ã¿ãæããŸãã å®æ°ãå°å ¥ããªãããšã«æ³šæããŠãã ããããªããªãã人ã ã¯å®æ°ã«éäžããããŠãããããå®éã«ã¯éèŠã§ã¯ãªãããšãèŠéããŠããããã§ãã æååã«ããã€ãã®ã¿ã€ããã¹ãããåŸã¯ãæåãããã¥ãŒããªã¢ã«ãããªã«å®æ°ãå ¥ããå Žåããããå®æ°ã®å©ç¹ãç解ããå¯èœæ§ãé«ããªããŸãã FSAã®ãããªä»ã®æ £ç¿ã«ã€ããŠãåãããšãèšãããšæããŸãã䟿å©ã ãšæããªãããã²äœ¿ã£ãŠãã ãããããããã¬ãã¹ã³ã§èŠæ±ãããªãå Žåã¯ã説æããŸããã
@gaearon OKã
@sompylasar
äŸã¯ããããªãã¥ãŒããªã¢ã«ãããèŠåã衚瀺ããæ¹ãè¯ããšæããŸãã äŸãšããŠã¯ãããããã®ååã«åºã¥ããŠã³ãŒããæ§ç¯ããæ¹æ³ã¯æ¬¡ã®ãšããã§ãããšããæèŠãããããããªã¯ãããã®ååèªäœã«é¢ãããã®ã§ãã ããããããŸããŸãªäŸã§ããŸããŸãªèŠåã衚瀺ãããçç±ã§ãããããžã§ã¯ããéå§ããåã«ãã»ãšãã©ã®äººã¯ããŸããŸãªäŸã調ã¹ãŠãããŸããŸãªæ¹æ³ãè©ŠããŠã¿ãŸãã
ãŸããFSAã«åŸããªãããšã«ã€ããŠæ§é åãããŠããªããã®ã¯ãŸã£ãããããŸããã { type: 'STUFF', id: 1 }
ã¯æ¬è³ªçã«{ type: 'STUFF', payload: { id: 1 } }
ããæªãã¯ãããŸããã ããã¯åã«å¥œã¿ãšïŒæã«ã¯ïŒããŒã«ã®æ
£ç¿ã®åé¡ã§ãã ã¢ã¯ã·ã§ã³ãªããžã§ã¯ããpayload
å°ãªãããŠããã°ãæäœãé£ãããªãããšã¯ãããŸããã
ããã«eggheadã§ãªãªãŒã¹ãããããã€ãã®reduxãŠããããã¹ãã¬ãã¹ã³ããããŸãð
ãã³ãæåã«ã¯ã©ãã¯ããããã«ãReduxã®ã¬ãã¹ã³ããã°ãã延æããŸããã å®å šã«åŸ ã€äŸ¡å€ããããããããããã€ãã
ãæ £çšçãªReduxã§ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããã¯çŽ æŽãããäžçŽã³ãŒã¹ã«ãªããŸãð
@joelhooksäž¡æ¹ãšãçŽ æŽãããã§ããïŒ
jsbinã䜿çšãã代ããã«ãwebpackãšããããªããŒãã䜿çšããŠãããžã§ã¯ããã»ããã¢ããããŠãã ããã ãããçŸå®ã®äžçã«æã¡èŸŒãã§ãã ããã ç§ã¯ãããreduxã«åºæã®ãã®ã§ã¯ãªãããšãç¥ã£ãŠããŸãããããã¯ããŸããããšæããŸãããããŠããªãã¯ãããæããã®ã«ãµãããã人ã§ã:)
Danã®äŸãšWebpackæ§æã®ãããžã§ã¯ãæ§é ãèŠæ±ãã人ã
https://github.com/urbanvikingr/todoããã§ãã¯ããŠ
ãããªã®Danã®ã³ãŒãã«åãããŠãReactããã¥ã¡ã³ãã§ReduxãæŽæ°ããããšãçŽæããŸããã ããã¯æ¬¡ã®2é±é以å ã«å®äºããã§ããã-ç§ã®ããªããŒãããžã§ã¯ãïŒïŒ-ã楜ãã¿ã«ã
Egghead.ioãããªãžã®ç§ã®ãŠã£ãã·ã¥ãªã¹ãïŒ
ãžã£ã¹ãã³ã«ããã¢ã¯ã·ã§ã³/ã¬ãã¥ãŒãµãŒãã¹ã
ããã«ãŠã§ã¢ã®è©³çŽ°ïŒãµã³ã¯/ãããã¹ïŒ
ã¹ã¯ãªãŒã³ãã£ã¹ãã¯ãReduxã®éåžžã«äŸ¿å©ãªçŽ¹ä»ã§ãã ç§ãèãããã®ã¯ãã«ãŒãã£ã³ã°ãšãµãŒããŒåŽã®ã¬ã³ããªã³ã°ãè¡ãããã®Reduxã®æ¹æ³ã§ã
@grigioã«ãŒãã£ã³ã°ã«é¢ãããã®ãã£ã¹ã«ãã·ã§ã³https://github.com/rackt/redux/issues/1145ã«èå³ããããããããŸãã
@urbanvikingrããããšãã賌èªããŸããã æ祚ã¯çµäºããããã§ãããç§ã¯ïŒ1168ã«æ祚ããã§ããã
ã¬ãã¹ã³ã¯å®ã¯ããªãè¯ãã§ããããåºããšèšããšãéçšãã®ããã«èãããã®ã¯æ°ãæ£ããŸãã
ããã®èª°ããããã«æ°ã¥ããæ°ãåãããŠããŸãã 圌ãã¯ãããæã¡åºãã«ã¯ããŸãã«ãæ¿æ²»çã«æ£ããã ãããããä»ã®èª°ãããããªãå Žåã«åããŠãç§ã¯_ãã®_ç·ã«ãªãããšã«æ±ºããŸãã:)
ãããŠè±èªãäžæã«ãªããŸãã ä»ã®ãšãããããã¯ç§ãã§ããæåã®ããšã§ã;-)
@gaearonããªãã¯Reduxã説æããã®ã«ãšãŠãè¯ãä»äºãããŸããã ããªããšããªãã®ãªãŒãã³ãœãŒã¹ã®ææãžã®ç§°è³ã
çŽ æŽãããã¬ãã¹ã³ã»ããã ç§ã¯ç¹ã«ãããœãŒã¹ãèªããæ¹æ³ã§åã³ã¢Reduxé¢æ°ãæåããåå®è£ ããæ¹æ³ã奜ãã§ããã ãã¥ãŒããªã¢ã«ãšãã¹ãŠã®ããã¥ã¡ã³ããReduxåãã§ããããšã«æéãåããä»ã®èª°ããåºåãããŸãã ãããŸã§ã®ãšããã誰ãã2幎éã®ããã³ããšã³ãã®é²æ©ã«è¿œãã€ããŠããã®ã§ãæŠå¿µã¯ç§ã®å¿ãå ã¿èŸŒãã®ãé£ããã§ãããããã¥ã¡ã³ãã¯ããããã®ã«é©ãã»ã©åœ¹ã«ç«ã¡ãŸããã ãããç¶ããŠãã ããããããŠæè¬ããŸãïŒ
ïŒãŸãã @ jugimasterã«è³ãããã§ã¯ãããŸãããïŒ
@ianstormtaylor
ã¡ãªã¿ã«ãããã¯ã¢ã¯ã»ã³ãã§ã¯ãããŸãã:)
ç§ããæ°ã«ããªããã®ã§ãããæ°ãæ£ã£ãŠããã®ã¯ç¢ºãã§ãïŒ
ã§ããã®äžæ¹ã§ã6ã€ã®å€åœèªãå匷ããŠããç§ã¯ãåžžã«æ£ããèšèªã話ãããšãå¿ãããŠããããã®ããã«ã誰ããç§ã®ééããææããŠãããããšã«å人çã«æè¬ããŠããŸãã
ãã@gaearon ã
絶察ã«ããªãã®ã³ãŒã¹ãæããŠããŸããã ãããã£ãïŒ ãšãŠãå©ãããŸããã
æè¿ã®Eggheadã³ãŒã¹ã«3ã€ã®Reduxãã¹ããããªã¬ãã¹ã³ãè¿œå ããŸããã
https://egghead.io/series/react-testing-cookbook
ç§ã®æã¿ã¯ã圌ããããªãããããã¹ãŠã®çŽ æŽãããä»äºãè£å®ããããšã§ãïŒ
ãã£ããããã³ãŒã¹ïŒ
Reduxã®ç¥èã ãã§ãªããçŸä»£ã®å®è·µã®ç¥èå šäœãåäžãããŸãïŒ ãã®ãããªè¯ãããšãç¶ããŠãã ããïŒ+1 ïŒïŒ tadaïŒ
ãããã¡ããã©ãããªã®ã³ãŒããžã®ãªã³ã¯/åç §ããªãããšã«æ°ã¥ããŸããã ããããæçœã§ããããããããååã«åçŽãªãŠãŒã¶ãŒã¯ãããªãã³ããŒããããšãã§ããŸãã ããããç§ã¯å€ãã®äººã ããããªã®æ£ç¢ºãªã³ãŒãã§ãªããžããªããå©çãåŸãããšãã§ãããšæããŸã-ãªãã§ããïŒ
ãã¹ãŠã®ã¬ãã¹ã³ã®ã³ãŒãã¹ããããã¯ãEggheadãµãã¹ã¯ã©ã€ããŒãå©çšã§ããŸãã :-)
ãããªã¯ç¡æã§ããããã©ãããã©ãŒã ã¯ãéã皌ãå¿
èŠããããããããå€ãã®ã³ãŒã¹ã«æè³ããããã€ã³ã¹ãã©ã¯ã¿ãŒã«æ©åšãéã£ããããããªããã¹ãããããWebãµã€ããæ¹åãããã§ããŸãã
ã€ãŸããã³ãŒã¹ã«ã»ãŒäžèŽããexamples/todos
ãã©ã«ããŒããããŸãã
...ãã£ããããç§ã¯ãããéããŠããŸããïŒ ãªã³ã¯ãæ¢ããŠããŸã..ã
@gaearonã¯ãè©«ã³ããŸããã¡ããã©ãããªãå蚪ããŸããã ã³ãŒãã¯ããããã«ãããŸãïŒïŒ...ãããªãèŠãããã¡ã³ããŒã·ãããè³Œå ¥ããããä»ã®äººãèŠãã...å®éã«ãã°ã€ã³ããreduxãããªã«æ»ã£ãã ãã§ãã也æ¯ã
ã¡ãªã¿ã«ãçèšé²ãäžæ£ç¢ºã ãšäžæºãèšã人ãããŸããã
ããããä¿®æ£ããããã«PRãéä¿¡ããŠãã ããïŒ https ïŒ
@gaearon reduxã䜿çšããããšã«ããŸããããeggheadã§reduxvidsãèŠã€ããŸããã ãããªã¯ç§ãreduxãåŠã³å§ããã®ãæ¬åœã«å©ããŸããã ä»åŸãããå€ãã®å®äŸãèŠãããšãã§ããã°çŽ æŽããããšæããŸãã
ãããã£ãŠãä»åŸã®reduxãããªãã¬ãŒãã³ã°ã«ã€ããŠã®ç§ã®ææ¡ã¯ãé«åºŠãªæ§æããªãã¡ã¯ã¿ãªã³ã°ã®è©³çŽ°ããããŠééããªãåéžæã®äœ¿çšæ¹æ³ã§ãã ãã€ãªãã¡ã¯ã¿ãªã³ã°ãããã«ã€ããŠçŽæãããããã§ãã ãããã£ãŠãé¢æ°åããã°ã©ãã³ã°ã¯reduxãšå¯æ¥ã«é¢é£ããŠããããããªãã¡ã¯ã¿ãªã³ã°ã®ã¿ã€ãã³ã°ãšã1ã€ã®ããšãããŸãå®è¡ããé¢æ°ãç¹å®ããæ¹æ³ã«ã€ããŠããã€ãã®ãã³ããåŸãããšãéåžžã«åœ¹ç«ã¡ãŸãã
ç§ãæ§ç¯ããŠããã¢ããªã«ã¯ãããã€ãã®å€§ããªããŒã¿ã³ã¬ã¯ã·ã§ã³ããããããããããŒãã«ã«é 眮ããŠãããŒã¿ã®äžŠã¹æ¿ããããŒãžä»ããªã©ãè¡ãå¿ èŠããããŸãã ã»ã¬ã¯ã¿ãŒããã€äœ¿çšããããäœæã¢ã¯ã·ã§ã³ããã€äœ¿çšãããã決ããã®ã«èŠåŽããŠããŸãã çŸåšãUSERS_SORT_TABLEã¢ã¯ã·ã§ã³ãšSORT_TABLEã¢ã¯ã·ã§ã³ããããŸããããã¯ããŠãŒã¶ãŒã«ããŒãã«ããã®ç¶æ ã®ãç¶æ¿ããä¿åãããããã§ãã ãããè¡ã£ãã®ã¯ãtodoã¹ãã¢ã§SORT_TABLEã¢ã¯ã·ã§ã³ããŠãŒã¶ãŒã¹ãã¢ã§äžŠã¹æ¿ããããªãããã§ãã
ç§ã®è§£æ±ºçãDRYã§ã¯ãªãããšã¯ç¥ã£ãŠããŸãããæ£ããè¡ãæ¹æ³ãããããŸããã çŸç¶ã§ã¯ãããŒãã«ã«ããŒã¿ãå ¥åãããã¹ãŠã®ã¹ãã¢ã«å¯ŸããŠãSOMETHINGã_SORT_TABLEã¢ã¯ã·ã§ã³ãäœæããå¿ èŠããããŸããããã¯ééã£ãŠãããšæããŸãããæ£ããæ¹æ³ãããããŸããã ãã1ã€ã®å¯äœçšã¯ãã¢ã¯ã·ã§ã³ã®ååã®åã«å¥ã®ã¹ãã¢ãåé¢ããå¿ èŠããããããã¢ã¯ã·ã§ã³åã倧ãããªã£ãŠããããšã§ãã ããã¯æ£ããããããŸããã
次ã«ããã€ãã®ãµã³ãã«ã³ãŒãã瀺ããŸãã
/* actions.js */
// ...
export const USER_MOVE_COLUMN = 'USER_MOVE_COLUMN'
export function userMoveColumn (columnIndex, moveToIndex) {
return {
type: USER_MOVE_COLUMN,
columnIndex,
moveToIndex
}
}
export const DATA_TABLE_MOVE_COLUMN = 'DATA_TABLE_MOVE_COLUMN'
// ...
/* reducers.js */
// ...
export default function user (state=userInitialState, action) {
switch (action.type) {
// ...
case USER_MOVE_COLUMN:
return dataTable(state, assign(
action,
{type: DATA_TABLE_MOVE_COLUMN}
))
// ...
default:
return state
}
}
// ...
export default function dataTable (
state=dataTableInitialState,
action,
key='dataTable')
{
switch (action.type) {
// ...
case DATA_TABLE_MOVE_COLUMN:
return {
...state,
[key]: {
...state[key],
columns: move(
state[key].columns, action.columnIndex, action.moveToIndex
)
}
}
// ...
default:
return state
}
}
ãããã£ãŠãããŒãã«ãšãã¢ãã«ãã¹ãã¢ã®éã«ããã¹ãã§ã¯ãªãäŸåé¢ä¿ãäœæããããšãããããŸãïŒã¢ãã«ã¹ãã¢ã¯ããªããžã§ã¯ãã®é åã®ã³ã¬ã¯ã·ã§ã³ããŒã䜿çšããå¿ èŠããããŸãïŒã ãŸããdataTableã¯ãã芪ãã¬ãã¥ãŒãµãŒã®ç¶æ ãæäœããŸãããæäœããã¹ãã§ã¯ãããŸããã ããã§ã»ã¬ã¯ã¿ãŒã䜿ãå¿ èŠããããšæããŸãããããããæžããŠããæç¹ã§ã¯ãUIã«è¡šç€ºããããã®ãå€æŽããããã ãã«å€§ããªã¹ãã¢ãè€è£œããªãããã«åªããŠããŸããã
ãã®ãããçŸåšããããã®åé¡ã®ããã€ãã解決ããããã®åéžæãšãä»ã®ããã€ãã®åé¡ã解決ããããã®ãªãã¡ã¯ã¿ãªã³ã°ææ³ãåŠã¶ã®ã«èŠåŽããŠããŸãã æåã®Reduxã³ãŒã¹ã¯ç§ãå±éºã«ãããã®ã«ååã§ããã ä»ãç§ã¯ãããæ£ããè¡ãæ¹æ³ãåŠã³ãããšæããŸãã :)
ãããã圹ã«ç«ãŠã°å¹žãã§ããåé·ãããªãã§ãã ããã æ確ã§æ£çŽãªãã£ãŒãããã¯ãæäŸããããšããŠããŸãã
ç§ãå©ããŠããããããããªãã©ããªèŠªåãªäººã«ãšã£ãŠããç§ã¯ãã§ã«ãã³ã®å¥ã®ã³ã¡ã³ããã/examples/real-world/reducers
ãèŠã€ããŸããããããŠç§ã¯çŸåšç§ãäžã§æŠèª¬ããåé¡ã®ããã€ããäœãçŽããŠããŸãã ç§ã解決çãèŠã€ããããå©ããããšããŠæéãç¡é§ã«ããããããŸããã§ããã
èŠåãããããšã:)
redux-devtoolsãç§ã®ãããžã§ã¯ãã«çµ±åããããšã¯ç§ã«ãšã£ãŠå€§ããªèŠçã§ãã..ç§ã¯ããã«äœãããããããã©ã®ããã«/ãã€äœ¿çšãããã説æããeggheadã·ãªãŒãºãé«ãè©äŸ¡ããŠããŸããïŒãããŠä»ã§ãããããŸãïŒã ãã€äœã䜿ãã¹ããã説æããŠããPRãèªã¿ãŸããããhmrãtransform 3ãredux hotreloaderã¯reacthotreloaderãªã©ãšã¯éããã®ãããããããã®ã§æ··ä¹±ããŸããã
äžã§æŠèª¬ããåé¡ã®ããã€ãã«èŠåŽããŠããä»ã®äººã®ããã«ãReduxã®å®åæãšåå空éã¢ã¯ã·ã§ã³ã®ãã¹ãŠã§ã¯ãªãã«ããŠãã»ãšãã©ãåé€ã§ãããããžã§ã¯ããäœæããŸããã ããã§ãããåç §ããŠ
@granteagonãã®ã«ããã«ã¯ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã«
ã¢ã¯ã·ã§ã³/ãªãã¥ãŒãµãŒã®äœæã«å ããŠã©ãããŒãŸãã¯æœè±¡åãäœæããã»ãšãã©ã®äººã¯ãããããåžžã«çŽæ¥çµåããããšæ³å®ããåŸåãããããšã«æ³šæããŸããã 確ãã«ãç§ã®ã¢ããªã§ã¯ããããŸã§ã®ãšãããç§ã®ã¢ã¯ã·ã§ã³ã®_ã»ãšãã©_ã«ã¯ã察å¿ããåŠçããžãã¯ã®ãã£ã³ã¯ã1ã€ã ããããŸãããããªãŒã®è€æ°ã®éšåãæŽæ°ããå¿ èŠãããå Žæã¯ç¢ºãã«ããã€ããããŸãã
@ gaearon @ markeriksonããã¯ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã«ã¬ãã¥ãŒãµãŒãçµåããŸãããã ãã90ïŒ ã®ç¢ºçã§ãããã¯åé¡ãªãããæãŸããããšã§ããæ®ãã®10ïŒ ã®æéã¯ããŸã æäœæ¥ã§ã³ãŒãã£ã³ã°ãããã¢ãããŒãã䜿çšã§ããŸããç§ã¯ããªããèšã£ãããšãèããå°æ¥ã®çºå±ã®ããã«ãããæ€èšããŸãã
@granteagon @gaearon
reduxrã«äŒŒãããŒã«ã«æœè±¡åã䜿çšããã®ã§ãããã«è¿œå ã®çµåã¯ãªããšäž»åŒµããŸããã¢ã¯ã·ã§ã³ãšã¬ãã¥ãŒãµãŒã®éã§1ïŒ1ã®ãããã³ã°ã匷å¶ãããã®ã¯ãããŸãããåãã¢ã¯ã·ã§ã³ããªãã¹ã³ãã2ã€ã®ç°ãªãã¹ã©ã€ã¹ã«2ã€ã®ã¬ãã¥ãŒãµãŒãå«ããããšãã§ããŸãã
const counterReducersA = {
// this counter increments by 1 each time
increment: (state, action) => state + 1
}
const counterReducersB = {
// this counter increments by 2 each time
increment: (state, action) => state + 2
}
const counterA = reduxr(counterReducersA, 0);
const counterB = reduxr(counterReducersB, 0);
const rootReducer = combineReducers({
counterA: counterA.reducer,
counterB: counterB.reducer
});
store.dispatch(counterA.action.increment()); // increments both counters
ãã¡ãããåããã®ãšããååã®ãã¬ãã¥ãŒãµãŒãé¢æ°ãè€æ°ããå ŽåïŒã€ãŸããåãã¢ã¯ã·ã§ã³ã«å¿çããå ŽåïŒãæé»çã«äž¡æ¹ãã¢ã¯ã·ã§ã³ãã€ããŒããç¹å®ã®åœ¢ã«ãªãããšããæåŸ
ãããå¿
èŠããããŸã---ããã¯å®å
šã«é¡äŒŒããŠããŸãããã©ãªããã¯ã¹ã«2ã€ã®ã¬ãã¥ãŒãµãŒããããã©ã¡ããåãtype
å®æ°ãåŠçãããããã©ã¡ããåãã¢ã¯ã·ã§ã³åœ¢ç¶ãæåŸ
ããå¿
èŠããããŸãã
ããããã @ gaearon ãã«ãããªã³ã°ã®æå³ã誀解ããŸãããïŒ
ãµã³ã¯ã®å®è£ ã瀺ãåã«ãããã«ãŠã§ã¢ãªãã§éåæãããŒã瀺ãããšã圹ç«ã€ãšæããŸãã
ããé¢é£æ§ããããŸãããããã¥ã¡ã³ãã¯ãã¡ããã¡ã圹ã«ç«ã¡ãŸããããéåæãããŒããŒãžã®ãã®ã¹ããŒãã¡ã³ãã¯ãåŸããèãããšæ¬åœã«ç§ãè»éã«ä¹ããŸããã§ããããããã«ãŠã§ã¢ããªããã°ãReduxã¹ãã¢ã¯åæããŒã¿ãããŒã®ã¿ããµããŒãããŸããã
@battaile ïŒããã¯æ¬åœã ããã§ã:)ããã«ãŠã§ã¢ããªããã°ãéåæã¯å®å
šã«Reduxã®å€ã§çºçããå¿
èŠããããŸãïŒãããã£ãŠãReactã³ã³ããŒãã³ããªã©ã®UIã¬ã€ã€ãŒã§çºçããå¯èœæ§ããããŸãïŒã store.dispatch
ãåŒã³åºããšãã¯ãã€ã§ããã¢ã¯ã·ã§ã³ã¯ã¬ãã¥ãŒãµãŒé¢æ°ã«çŽæ¥é²ã¿ãGoãæž¡ããã$ 200ãåéãããAJAXåŒã³åºãã®éäžã§åæ¢ããŸããã
ã¹ãã¢ãšã³ãã³ãµãŒã䜿çšãããšã dispatch
ãªã©ã®é¢æ°ãç¬èªã®ããŒãžã§ã³ã§ã©ããã§ããããã applyMiddleware
ã¯ãå®éã®ã¹ãã¢ã®dispatch
é¢æ°ã«å°éããåã«ããããã«ãŠã§ã¢ãã€ãã©ã€ã³ãã®æœè±¡åãæäŸããŸãã ã ããã¯åºæ¬çã«ãæšæºã®ReduxãããŒã®_å
éš_ã§ãé£ã³åºããŠå¿
èŠãªéåæåŠçãå®è¡ã§ããæãç©ŽãæäŸããŸãã
ãããã£ãŠãããã«ãŠã§ã¢ããªããŠããå®å šã«éåæã®åŠçãå®è¡ã§ããŸã...å®éã«Reduxã«é¢é£ãããã®ãšã¯ãŸã£ããå¥ã®æ¹æ³ã§ãã¹ãŠãå®è¡ããå¿ èŠããããŸãã
ããã¯æ¬åœã ããã§ã:)
ç§ã¯ãããééã£ãŠãããšã¯èšããŸããã§ãããç§ã¯ãããç§ãè»éããå€ãããšèšããŸãã:)
ç§ã¯æ¬¡ã®ãããªããšããããã£ãã®ã§ãããããã¯ç§ãã§ããªãã£ãããšãæå³ããŠããããã«èŠããŸããïŒ
const mapDispatchToProps = (dispatch) => ({
onclick(searchTerm) {
dispatch(actions.requestOrders(searchTerm));
return fetch('http://localhost:49984/Order/Search?search=' + searchTerm)
.then(response => response.json()).then(response => {
dispatch(actions.receiveOrders(searchTerm, response));
})
.catch((err) => {
dispatch(actions.receiveOrdersError('An error occurred during search: ' + err.message));
});
},
});
ããã¯ç°¡åã«éããªãå¯èœæ§ãããããšã¯ããã£ãŠããŸãããæŠå¿µçã«ã¯èŠããšäŸ¿å©ã ãšæããŸãã ãŸãã¯ãå°ãªããšãç§ã®å Žåã¯ããã§ããã
ãããã«ãŠã§ã¢ããªããã°ãReduxã¹ãã¢ã¯åæããŒã¿ãããŒã®ã¿ããµããŒããããããšã«åæããŸãã 誀解ãæãã§ãã
æè¡çã«ã¯ããå éšããšãå€éšããåºå¥ãããå Žåã¯ããã®èšè¿°ã¯æ£ãããããããŸããããéåæãå®è¡ããå¯äžã®æ¹æ³ã¯ããã«ãŠã§ã¢ãè¿œå ããããšã§ãããšäººã ã«ä¿¡ã蟌ãŸããå Žåã¯ãèšãæãããã詳ãã説æãããã§ããŸããããã
ãããéãã¯ãéåæåäœãæè¡çã«ã¯dispatch
ãå
éšãã§ã¯ãªããã³ã³ããŒãã³ãã¬ãã«ã§çºçããŠããããšã§ãã ãã€ããŒãªéãã§ãããæå¹ãªéãã§ãã
ç§ã¯ããã®å£°æãæè¡çã«æ£ãããªããšå®éã«äž»åŒµããŠãã人ã¯ããªããšæããŸãã
@markeriksonå åŽãšå€åŽã®åºå¥ãéèŠãªå ·äœçãªäŸããããã©ãããèå³ããããŸããïŒ
1ã€ã®äŸãšããŠããã§ãŒã³å ã®ããã«ãŠã§ã¢ãéåæããã«ãŠã§ã¢ã§ãã£ã¹ãããããããµã³ã¯ïŒãŸãã¯promiseãªã©ïŒãèªèã§ããããã«ããå ŽåããããŸãã ããã«ãŠã§ã¢ãäœããããã¯ããããŸãããããã®ãããªãã®ãå¿ èŠã«ãªãã®ã¯çŸå®çã ãšæããŸãã
ããŒã...å
·äœçã«ãå
·äœçãªãäŸã«ã€ããŠã¯ããããããŸããã å
šäœãšããŠããoutsideããšãinsieãã®éãã¯ãæåã«dispatch
ãåŒã³åºãåã«çºçããã®ãããããšãåŸã«çºçããã®ããšããåé¡ã§ãã ããããå€åŽãã§ãåãã®å ŽåãReactãAngularããŸãã¯ãã®ä»ã®ãã®ã§ãããã©ããã«ãããããããã¹ãŠã®éåææ§ãšããžãã¯ã¯ãã¥ãŒã¬ã€ã€ãŒã«ããå¯æ¥ã«é¢é£ããŠããŸãã ãå
éšããšãåŸãã®å Žåãéåææ§ãšããžãã¯ã¯ã¹ãã¢ã¬ãã«ã«ããããã¥ãŒã¬ã€ã€ãŒã«é¢é£ä»ããããŠããŸããã
ããã¯å®éãä»æ¥ã®Redditã®ãã£ã¹ã«ãã·ã§ã³ã§ç§ãèšãããšããŠãããã€ã³ãã®å€ãã§ãïŒ https ïŒ
ãã©ã®ãããªã¢ã¯ã·ã§ã³ããã£ã¹ããããããã€ãã£ã¹ãããããã®ãããšãã質åã ã¯ããžãã¹ããžãã¯ã®äžæ žéšåã§ãããæ®ãã®ååã¯ããããã®ã¢ã¯ã·ã§ã³ã«å¿ããŠç¶æ ãæŽæ°ããã«ã¯ã©ãããã°ããã§ããïŒãã§ãã ã¢ã¯ã·ã§ã³ç®¡çããµã³ã¯ããµã¬ãªã©ã§è¡ãããŠããå Žåããã®ã³ãŒããReactã³ã³ããŒãã³ããAngularã³ã³ãããŒã©ãŒãjQueryã¯ãªãã¯ãã³ãã©ãŒãVueã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ãªã©ã«ãã£ãŠéå§ããããã©ããã¯å®éã«ã¯é¢ä¿ãããŸããã ã³ã¢ããžãã¯ã¯UIã¬ã€ã€ãŒã®å€åŽã«ãããUIã¬ã€ã€ãŒã¯ãã¹ãã¢ããå¿ èŠãªããŒã¿ãååŸããŠè¡šç€ºãããŠãŒã¶ãŒå ¥åãã¢ããªããžãã¯é¢æ°åŒã³åºãã«å€æãã圹å²ãæãããŸãã
ã€ãŸãããã®æå³ã§ã¯ããå éšããšãå€éšãã®åé¡ã¯éèŠã ãšæããŸããããã¯ãããžãã¯ãã¢ããªã¬ãã«ãšUIã¬ãã«ã®ã©ã¡ãã§åäœããŠããããæŠå¿µçã«åºå¥ããããã§ãã
@markeriksonãã®è³ªåã®è¡ã«ç§ãšäžç·ã«ããŠãããŠããããšãã è°è«ã®äœå°ããããšæããããããããŸããããããã¯ãã¢ããªã¬ãã«ããšãUIã¬ãã«ãã®éãã§ãããšããèããå°ãæŒãæ»ããããšæããŸãã
泚ïŒäŸ¿å®äžã thunk
ã䜿çšããŠãå®éã«redux-thunkãŸãã¯redux-promiseã§ãããã©ããã«ããããããéåæãžã®ã¢ããªãã©ãªãŒããã«ãŠã§ã¢ã¢ãããŒããè¡šããŸãã
UIã¬ã€ã€ãŒã¯ããŠãŒã¶ãŒã®æäœããã³ãã©ãŒã«æ¥ç¶ããã ãã§ãã 誰ãããã¿ã³ãã¯ãªãã¯ãããšãUIã¯_some_ãã³ãã©ãŒãåŒã³åºãããã«èšå®ãããŸãã å€ãã®å Žåãã³ã³ããŒãã³ãã¯ãããã®ãã³ãã©ãŒãå°éå ·ãšããŠåãåããŸããããšãã°ããã€ã³ããããã¢ã¯ã·ã§ã³ã®äœæè ã§ãã UIã¯ããã³ãã©ãŒãåŒã³åºãããšãã«äœãèµ·ããããèªèããŠããŸãã---ãããåŒã³åºãã ãã§ãã
ããã³ãã©ãŒããé¢æ°ããã£ã¹ããããããïŒããã«ãŠã§ã¢ã«ãã£ãŠåŠçãããïŒãéåæåŒã³åºããå®è¡ããŠãã¬ãŒã³ã¢ã¯ã·ã§ã³ããã£ã¹ããããããã©ããã¯UIã¬ã€ã€ãŒã«éãã¯ãããŸãã--- UIã¯å®å šã«äžå¯ç¥è«çã§ãïŒãŸãã¯å°ãªããšãäžå¯ç¥è«è ã«ãªãããšãã§ããŸãïŒ
ãµã³ã¯ã䜿çšããŠãããã©ããã«é¢ä¿ãªãããã¢ããªãã®å€§éšåã¯ãããã®ããã³ãã©ãŒãã«ãããŸãã å
žåçãªreact / reduxã¢ããªã§ã¯ããããã®ããã³ãã©ãŒãã¯å€ãã®å Žåãããçš®ã®ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã§ãã ãã¹ãŠã®éåæã®ãã®ããµã³ã¯ãšããŠèšè¿°ãããããããã£ã¹ãããããããšãã§ããŸãã ãŸãã¯ããã¹ãŠã®éåæã®ãã®ããåŒæ°ãšããŠdispatch
ãåãå
¥ããé¢æ°ãšããŠèšè¿°ããããšãã§ããŸãã ã³ã³ããŒãã³ãã®èŠ³ç¹ããã¯ã someHandler(dispatch)
ãŸãã¯dispatch(someHandler())
ããããã§ãããŸãã¯ããã€ã³ããããã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒãäžããåãç¶ãããå Žåã¯ãã©ã¡ãã®å ŽåãsomeHandler()
ã«ãªããŸãã ãã®éããUIã¬ã€ã€ãŒããå®å
šã«é ãããŒãžã§ã³ã®bindActionCreators
ãäœæã§ããŸãã
redux-thunkã䜿çšããŠã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã§äœæãããreact / reduxã¢ããªã±ãŒã·ã§ã³ãæäŸããŠããã ããã°ãUIã¬ã€ã€ãŒã_åºæ¬çã«_å€æŽããã«ãredux-thunkãå®å
šã«äº€æããéããã«ãŠã§ã¢ã¢ãããŒãã䜿çšã§ããŸãã ïŒæ³šïŒ getState
ãã©ãã«/ã©ã®ããã«æ³šå
¥ãããã«ã€ããŠã¯è©³ãã説æããŠããŸããããããã§ã¯ãããå°ããªè©³çŽ°ã§ãããš_ä¿¡ããŠããŸã_ïŒã
ãã®ããããå éšããšãå€éšãã®åºå¥ããã¢ããªã¬ãã«ããŸãã¯ãUIã¬ãã«ãã§ããããšãç解ããã®ã«èŠåŽããŠããŸãã
ç§ã¯è°è«ã«æè¬ããŸãããããŠç§ã¯ç§ãåŠå®çã«åºããããªãããšãæã¿ãŸãã
ãã®ã³ãŒã¹ã¯çŽ æŽãããã§ãã ãããç· ãããããšã人ã ã¯ã³ãŒã¹ã®ã³ãã¥ããã£ããŒããªããžããªã«ã³ã¡ã³ããéãããšãã§ããŸãïŒ //github.com/tayiorbeii/egghead.io_redux_course_notes
ãŸãããã³ãäžç·ã«çœ®ãã次ã®ã·ãªãŒãºããã²ãã§ãã¯ããŠãã ããïŒ https://egghead.io/courses/building-react-applications-with-idiomatic-redux
æãåèã«ãªãã³ã¡ã³ã
@markeriksonãã®è³ªåã®è¡ã«ç§ãšäžç·ã«ããŠãããŠããããšãã è°è«ã®äœå°ããããšæããããããããŸããããããã¯ãã¢ããªã¬ãã«ããšãUIã¬ãã«ãã®éãã§ãããšããèããå°ãæŒãæ»ããããšæããŸãã
泚ïŒäŸ¿å®äžã
thunk
ã䜿çšããŠãå®éã«redux-thunkãŸãã¯redux-promiseã§ãããã©ããã«ããããããéåæãžã®ã¢ããªãã©ãªãŒããã«ãŠã§ã¢ã¢ãããŒããè¡šããŸããUIã¬ã€ã€ãŒã¯ããŠãŒã¶ãŒã®æäœããã³ãã©ãŒã«æ¥ç¶ããã ãã§ãã 誰ãããã¿ã³ãã¯ãªãã¯ãããšãUIã¯_some_ãã³ãã©ãŒãåŒã³åºãããã«èšå®ãããŸãã å€ãã®å Žåãã³ã³ããŒãã³ãã¯ãããã®ãã³ãã©ãŒãå°éå ·ãšããŠåãåããŸããããšãã°ããã€ã³ããããã¢ã¯ã·ã§ã³ã®äœæè ã§ãã UIã¯ããã³ãã©ãŒãåŒã³åºãããšãã«äœãèµ·ããããèªèããŠããŸãã---ãããåŒã³åºãã ãã§ãã
ããã³ãã©ãŒããé¢æ°ããã£ã¹ããããããïŒããã«ãŠã§ã¢ã«ãã£ãŠåŠçãããïŒãéåæåŒã³åºããå®è¡ããŠãã¬ãŒã³ã¢ã¯ã·ã§ã³ããã£ã¹ããããããã©ããã¯UIã¬ã€ã€ãŒã«éãã¯ãããŸãã--- UIã¯å®å šã«äžå¯ç¥è«çã§ãïŒãŸãã¯å°ãªããšãäžå¯ç¥è«è ã«ãªãããšãã§ããŸãïŒ
ãµã³ã¯ã䜿çšããŠãããã©ããã«é¢ä¿ãªãããã¢ããªãã®å€§éšåã¯ãããã®ããã³ãã©ãŒãã«ãããŸãã å žåçãªreact / reduxã¢ããªã§ã¯ããããã®ããã³ãã©ãŒãã¯å€ãã®å Žåãããçš®ã®ã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã§ãã ãã¹ãŠã®éåæã®ãã®ããµã³ã¯ãšããŠèšè¿°ãããããããã£ã¹ãããããããšãã§ããŸãã ãŸãã¯ããã¹ãŠã®éåæã®ãã®ããåŒæ°ãšããŠ
dispatch
ãåãå ¥ããé¢æ°ãšããŠèšè¿°ããããšãã§ããŸãã ã³ã³ããŒãã³ãã®èŠ³ç¹ããã¯ãsomeHandler(dispatch)
ãŸãã¯dispatch(someHandler())
ããããã§ãããŸãã¯ããã€ã³ããããã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒãäžããåãç¶ãããå Žåã¯ãã©ã¡ãã®å ŽåãsomeHandler()
ã«ãªããŸãã ãã®éããUIã¬ã€ã€ãŒããå®å šã«é ãããŒãžã§ã³ã®bindActionCreators
ãäœæã§ããŸããredux-thunkã䜿çšããŠã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã§äœæãããreact / reduxã¢ããªã±ãŒã·ã§ã³ãæäŸããŠããã ããã°ãUIã¬ã€ã€ãŒã_åºæ¬çã«_å€æŽããã«ãredux-thunkãå®å šã«äº€æããéããã«ãŠã§ã¢ã¢ãããŒãã䜿çšã§ããŸãã ïŒæ³šïŒ
getState
ãã©ãã«/ã©ã®ããã«æ³šå ¥ãããã«ã€ããŠã¯è©³ãã説æããŠããŸããããããã§ã¯ãããå°ããªè©³çŽ°ã§ãããš_ä¿¡ããŠããŸã_ïŒããã®ããããå éšããšãå€éšãã®åºå¥ããã¢ããªã¬ãã«ããŸãã¯ãUIã¬ãã«ãã§ããããšãç解ããã®ã«èŠåŽããŠããŸãã
ç§ã¯è°è«ã«æè¬ããŸãããããŠç§ã¯ç§ãåŠå®çã«åºããããªãããšãæã¿ãŸãã