ã¿ãªããããã«ã¡ã¯ïŒ Reduxã®äœæè
ã§ãããã³ã»ã¢ãã©ã¢ãã¯æè¿ãMedium Thingsã«é¢ããèšäºã«ããªã倧èŠæš¡ãªã³ã¡ã³ããæ®ããŸãããReact.jsã«ã€ããŠã¯èª°ãããªãã«è©±ããªãã§ãããã
å®éãçŸåšã®èšäºã¯ã圌ã®è§£èª¬ã®ç§ã®ç¿»èš³ã§ããåŸè
ã«ã¯ãReact / React Routerã®çŸåšããã³å°æ¥ã®ç¶æ³ã«é¢ãã貎éãªã³ã¡ã³ããå«ãŸããŠããããã§ãã
ããã誰ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ããã«ã¡ã¯ããã£ãŒãããã¯ãããããšãïŒ :)
Reactã§ã®äžå¿«ãªçµéšãå ±æããŠããã ãããããšãããããŸãã
ããªãã®æçš¿ã«ã¯Reactã³ãã¥ããã£ã§åºãŸã£ãŠãã誀解ãå«ãŸããŠããã®ã§ãå°ãæéããšã£ãŠåãåé¡ãæ±ããŠãã人ã«èª¬æããããšæããŸããã
ããã¯ãReactã誰ã«ãšã£ãŠãåãããã«ããŸãæ©èœããããšããæèµ·ããåé¡ãç¡é¢ä¿ã§ããããšãæå³ãããã®ã§ã¯ãããŸããã ããããç§ã®æèŠã§ã¯ããããã®åé¡ãæ£ããç解ããããã«ç¹å®ããããšãéèŠãªããã€ãã®ãã€ã³ãããããŸãã
Facebookã¯æ¬¡ã®ã¡ãžã£ãŒãªãªãŒã¹ã«åããŠãã¬ãŒã ã¯ãŒã¯ãå®å šã«æžãçŽãèšç»ãçºè¡šããã°ããã§ãããããã¯ããããã³ãŒããç Žæ£ãããããšãæå³ããŠãããããReact 15.5.0ã§ã¢ããªã±ãŒã·ã§ã³ã®äœæãéå§ããŸãããçŸåšã®ãœãŒã¹ã³ãŒãã¯ãµããŒããããªããªã£ãããã§ãã
ãå®å šã«æžãæãããããã«ã¯äžäœäºææ§ãããããããã®ã¹ããŒãã¡ã³ãã¯æ£ãããããŸããã 次ã®ãªãªãŒã¹ã«ã€ããŠè©±ããšãã¯ãã€ã§ãããã匷調ããŸãããããã§ããããäžåºŠç¹°ãè¿ã䟡å€ããããŸãã
React 16ïŒãŸã åŠçäžïŒ 㯠ããªã©ã€ãããããŠããŸãããåããããªãã¯APIãæã£ãŠããŸãã Facebookã®30,000ïŒïŒïŒä»¥äžã®ã³ã³ããŒãã³ãã®ãã¡ãå€æŽããå¿ èŠãããã®ã¯çŽ12åã ãã§ããããããã®ããã€ãã®ã³ã³ããŒãã³ãã¯ãµããŒããããŠããªãææžåãããŠããªãåäœã«äŸåããŠããŸããã
ããã«åºã¥ããŠãäºææ§ã¯æåéã99.9ïŒ ã§ãã ããã«ãããReact 16ãããªãã®ã³ãŒãã§åäœãããšããèªä¿¡ãåŸãããŸãã
åæ»ã®ãªãå®å®æ§ãžã®ã³ãããã¡ã³ãã«ã€ããŠã¯ããã¡ããã芧ãã ããã
ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãããžã§ã¯ãå šäœãèšå®ããæ¹æ³ã®å°é家ã§ã¯ãããŸããïŒãã®äœæ¥ãcreate-react-appãªã©ã®cli-toolã«å§ããããšã«æççã§ã ïŒ
Reactã¢ããªã®äœæã¯ãWebpackãšBabelã®äžã«ããèãã¬ã€ã€ãŒã§ãã ãããžã§ã¯ãã³ãŒãã¯çæãããŸããããæšå¥šãããæ¹æ³ã§ãããã®ããŒã«ãæ§æããŸãã
次ã®æã®å®åæãšéå§ã³ãŒãã«é¢ããèŠæ ã¯ãç¹ã«ãã®åé¡ã®è§£æ±ºçãããããšãèãããšãããŸãå ¬å¹³ã§ã¯ãªãããã§ãããããªãã¯æå³çã«ããã䜿çšããªãããšã«æ±ºããŸããã
ãã®åéã«ã¯ãŸã å€ãã®äœæ¥ããããŸãããéå»1幎éã§ç¶æ³ã¯æ¹åããããšæããŸããReactãå°æ¥åã³äœ¿çšããããšã«æ±ºããå Žåã¯ã圌ã«ãã£ã³ã¹ãäžããŠãã ããã
2ã3æéã®ãªãã¡ã¯ã¿ãªã³ã°ã®åŸãReduxã«å€§éã®ãã€ã©ãŒãã¬ãŒãã³ãŒãïŒActionTypesãActionsãReducersãconnect ...ïŒãå¿ èŠãªãããã³ãŒããæé·ãç¶ãã以åã®3åã«ãªã£ãããšã«æ°ä»ããŸãã
Reactã«ã¯ç¶æ ã·ã¹ãã ãçµã¿èŸŒãŸããŠããŸããã³ã³ããŒãã³ãéã§ç¶æ ãåæ£ããå¿ èŠãããå Žåã¯ãããããå§ããŠç¶æ ãããé«ãã¬ãã«ã«äžããããšããå§ãããŸãã
å¿ èŠã«å¿ããŠãã€ã§ãReduxãè¿œå ã§ããŸãããMobXãŸãã¯Reduxã§éçºãéå§ããããšã¯ãå€ãã®å Žåç¿ã§ãã
React-routerã¯Facebookã«ãã£ãŠå ¬åŒã«ãµããŒããããŠãããããã®éçºè ã¯ããã5ãæã§3ã€ã®ã¡ãžã£ãŒããŒãžã§ã³ããªãªãŒã¹ãããšããçŽ æŽãããã¢ã€ãã¢ãæã£ãŠããŸããã
ç§ã¯React RouterãšææºããŠããŸãããããã®èšè¿°ã¯ééã£ãŠãããšæããŸãã React RouterãªãªãŒã¹ããã©ããŒããŠããå Žåã¯ã次ã®ããšã«æ³šæããå¿ èŠããããŸãã
- 1.0ã¯2015幎ã«ãªãªãŒã¹ãããŸããã
- 2.0ã¯2016幎2æã«ãªãªãŒã¹ãããäž»ã«ããŒãžã§ã³1.0ãšã®äžäœäºææ§ããããŸãïŒãã ããããŒãžã§ã³3.0ã§äºå®ãããŠããAPIã®å€æŽã«é¢ããèŠåãè¿œå ãããŠããŸãïŒ
- 3.0ã¯2016幎10æã«ãªãªãŒã¹ãããåºæ¬çã«ã¯ããŒãžã§ã³2.0ãšåãã§ãããAPIã«æçµçãªå€æŽãå ããããŠããŸãã
ãããã£ãŠãïŒèªåãäœãããŠãããããããªããããããªããšããŠïŒå®å®ããããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããã ãã§ããã°ãããŒãžã§ã³1.0ãã2.0ãžã®ç§»è¡ã¯ã»ãšãã©åé¡ãªãè¡ãããŠããã¯ãã§ãã ããããã®èŠåã衚瀺ãããã¯ãã§ããã次ã®ã¡ãžã£ãŒãªãªãŒã¹ïŒ3.0ïŒã§ãããã®èŠåãåé€ããããŸã§ã«8ãæéä¿®æ£ããå¿ èŠããããŸããã
3.0ã®çŽåŸã«ããŒãžã§ã³4.0ãç»å Žããããšã¯ééããããŸããã 4.0ã¯å®å šã«æžãçŽãããããŒãžã§ã³ã§ããããã®å²åŠã¯ãããã«ç°ãªããŸãïŒããã¯ãIssues React Routerã§é·å¹Žã«ããã£ãŠå ±åãããŠããå€ãã®ãšã©ãŒãšåé¡ãä¿®æ£ããããã«è¡ãããŸãïŒã ããŒãžã§ã³4.0ã3.0ã®çŽåŸã«ãªãªãŒã¹ãããããšã¯æ£ããã§ãã ããããããã«ãã®ãããªãã®ããããŸã-ããªãã¯çµ¶å¯Ÿã«ããã«åãæ¿ããå¿ èŠã¯ãããŸããã 3.0ã䜿çšããŠããã¢ããªã±ãŒã·ã§ã³ã¯ãŸã å€ãããããã®ãã©ã³ãã¯åŒãç¶ãç©æ¥µçã«ãµããŒããããŠããŸãã ãããã£ãŠãããŒãžã§ã³3.0ã䜿çšããŠããå Žåã¯äœãèµ·ãããŸãããéçºããŒã ã¯ãããã«é¢å¿ã®ããæ¹ãããŒãžã§ã³4.0ã«ç°¡åã«ç§»è¡ã§ããããã«ç§»è¡ãããã«åãçµãã§ããŸãã
çµæãšããŠããªãªãŒã¹ã®å®å®ããŒãžã§ã³ã®ã¿ã䜿çšããå ŽåãReact Routerã¯æ°ããAPIã«åãæ¿ããäžå¹ŽãäžããŸããã 圌ãã¯é·å¹Žã®åé¡ãä¿®æ£ããããã«4.xããŒãžã§ã³ããªãªãŒã¹ããŸããããå¿ èŠã«å¿ããŠ3.xãã©ã³ããç¶æããããšã«ã³ãããããŠããŸãã ç§ã®æèŠã§ã¯ããã»ã©æªããªãããã§ãïŒ
åé¡ãäœã§ããããç解ãããšããŠãµã®ã®ç©Žã«åŒããã蟌ãŸããã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«æ©èœã§ããããã«ããããã«ã空ã®divãã©ãã«ã§ã匷å¶çã«è¿œå ããŸãã
JSé¢æ°ã䜿çšããŠåçŽã«æ©èœã³ã³ããŒãã³ããã¬ã³ããªã³ã°ã§ããŸãããä»®æ³DOMãæ£ããäœæãããããã«ããã¹ãŠã®ããŒã¯ã¢ãããäœããã®ã¿ã°ã§ã©ããããå¿ èŠããããŸã
ããªããããã«æ³šæãæã£ãŠãããŠããããïŒ React 16ã¯render()
é¢æ°ããé
åãè¿ãããšããµããŒããããããããããã¹ãŠã®divããã³ã©ããã³ã°ã¿ã°ãåé€ã§ããŸãã ç§ãã¡ã¯ããªãã®äººçãããè¯ãããããã«åªåããŠããŸãã
Reactã¯ããµãŒããŒåŽïŒPHPãªã©ïŒã®ãã¡ã€ã«ã®äœ¿çšã眮ãæããããã«çãŸããé«åºŠãªã¬ã³ããªã³ã°ãã¬ãŒã ã¯ãŒã¯ã§ããããã®ãã€ãŒãã確èªããHTMLãšæ··åãããŠããããã§ãã
ãããããªãã®èšãããšãæ£ç¢ºã«ç解ããŠããŸããã§ããã ããããReactãç§ãã¡ïŒããã³AirbnbãTwitterãPinterestããã®ä»ã®äŒç€Ÿã®è£œåã䜿çšããŠãã人ãã¡ïŒã«çã«ããªã£ãŠããçç±ã«èå³ãããå ŽåãReactã¯ãæ瀺çãªããŒã¿ã¹ããªãŒã ãšDOMããªãŒã®æåå¶åŸ¡ã®æ¬ åŠã®ãããã§ãéåžžèšã£ãŠããŸããã°ã®å°ãªãã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ãããŠããããã®åé¡ã解決ããããã«ä»ã®æŠç¥ãèŠã€ããããšãã§ããã°çŽ æŽãããããšã§ãã
ãã®èšäºã§ã¯ãäžéšã®éçºè ãReactã圹ç«ã€ãšèããçç±ã®è©³çŽ°ãæããã«ããŠããã®ã§ããããèŠãŠã¿ãããšããå§ãããŸãïŒ ãŸããReactãåé¡ã解決ããªãå Žåããåé¡ã解決ããããã«EmberãAngularãªã©ã®ä»£æ¿ãã¬ãŒã ã¯ãŒã¯ãåã«å¥œãå Žåã«ã圹ç«ã¡ãŸãã
æãããªåçŽãã¯ããã£ã1è¡ã®ã³ãŒããæžãå§ããåã«æ§æããå¿ èŠã®ããäžé£ã®ããŒã«ã®èåŸã«é ããŠããŸãã
å¿ èŠã«å¿ããŠES6ããã³JSXãªã㧠React ã䜿çšã§ããããããã®ã¹ããŒãã¡ã³ãã¯æ£ãããããŸããã ã¢ããªã±ãŒã·ã§ã³ã«1ã€ã®ã¹ã¯ãªããã¿ã°ãèšè¿°ããã®ãšåããããç°¡åã§ãã
ãããããã«ãããŒã«ã¯æçšã§ãããšèããŠããŸãïŒãªã³ã¿ãŒã®äœ¿çšã«ã€ããŠèšåããŠããå ŽåãããããåãæèŠããããŸãïŒã æ§æã¯ç°¡åã§ã¯ãããŸããããCreate React Appãªã©ã®ãœãªã¥ãŒã·ã§ã³ã«ãããããã¢ã¯ã»ã¹ãããããªããåºæ¬çãªãããžã§ã¯ãïŒWebpackãªã©ïŒãæéãšãšãã«äœ¿ãããããªãããšãæåŸ ããŠããŸãïŒWebpack 2ã¯ããã®åéã§é 調ã«é²æ©ããŠããŸãïŒæ§æãã§ãã¯ïŒã ãããã£ãŠãç§ã¯ãããã®ãããžã§ã¯ãã«ã€ããŠæ¥œèŠ³çã§ããã人ã ãããããªãã§Reactã䜿çšãããçç±ãç解ããŠããŸãã
Reactreact-dom
ãã€ã³ããŒãããã¹ã¯ãªããã«react
react-dom
å¿ èŠããããŸããåŸè ã䜿çšããããšã¯ãããŸãããReactããŒã èªäœã«ããããããªãäœããã®çç±ã§
çç±ã¯ãJSXã³ãŒããå€æããã«ã¯Reactã¹ã³ãŒããå¿ èŠãªããã§ããããã¯ãJSXãã°ããŒãã«ãã©ãŠã¶ãŒå€æ°ãåŠçããæ¹æ³ã ããã§ãã ããã¯ä»¥åã®èŠæ ã«é¢é£ããŠããã ãã§ãããã«ããŒã䜿çšããªããŠãJSXãæ©èœããããã«ãããã®ã§ãã
DOMã®CSSã¯ã©ã¹ãå®çŸ©ããã«ã¯ãclass
代ããã«className
ã䜿çšããå¿ èŠããããŸã
ããªãã¯å®å šã«æ£ããã§ããããã¯è¿·æã§ãã ããã¯ãDOM APIã«åºã¥ããæãæ©ãèšèšæ±ºå®ã®1ã€ã§ãããæ··ä¹±ãæããŸãã ããã¯å°æ¥å€æŽã§ããŸãïŒ
ãããŠãGithub Issuesã§1000以äžã®ãããããããã¬ãŒã ã¯ãŒã¯ã«äœãæåŸ ããŸããã
React Nativeã®APIã¯ã¯ããã«åºããéåžžã«äººæ°ããããããåé¡ã§å€ãã®åŒã³åºããåãåãããšã¯åœç¶ã§ãã ãããã®å€ãã¯ãµããŒãã®ãªã¯ãšã¹ãã§ããããã°ãä¿®æ£ãã人ã ãåé¡ã解決ããã®ãæ¯æŽããã®ã«åœ¹ç«ã€ããšãæè¬ããŠããŸãã
ãã€ãã£ãã¢ããªã±ãŒã·ã§ã³ãéçºããããã«ãããã©ã«ãã®ã¢ã«ãã¡äŸåé¢ä¿ïŒReact@16.0.0-alpha.6ïŒãèšå®ã§ããã®ã¯äœã§ããïŒïŒïŒ
Reactããã±ãŒãžããŒãžã§ã³ã¯ãã³ãŒãïŒ Component
ããã³createElement
ïŒãã»ãšãã©å«ãŸããŠããªããããäžè¬ã«React NativeãŠãŒã¶ãŒã«ã¯é©ããŠããŸããã reconciler
ã³ãŒãã¯ãReact Nativeãšåå¥ã«åæããŸãã ãããã£ãŠãããã¯RNãšReactã®ããŸããŸãªãªãªãŒã¹ãµã€ã¯ã«ã®ã¢ãŒãã£ãã¡ã¯ãã§ãããRNã¢ããªã±ãŒã·ã§ã³ãäžå®å®ãªããŒãžã§ã³ã®Reactã䜿çšããããšãæå³ãããã®ã§ã¯ãããŸããã ããã¯ãFacebookã§å¶äœã«äœ¿çšããŠãããã®ãšãŸã£ããåãããŒãžã§ã³ã§ãã ç§ã¯åæããŸãããããã¯æ··ä¹±ãæããã®ã§ãããè¿ãå°æ¥ã«ReactãšReact Nativeéã®ãªãªãŒã¹ããã»ã¹ãä¿®æ£ããããšèããŠããŸãã
èŠçŽãããšãããªãã®èšäºã§ãããã®åé¡ãæèµ·ããããšã«æè¬ããŸãã 圌ãã¯éåžžã«é »ç¹ã«çŸããçš®ããã¿æ®»ããåé¢ããããšãéèŠã ãšèããŸããã ããããç§ãã¡ãšReactãšã³ã·ã¹ãã ãReactãŠãŒã¶ãŒã«ãã䟿å©ãªãã®ãæäŸããããã«ãééããªããã£ãšå€ãã®ä»äºããããŸãããããã®äžè¬çãªåé¡ãå®åŒåããŠããããã解決ã§ããããšãå¬ããæããŸãã
ç·šéïŒãã®ã³ã¡ã³ãã®æåã®ããŒãžã§ã³ã®ååçãªæ»ææ§ãææãããã¹ãŠã®äººã«æè¬ããããšæããŸãã ç§ã¯ããã«ã€ããŠéåžžã«è¬çœªããŸãïŒ ç§ã¯ããå°éçãªå£èª¿ã§ãããç·šéããŸãããããã¯åºçåã«ãããªããã°ãªããŸããã§ããã çµµæåããã¹ãŠåé€ããŸããããTwitterã§ããããèŠã€ããããšãã§ããŸãã