Lo mejor y peor de React Native @ValenciaJS

92
Lo mejor y peor de React Native

Transcript of Lo mejor y peor de React Native @ValenciaJS

Page 1: Lo mejor y peor de React Native @ValenciaJS

Lo mejor y peor de React Native

Page 2: Lo mejor y peor de React Native @ValenciaJS

Marcel Kalveram @marcelkalveram

Page 3: Lo mejor y peor de React Native @ValenciaJS
Page 4: Lo mejor y peor de React Native @ValenciaJS

Prepd getprepd.com

Page 5: Lo mejor y peor de React Native @ValenciaJS

Por qué React Native?

Page 6: Lo mejor y peor de React Native @ValenciaJS

Crea apps nativas con JavaScript y React Aprender una vez, usar en ambas plataformas Soporta código nativo donde es necesario

No es como Titanium, PhoneGap o Ionic 2 No usa el WebView como contenedor No tienes que recompilar cada vez

Page 7: Lo mejor y peor de React Native @ValenciaJS

80 %

Aproximadamente el 80% del código JavaScript se comparte entre iOS y Android

Page 8: Lo mejor y peor de React Native @ValenciaJS

Compatibilidad

iOS 8.0+Android 4.1 (API 16)

Page 9: Lo mejor y peor de React Native @ValenciaJS

Tecnología

Page 10: Lo mejor y peor de React Native @ValenciaJS

clases

template stringsdestructuring

JSX

React Native Packager incluye el compilador de Babel

Page 11: Lo mejor y peor de React Native @ValenciaJS
Page 12: Lo mejor y peor de React Native @ValenciaJS
Page 13: Lo mejor y peor de React Native @ValenciaJS

Primeros pasos

Page 14: Lo mejor y peor de React Native @ValenciaJS

facebook.github.io

Proceso largo y complejo Windows/Linux no soportan iOS

Page 15: Lo mejor y peor de React Native @ValenciaJS

Create React Native$ npm i -g create-react-native-app

Expo Client

No necesitas xCode o Android Studio Desarrollo para iOS en Windows/Linux

$ create-react-native-app my-project$ cd my-project$ npm start

Page 16: Lo mejor y peor de React Native @ValenciaJS

sketch.expo.io

Page 17: Lo mejor y peor de React Native @ValenciaJS

EcmaScript 6

Page 18: Lo mejor y peor de React Native @ValenciaJS

App "ValenciaJS"

Page 19: Lo mejor y peor de React Native @ValenciaJS

https://github.com/wearehanno/valencia-js

Page 20: Lo mejor y peor de React Native @ValenciaJS
Page 21: Lo mejor y peor de React Native @ValenciaJS
Page 22: Lo mejor y peor de React Native @ValenciaJS

Componentes

Page 23: Lo mejor y peor de React Native @ValenciaJS

View

android.view

UIView

Page 24: Lo mejor y peor de React Native @ValenciaJS

Text

TouchableHighlight

Image

imagen estática

puede contener otros elementos Text

imagen dinámica: tiene que ser https en iOS

hereda estilos

usuario hace click

sólo un hijo

Page 25: Lo mejor y peor de React Native @ValenciaJS

Navegación

TabNavigator StackNavigator

Page 26: Lo mejor y peor de React Native @ValenciaJS

Estilos

Page 27: Lo mejor y peor de React Native @ValenciaJS
Page 28: Lo mejor y peor de React Native @ValenciaJS

backfaceVisibility backgroundColor opacity

borderColor borderRadius borderStyle borderWidth

alignItems alignSelf

flex flexBasis flexDirection flexGrow flexShrink flexWrap

justifyContent

margin marginBottom marginHorizontal marginLeft marginRight marginTop marginVertical

padding paddingBottom paddingHorizontal paddingLeft paddingRight paddingTop paddingVertical

position bottom left right top

width height minWidth minHeight maxWidth maxHeight

overflow zIndex

Page 29: Lo mejor y peor de React Native @ValenciaJS
Page 30: Lo mejor y peor de React Native @ValenciaJS

Flexbox

Page 31: Lo mejor y peor de React Native @ValenciaJS

justify-content

align-items

flex-direction

space-around space-between center

flex-start flex-end center

row column

stretch

flex-start

flex: 1

flex-end

Page 32: Lo mejor y peor de React Native @ValenciaJS

Platform

Page 33: Lo mejor y peor de React Native @ValenciaJS

getpepperoni.com

UI toolkits

NativeBase nativebase.io

Page 34: Lo mejor y peor de React Native @ValenciaJS

No hay dimensiones porcentuales (sólo absolutas) No existe una cascada de estilos No hay componentes predefinidos

Usa Dimensions y Flexbox para todo Utiliza estilos globales Usa Pepperoni o NativeBase

Page 35: Lo mejor y peor de React Native @ValenciaJS

Depurar código

Page 36: Lo mejor y peor de React Native @ValenciaJS

react-native run-ios

xCode simulador

react-native run-android

Android Studio/Genymotion

Page 37: Lo mejor y peor de React Native @ValenciaJS

⌘+D (iOS) ⌘+M/CTRL+M (Android)

Page 38: Lo mejor y peor de React Native @ValenciaJS
Page 39: Lo mejor y peor de React Native @ValenciaJS

Hot reloading

Page 40: Lo mejor y peor de React Native @ValenciaJS

APIs

Page 41: Lo mejor y peor de React Native @ValenciaJS

AccessibilityInfo ActionSheetIOS AdSupportIOS Alert AlertIOS Animated AppRegistry AppState AsyncStorage BackAndroid CameraRoll Clipboard DatePickerAndroid

Dimensions Easing Geolocation ImageEditor ImagePickerIOS ImageStore InteractionManager Keyboard LayoutAnimation Linking NativeMethodsMixin NetInfo PanResponder

PermissionsAndroid PixelRatio PushNotificationIOS Settings Share StatusBarIOS StyleSheet Systrace TimePickerAndroid ToastAndroid Vibration VibrationIOS Layout/Shadow Props

Page 42: Lo mejor y peor de React Native @ValenciaJS
Page 43: Lo mejor y peor de React Native @ValenciaJS

AccessibilityInfo ActionSheetIOS AdSupportIOS Alert AlertIOS Animated AppRegistry AppState AsyncStorage BackAndroid CameraRoll Clipboard DatePickerAndroid

Dimensions Easing Geolocation ImageEditor ImagePickerIOS ImageStore InteractionManager Keyboard LayoutAnimation Linking NativeMethodsMixin NetInfo PanResponder

PermissionsAndroid PixelRatio PushNotificationIOS Settings Share StatusBarIOS StyleSheet Systrace TimePickerAndroid ToastAndroid Vibration VibrationIOS Layout/Shadow Props

Page 44: Lo mejor y peor de React Native @ValenciaJS

Alert

Page 45: Lo mejor y peor de React Native @ValenciaJS

AccessibilityInfo ActionSheetIOS AdSupportIOS Alert AlertIOS Animated AppRegistry AppState AsyncStorage BackAndroid CameraRoll Clipboard DatePickerAndroid

Dimensions Easing Geolocation ImageEditor ImagePickerIOS ImageStore InteractionManager Keyboard LayoutAnimation Linking NativeMethodsMixin NetInfo PanResponder

PermissionsAndroid PixelRatio PushNotificationIOS Settings Share StatusBarIOS StyleSheet Systrace TimePickerAndroid ToastAndroid Vibration VibrationIOS Layout/Shadow Props

Page 46: Lo mejor y peor de React Native @ValenciaJS

AsyncStorage

Page 47: Lo mejor y peor de React Native @ValenciaJS

AccessibilityInfo ActionSheetIOS AdSupportIOS Alert AlertIOS Animated AppRegistry AppState AsyncStorage BackAndroid CameraRoll Clipboard DatePickerAndroid

Dimensions Easing Geolocation ImageEditor ImagePickerIOS ImageStore InteractionManager Keyboard LayoutAnimation Linking NativeMethodsMixin NetInfo PanResponder

PermissionsAndroid PixelRatio PushNotificationIOS Settings Share StatusBarIOS StyleSheet Systrace TimePickerAndroid ToastAndroid Vibration VibrationIOS Layout/Shadow Props

Page 48: Lo mejor y peor de React Native @ValenciaJS

CameraRoll

Page 49: Lo mejor y peor de React Native @ValenciaJS

AccessibilityInfo ActionSheetIOS AdSupportIOS Alert AlertIOS Animated AppRegistry AppState AsyncStorage BackAndroid CameraRoll Clipboard DatePickerAndroid

Dimensions Easing Geolocation ImageEditor ImagePickerIOS ImageStore InteractionManager Keyboard LayoutAnimation Linking NativeMethodsMixin NetInfo PanResponder

PermissionsAndroid PixelRatio PushNotificationIOS Settings Share StatusBarIOS StyleSheet Systrace TimePickerAndroid ToastAndroid Vibration VibrationIOS Layout/Shadow Props

Page 50: Lo mejor y peor de React Native @ValenciaJS

GeoLocation

Page 51: Lo mejor y peor de React Native @ValenciaJS

AccessibilityInfo ActionSheetIOS AdSupportIOS Alert AlertIOS Animated AppRegistry AppState AsyncStorage BackAndroid CameraRoll Clipboard DatePickerAndroid

Dimensions Easing Geolocation ImageEditor ImagePickerIOS ImageStore InteractionManager Keyboard LayoutAnimation Linking NativeMethodsMixin NetInfo PanResponder

PermissionsAndroid PixelRatio PushNotificationIOS Settings Share StatusBarIOS StyleSheet Systrace TimePickerAndroid ToastAndroid Vibration VibrationIOS Layout/Shadow Props

Page 52: Lo mejor y peor de React Native @ValenciaJS

Linking

Page 53: Lo mejor y peor de React Native @ValenciaJS

AccessibilityInfo ActionSheetIOS AdSupportIOS Alert AlertIOS Animated AppRegistry AppState AsyncStorage BackAndroid CameraRoll Clipboard DatePickerAndroid

Dimensions Easing Geolocation ImageEditor ImagePickerIOS ImageStore InteractionManager Keyboard LayoutAnimation Linking NativeMethodsMixin NetInfo PanResponder

PermissionsAndroid PixelRatio PushNotificationIOS Settings Share StatusBarIOS StyleSheet Systrace TimePickerAndroid ToastAndroid Vibration VibrationIOS Layout/Shadow Props

Page 54: Lo mejor y peor de React Native @ValenciaJS

NetInfo

none | wifi | cell | unknown

NONE | BLUETOOTH | DUMMY | ETHERNET |MOBILE | MOBILE_DUN | MOBILE_HIPRI | MOBILE_MMS | MOBILE_SUPL | VPN | WIFI | WIMAX | UNKNOWN

Page 55: Lo mejor y peor de React Native @ValenciaJS

AccessibilityInfo ActionSheetIOS AdSupportIOS Alert AlertIOS Animated AppRegistry AppState AsyncStorage BackAndroid CameraRoll Clipboard DatePickerAndroid

Dimensions Easing Geolocation ImageEditor ImagePickerIOS ImageStore InteractionManager Keyboard LayoutAnimation Linking NativeMethodsMixin NetInfo PanResponder

PermissionsAndroid PixelRatio PushNotificationIOS Settings Share StatusBarIOS StyleSheet Systrace TimePickerAndroid ToastAndroid Vibration VibrationIOS Layout/Shadow Props

Page 56: Lo mejor y peor de React Native @ValenciaJS

Share

Page 57: Lo mejor y peor de React Native @ValenciaJS

Plugins de terceros

Page 58: Lo mejor y peor de React Native @ValenciaJS

$ react-native link

$ react-native link react-native-code-push

$ react-native link react-native-airbnb-maps

Page 59: Lo mejor y peor de React Native @ValenciaJS
Page 60: Lo mejor y peor de React Native @ValenciaJS
Page 61: Lo mejor y peor de React Native @ValenciaJS

AppDelegate.m

Page 62: Lo mejor y peor de React Native @ValenciaJS

Info.plist

Page 63: Lo mejor y peor de React Native @ValenciaJS

build.gradle

Page 64: Lo mejor y peor de React Native @ValenciaJS

MainApplication.java

Page 65: Lo mejor y peor de React Native @ValenciaJS

settings.gradle

Page 66: Lo mejor y peor de React Native @ValenciaJS

Comparación

Page 67: Lo mejor y peor de React Native @ValenciaJS

React Native Ionic 2

Lenguaje React/JSX TypeScript/Angular 2

Plantillas JSX HTML

Hilos de ejecución 2 (UI + lógica) 1

Rendimiento Nativo WebView

Componentes predefinidos No Si

Plugins npm + Cordova Cordova

Soporte para Windows No Si

Soporte para escritorios No Si

GitHub stars 46.000 28.000

Page 68: Lo mejor y peor de React Native @ValenciaJS

Resumen

Page 69: Lo mejor y peor de React Native @ValenciaJS

Mejor rendimiento gracias a código nativo Mucha repercusión gracias a Facebook

React es cada vez más popular

Curva de aprendizaje muy larga No hay componentes predefinidos

No hay soporte para Windows o web

Page 70: Lo mejor y peor de React Native @ValenciaJS

Recursos

Page 71: Lo mejor y peor de React Native @ValenciaJS
Page 72: Lo mejor y peor de React Native @ValenciaJS
Page 73: Lo mejor y peor de React Native @ValenciaJS
Page 74: Lo mejor y peor de React Native @ValenciaJS
Page 75: Lo mejor y peor de React Native @ValenciaJS

Gracias a

Page 76: Lo mejor y peor de React Native @ValenciaJS

¡Muchas gracias!

Page 77: Lo mejor y peor de React Native @ValenciaJS

Código interno

Page 78: Lo mejor y peor de React Native @ValenciaJS

React Native Packager

index.bundle.js

servidor local

Websocket

APK IPA

Simulador

Móvilindex.bundle.js

UI JS

Page 79: Lo mejor y peor de React Native @ValenciaJS

index.bundle.js

App nativa

MessageQueue Llamadas JavaScript -> Native

Callbacks Native -> JavaScript

peticiones red renderizar elementos animaciones invocación de código nativo

respuesta red dimensiones

interaction del usuario respuestas de módulos nativos

facebook.github.io/react-native/docs/

Page 80: Lo mejor y peor de React Native @ValenciaJS
Page 81: Lo mejor y peor de React Native @ValenciaJS

Integración continua

Page 82: Lo mejor y peor de React Native @ValenciaJS

Android Studio xCode

Google Play iTunes Connect

IPAAPK

Page 83: Lo mejor y peor de React Native @ValenciaJS
Page 84: Lo mejor y peor de React Native @ValenciaJS

GitHub

Google Play iTunes Connect

IPAAPK

Page 85: Lo mejor y peor de React Native @ValenciaJS
Page 86: Lo mejor y peor de React Native @ValenciaJS

GitHub Bitrise Workflow

Google Play iTunes Connect

IPAAPK

Microsoft CodePush

CodePush

Page 87: Lo mejor y peor de React Native @ValenciaJS

$ npm install --save react-native-code-push@latest

$ react-native link react-native-code-push

Page 88: Lo mejor y peor de React Native @ValenciaJS

$ code-push release-react valenciaJS ios$ code-push release-react valenciaJS android

Page 89: Lo mejor y peor de React Native @ValenciaJS

Bitrise Workflow

TestFairyGoogle Play iTunes Connect

IPAAPK

Microsoft CodePush

CodePush

GitHub

Page 90: Lo mejor y peor de React Native @ValenciaJS

ListView

renderSectionHeaderrenderRow

renderRowrenderRow

Page 91: Lo mejor y peor de React Native @ValenciaJS

React Native 0.43

Page 92: Lo mejor y peor de React Native @ValenciaJS

WebView

source uri html

https://www.meetup.com/ValenciaJS

<html><body>…</body></html>