ã ãããããã«ãããã¯ã«é£ã³èŸŒãæã§ãã å¹æãé«ããããã«ãæ å ±ãç¥èã«å€æããããŸããŸãªææ³ã䜿çšããŸãã ç¹ã«ã Alexei Androsov ïŒã€ã³ã¿ãŒãã§ã€ã¹ã®ã·ãã¢éçºè ãYandexïŒ ã«ããã¬ããŒãã®æŠèŠã玹ä»ããŸãã
React Nativeã¯ãiOSããã³Androidåãã®ã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ãã¬ãŒã ã¯ãŒã¯ã§ãã
- 2015幎åé ã«ç»å Ž
- Reactã«åºã¥ããŠæ§ç¯
- WebViewããã³HTMLãã¯ãããžãŒã䜿çšããªã
- ãã€ãã£ãã³ã³ããŒãã³ãã«ã¯JSã«ãã€ã³ããŒããããReactã«ã©ãããããŠããŸã
- iOSã®ãµããŒãã¯AndroidãããåªããŠããŸããããã€ããã¯ã¹ã¯ææã§ã
圌ãæåã§ããïŒ ããïŒ
- PhoneGap-WebViewã§èµ·åãããWebãã¯ãããžãŒã§ã®ãã€ãã£ãã³ã³ããŒãã³ãã®å®è£
- Xamarin-Linuxã®Monoéçºè ã«ãããã¢ããªã±ãŒã·ã§ã³ã¯CïŒã§èšè¿°ãããŠããŸãïŒãããžã§ã¯ãã¯Microsoftã«ãã£ãŠè³Œå ¥ãããŸããïŒ
- NativeScript-React Nativeãšåæ§ã®ã¢ã€ãã¢ïŒXML + JS + CSS
éçºè ããŒã«
- ãæ°ã«å ¥ãã®jsãšãã£ã¿ãŒ
- Xcodeããã³éçºè ã¢ã«ãŠã³ãã§å¹Žé100ãã«ãã¢ããªã±ãŒã·ã§ã³ã®åéãšå ¬é
- å¿è+ Android Studio + SDK +ãšãã¥ã¬ãŒã¿ãŒ
React NativeïŒããããã¥ãŒ
- 2é±éã«1åçšåºŠãªãªãŒã¹
- ã¢ãŒãªãŒã¢ããã¿ãŒã®ãã¹ãŠã®é åïŒäºææ§ã®ãªãå€æŽãã¹ã¿ãã¯ãªãŒããŒãããŒé§åã®éçº
- ãã¹ãŠåãéåžžã®React
React NativeïŒã€ã³ãµã€ãã«ãã¯
- HTMLã¯ãããŸããããJSXã«ã¯ãã©ãããã©ãŒã ã³ã³ããŒãã³ãããããŸã
- CSSã¯ãããŸããããCSSã®ãããªããªãã¡ã€ã«ããããŸã
- DOM APIã¯ãããŸããã äžè¬çã«ã 絶察ã«ã
- ES6 / ES7ããã³babelã§ã§ããããšã¯ãã¹ãŠå®è¡ã§ããŸãããJITã¯å®è¡ã§ããŸããïŒiOSäžïŒ
äžåºŠæžããŠãã©ãã§ãå®è¡ããŸããïŒ ããïŒ ç°ãªããã©ãããã©ãŒã ã§åãã³ãŒããç¹°ãè¿ã䜿çšãããšããäºæ³ãããä»®å®ã®ä»£ããã«ã äžåºŠåŠãã§ãã©ãã«ã§ãæžããŠãã ããã åãã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ïŒã€ã³ã¿ãŒãã§ã€ã¹ãæ§ç¯ããããã®åå¿ãããŒã¿ãµã€ã¯ã«ã®ããã®ReduxïŒã
å°ãã®å²åŠ
ãã¹ãŠããã€ãã£ããªã®ã§ãå®å šãªã¯ãã¹ãã©ãããã©ãŒã ãå¿ããŠãã ããã ãã©ãããã©ãŒã ãç°ãªããããã³ã³ããŒãã³ããç°ãªããŸãã 圌ãã¯ç°ãªãè«çãšçžäºäœçšã®ã¡ã«ããºã ãæã£ãŠããŸãã ãã¹ãŠãJSã§èšè¿°ãããã€ãã£ãã®æŠå¿µãæšãŠãããšãã§ããŸãããããã¯æãŸãããããŸããã ãã€ãã£ãã¯ããªãã®å©ç¹ã§ãïŒ
iOSã®Vineã¢ããªã±ãŒã·ã§ã³ã®äŸã iOSã§ã®æ £ç¿ã¯äœã§ããïŒ TabBarã®äžéšã§ã¯ãã¡ã€ã³ããããã¡ã€ã«ãæ€çŽ¢ãªã©ã®ç»é¢ãåãæ¿ããã®ãäžè¬çã§ãã NavigationBarã®äžéšã«ãååãšãã¿ã³ãå·Šããå³ã«èšè¿°ããã®ãäžè¬çã§ãïŒéåžžãæ»ãã¯å·ŠåŽã«ãããã¢ã¯ã·ã§ã³ã¯å³åŽã«ãããŸãïŒã ããããAndroidã§ã¯ããã§ã¯ãããŸããã NavigationBarããããŸãããç°ãªããŸãããã¿ã³ãå®è¡ããããšã¯ã§ããŸããã ããã«ã¯ãToolBarãšåŒã°ããå¥ã®ã³ã³ããŒãã³ãããããŸãã Androidã§ã¯ãSegmentedActivityãå®è¡ããã®ãäžè¬çã§ããæäžéšã«ãããiOS TabBarã«éåžžã«äŒŒãŠããŸããããã®ä»çµã¿ã¯å®å šã«ç°ãªããŸãã TabBarã§ç»é¢ãã¹ã¯ã€ãã§ããªãå Žåã¯ãAndroid eã§ãããè¡ãããšãã§ããŸããããã¯æ £ç¿çã§ããããã®æ¹æ³ã§ãã
ã¯ãã¹ãã©ãããã©ãŒã
- ã€ã³ã¿ã©ã¯ãã£ããªã³ã³ããŒãã³ãïŒããã²ãŒã·ã§ã³ãã¡ãã¥ãŒãªã©ïŒã¯ç°ãªããŸã
- ãã®ãããã¢ããªã±ãŒã·ã§ã³ã®ã¬ã€ã¢ãŠããç°ãªãå ŽåããããŸã
- ã¢ããªã±ãŒã·ã§ã³ã®è«çã³ã³ããŒãã³ãã¯åãã«ãªãããããäž»ãªé åã§ã
ã¢ããªã±ãŒã·ã§ã³ã®æ§æã¯äœã§ããïŒ
- 䜿ãæ £ããdivãspanãbuttonãinputãªã©ã¯ãããŸããã
- ãªãã¿ã®ãªãCSS
- DOMãªã
ã³ã³ããŒãã³ã
ã¢ããªã±ãŒã·ã§ã³ã¯ãã©ãããã©ãŒã ã³ã³ããŒãã³ãããæ§ç¯ãããŸã-ãããã¯Reactã³ã³ããŒãã³ãã«ã©ããããããã€ãã£ãã¢ãžã¥ãŒã«ã§ã
- ã¯ãã¹ãã©ãããã©ãŒã ããããŸãïŒãã¥ãŒãããã¹ããç»åãããã«ãŒã...
- iOSåºæã®ãã®ããããŸãïŒTabBarIOSãActionSheetIOSã...
- Androidã«åºæã®ãã®ããããŸãïŒBackAndroidãToolbarAndroidã...
[ããã¯å®éã®ã³ãŒãã®å€èŠ³ã§ã]
èå³æ·±ãããšã«ããã¿ã³ã¯ãããŸããïŒ ããªãã«ãšã£ãŠãã©ã®ãã¿ã³ãã¯ãªãã¯ãã³ãã©ãŒãããå®ååãããé åã§ãã ãã¿ã³ã®ä»çµã¿ã¯ãããŸããã ãããã£ãŠãReactã«ã¯ãããã®ã¿ããå¯èœãªèŠçŽ ããããäœã§ãã©ããã§ããæ¬è³ªçã«ãã¿ã³ã«ãªããã®ããããŸãïŒonPressãã³ãã©ãŒããããŸãïŒã å·»ç©ã¯å¥ã®ã³ã³ããŒãã³ãã§ãã ããã¯ã»ã°ã¡ã³ãåããããã¥ãŒã§ãã ç»é¢äžã«ãããã®ã®ã¿ãã¬ã³ããªã³ã°ããå°ãç°ãªãæ¹æ³ã§äœæ¥ããå¿ èŠããããŸãã ScrollViewãããã§ã¯åé¢ãããŠããããã§ãã ããŒããŒãã䜿çšããå Žåã¯ãå¥ã®æ©æ§ã ãããã£ãŠãå¥ã®ããããã£ããããŸã-ãããã©ããããã ãããšã¯å¥ã«ãrefreshControlããããã£ã 誰ããiOSã§ã®éçºæ¹æ³ãç¥ã£ãŠããå Žåãããã¯éåžžã«ãã䌌ãŠããŸãã
[ããã¯ããã¹ãããã¯ã¹ã®å€èŠ³ã§ã]
äžéšã®ããããã£ã¯éåžžã®HTMLå ¥åãšäžèŽããŸãããããã§ãªããã®ããããŸãã
CSSã¯æ¬ç©ã§ã¯ãããŸãã-ããã¯èŠªåã§ã
- çžå¯Ÿå€ãªãã®çµ¶å¯Ÿå€ã«ããã¬ã€ã¢ãŠã
- ã¬ã€ã¢ãŠãã«ã¯ãflexboxããããã£ã®å®è£ ãå¶éãããŠããŸã
- CSSxã®å®å šãªãµããŒãã¯æ±ºããŠãããŸãããå¿ èŠãããŸãã
- åèšã§çŽ70ã®ããããã£ãå®è£ ãããŠããŸãããå®éã«ã¯ååã§ãã 念ã®ãããåžžã«SVGããããŸãã
[CSSã®äŸïŒ1]
PixelRatioã³ã³ããŒãã³ãã¯ãããŸããŸãªç»é¢ïŒRetinaãªã©ïŒã®å¯åºŠãã€ã³ãã®å€ãå®éã®ãã¯ã»ã«ã«å€æããŸãã
[CSSã®äŸïŒ2]
flexã®äŸã次ã«ç€ºããŸãã ã¿ã€ãã»ããããã®ã«ååãªæå°éã®ã»ããã
ã€ã³ã¯å¡åž
- reduxãæ¥ç¶ããŸãããããªãã§ã¯æ¬åœã«æªãã§ããã
- ç»é¢ãšç§»è¡ããžãã¯ãçèãã
- iOSãšAndroidã«ã¯éãããããŸã
- ã¡ã€ã³ã³ã³ããŒãã³ãã¯ããã²ãŒã¿ãŒã«ãªããŸã
[ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã³ãŒã]
ããã²ãŒã¿ãŒ
å€ãã®åé¡ããããŸãã
- 管ççšã®åœä»€åAPIïŒã¡ãœããïŒ
- Navigatorãšã®çžäºäœçšãããã«æ€èšããå¿ èŠããããŸã
- ã¢ãã¡ãŒã·ã§ã³ãšãžã§ã¹ãã£ãŒã®å¶åŸ¡ãé£ãã
- NavigatorBarã¯äžè¬çãªç掻ããå®å šã«åãé¢ãããŠããŸã
- è€æ°ã®ã¹ã¯ãªãŒã³ãéçºããåŸãçã¿ãæãå§ããŸã
å€ãã®ç¹ã§ãåé¡ã¯reduxã§è§£æ±ºãããŸãã
[ãªãæªãã®ïŒ]
ã«ãŒããéå§ããããŸãã¯æ»ãïŒå¥ã®ç»é¢ã«å·»ãæ»ãïŒã«ã¯ãNavigatorãžã®ãªã³ã¯ãäœæããŠããããã®ãªã³ã¯ãååŸããå¿ èŠããããŸãã ãããŠæåã¯ããã§ã¯ãããŸããããªããªã ããã²ãŒã¿ãŒã¯ãŸã ãããŸããã
[ã€ã³ã¿ãŒãã§ãŒã¹ã¯é¢é£ã³ã³ããŒãã³ãã®ããã«èŠããŸã]
[ãããå®éã«ã¯ãã®ããã«èŠãã]
NavigationBarãŸãã¯reduxãå¿ èŠãªçç±
- MyComponentãšNavigationBarããã€ã³ãããããšããªãã§ãã ãã
- ã°ããŒãã«ç¶æ ãšãã£ã¹ãããã¢ã¯ã·ã§ã³ïŒflux / reduxïŒã䜿çšããæ¹ãè¯ã
2015幎12æãEric Vicentiã¯ãNavigatorã®åé¡ã解決ããããšããŠãã³ãã¥ããã£ã®å©ããåããŠnavigation-rfcãããžã§ã¯ããçµç¹ããŸããã 2016幎2æããããžã§ã¯ãã¯NavigationExperimentalãšããååã§React Nativeãã¹ã¿ãŒã«ç§»è¡ããçŸåšFacebookã§éçºäžã§ãã ãŸããå€ãããã²ãŒã·ã§ã³ã¯ãµããŒããããªããªããŸãã
NavigationExperimental-äœãè¡ãããã
- ã¬ãã¥ãŒãµãŒãä»ããŠå¶åŸ¡ãããç¶æ
- åœä»€åAPIã®ä»£ããã«-ã¢ã¯ã·ã§ã³ãã£ã¹ãããã£ãŒ
- ããã²ãŒã·ã§ã³ããžãã¯ã¯ãã¥ãŒããåé¢ãããŠããŸã
- NavigationBarãã¢ãã¡ãŒã·ã§ã³ãããã³å¶åŸ¡ãžã§ã¹ãã£ãããŸããŸãªã³ã³ããŒãã³ãã«åé¢
[ãµã³ãã«ããã²ãŒã·ã§ã³ã³ãŒã]
ã¢ãã¡ãŒã·ã§ã³
- ç¹å¥ãªã³ã³ããŒãã³ãã«ãã£ãŠå®è£ ãããŸã
- <Animated.View>ã<Animated.Image>ã<Animated.Text>ããããŸã
- Reactã®å€éšã§åäœãããã€ãã£ãã³ã³ããŒãã³ããçŽæ¥æŽæ°ãã
[ãµã³ãã«ã¢ãã¡ãŒã·ã§ã³ã³ãŒã]
ããã¯éåžžã«ã¹ã ãŒãºã«åäœããé£ç¶ããŠ/䞊è¡ããŠçµã¿åãããŠãããªãããããªããšãããããšãã§ããŸãã
ãã€ãã£ãã¢ãžã¥ãŒã«
React Nativeã¯ã³ã¢ãå®è£ ããŠããŸããããã¹ãŠã§ã¯ãããŸããã ã¢ãžã¥ãŒã«ããªãå ŽåïŒ
- UIExplorerã®æ€çŽ¢ã³ã³ããŒãã³ãïŒReact Nativeãã¢ã¢ããªã±ãŒã·ã§ã³ïŒ
- OSçšèªã§æ£ããã¢ãžã¥ãŒã«åãèŠã€ãã
- ãœãŒã¹ã§æ€çŽ¢ãããšãææžåãããŠããªãå¯èœæ§ããããŸãïŒåçã®äœææ¹æ³ãSVGïŒ
- js.coach/react-native-React Nativeã®ãã©ã°ã€ã³
- JSããããã€ãã£ãå®è£ ã奜ã
ãã€ãã£ãã¢ãžã¥ãŒã«ã®æ¥ç¶æ¹æ³
rnpmã䜿çš-React Nativeããã±ãŒãžãããŒãžã£ãŒïŒ
$ rnpm link react-native react-native-google-analytics-bridge
ã¯ãã¹ãã©ãããã©ãŒã ã³ã³ããŒãã³ã
ééã£ãæ¹æ³ã¯ããã¹ãŠããã©ã«ããŒã«å ¥ããããšã§ãã
- å ±é/ã³ã³ããŒãã³ã
- Android /ã³ã³ããŒãã³ã
- iOS /ã³ã³ããŒãã³ã
ãã©ãããã©ãŒã ã«å¿ããŠæ¥ç¶ããŸã
æ£ããæ¹æ³ã¯ããã¹ãŠããã©ã«ããŒã«å ¥ããããšã§ãã
- MyComponent / Component.ios.jsãMyComponent / Component.android.js
- ComponentIOSãComponentAndroid
ãã©ãããã©ãŒã äŸåã®ã³ã³ããŒãã³ãïŒComponentIOSãComponentAndroidïŒã®å ŽåããããŒãè¿ãã«çœ®ããŠãããšäŸ¿å©ã§ãããã©ãããã©ãŒã äžã§äžéšã®ã³ã³ããŒãã³ããèŠã€ãããªããšããåé¡ã¯çºçããŸããã
ãã€ãã£ãã³ã³ããŒãã³ãã®èšè¿°æ¹æ³
- ãã¹ãŠãjsã§æžãå¿ èŠã¯ãããŸãã
- ã³ã³ããŒãã³ãã«ã¯UIKitãŸãã¯Android APIã®å®è£ ãå¿ èŠã§ã
- ããã§ãªãå Žåãããªãã¯å¥åŠãªããããã
æçµå ±åã ãã®å Žæããã®ãã㪠ã
PS
ååãWeexãžã®ãªã³ã¯ãç Žæ£-2é±éåãAlibabaã¯Apacheãããžã§ã¯ããè²æž¡ããŸããã
ãããŠåã³Vueå ã ããã¯ãã€ãç§ã®è¶³ã®äžã§æ··ä¹±ããŸãã
React + Reduxã®ã¢ã€ãã¢ãå¹ã蟌ãã ã ãã§ãç§ã¯åœŒããšäžç·ã«èµ°ããŸãããã§ãŒã³ãœãŒã§çã£ãããã«ãããããå Žæã«é©çšããããšããŸãã ãããŠãäœãèµ·ãã-çéžã¹ããŒãžãå±éããŸããïŒïŒ
æ¯èŒãèªãããšã¯éåžžã«èå³æ·±ãã§ãããã誰ã§ããããåãããšãã§ããŸã-Habréã®ãããã¯ã¯æ°ããã§ãã