Slide 1

Slide 1 text

REACT NATIVE Internals @tadeuzagallo #reactamsterdam

Slide 2

Slide 2 text

ABOUT Me @tadeuzagallo #reactamsterdam

Slide 3

Slide 3 text

@tadeuzagallo #reactamsterdam

Slide 4

Slide 4 text

WHAT HAPPENS WHEN YOU TYPE A URL INTO YOUR BROWSER AND PRESS ENTER? @tadeuzagallo #reactamsterdam

Slide 5

Slide 5 text

@tadeuzagallo #reactamsterdam

Slide 6

Slide 6 text

@tadeuzagallo #reactamsterdam

Slide 7

Slide 7 text

What HAPPENS WHEN YOU RUN A React Native APP? @tadeuzagallo #reactamsterdam

Slide 8

Slide 8 text

@tadeuzagallo #reactamsterdam

Slide 9

Slide 9 text

▸ No WebView ▸ No HTML ▸ No CSS @tadeuzagallo #reactamsterdam

Slide 10

Slide 10 text

@tadeuzagallo #reactamsterdam

Slide 11

Slide 11 text

@tadeuzagallo #reactamsterdam

Slide 12

Slide 12 text

@tadeuzagallo #reactamsterdam

Slide 13

Slide 13 text

import React, { Component, } from 'react'; import { AppRegistry, Text, } from 'react-native'; class SampleApp extends Component { render() { return ( Hello, World! ); } } AppRegistry.registerComponent('SampleApp', () => SampleApp); @tadeuzagallo #reactamsterdam

Slide 14

Slide 14 text

@tadeuzagallo #reactamsterdam

Slide 15

Slide 15 text

@tadeuzagallo #reactamsterdam

Slide 16

Slide 16 text

@tadeuzagallo #reactamsterdam

Slide 17

Slide 17 text

@implementation MyNativeModule RCT_EXPORT_MODULE() @end @tadeuzagallo #reactamsterdam

Slide 18

Slide 18 text

@implementation MyNativeModule + (NSString *)moduleName { return @""; } + (void)load { RCTRegisterModule(self); } @end @tadeuzagallo #reactamsterdam

Slide 19

Slide 19 text

@tadeuzagallo #reactamsterdam

Slide 20

Slide 20 text

@tadeuzagallo #reactamsterdam

Slide 21

Slide 21 text

{ "remoteModuleConfig":[ // [ $moduleName, $exportedConstants:{}? $methods:[]?, $asyncIndexes:[]? ] ["RCTStatusBarManager",["getHeight","setStyle","setHidden","setNetworkActivityIndicatorVisible"]], ["RCTSourceCode",{"scriptURL":"http:\/\/localhost:8081\/index.ios.bundle?platform=ios&dev=true"},["getScriptText"],[0]], ["RCTAlertManager",["alertWithArgs"]], ["RCTExceptionsManager",["reportSoftException","reportFatalException","updateExceptionMessage","reportUnhandledException"]], // ... ] } @tadeuzagallo #reactamsterdam

Slide 22

Slide 22 text

@tadeuzagallo #reactamsterdam

Slide 23

Slide 23 text

VM Basics @tadeuzagallo #reactamsterdam

Slide 24

Slide 24 text

@tadeuzagallo #reactamsterdam

Slide 25

Slide 25 text

@tadeuzagallo #reactamsterdam

Slide 26

Slide 26 text

@tadeuzagallo #reactamsterdam

Slide 27

Slide 27 text

@tadeuzagallo #reactamsterdam

Slide 28

Slide 28 text

@tadeuzagallo #reactamsterdam

Slide 29

Slide 29 text

// import React, { // Component, // } from 'react'; // // import { // AppRegistry, // Text, TouchableHighlight, // } from 'react-native'; // // class SampleApp extends Component { onPress() { alert('Hello, World!'); } // render() { // return ( Button ; // ); // } // } // // AppRegistry.registerComponent('SampleApp', () => SampleApp); @tadeuzagallo #reactamsterdam

Slide 30

Slide 30 text

@tadeuzagallo #reactamsterdam

Slide 31

Slide 31 text

@tadeuzagallo #reactamsterdam

Slide 32

Slide 32 text

@tadeuzagallo #reactamsterdam

Slide 33

Slide 33 text

@tadeuzagallo #reactamsterdam

Slide 34

Slide 34 text

@tadeuzagallo #reactamsterdam

Slide 35

Slide 35 text

class SampleApp extends Component { onPress() { -> alert('Hello, World!'); } ... } @tadeuzagallo #reactamsterdam

Slide 36

Slide 36 text

if (Platform.OS === 'ios') { AlertIOS.alert(title, message, buttons); } else if (Platform.OS === 'android') { AlertAndroid.alert(title, message, buttons); } @tadeuzagallo #reactamsterdam

Slide 37

Slide 37 text

@tadeuzagallo #reactamsterdam

Slide 38

Slide 38 text

@tadeuzagallo #reactamsterdam

Slide 39

Slide 39 text

@tadeuzagallo #reactamsterdam

Slide 40

Slide 40 text

@tadeuzagallo #reactamsterdam

Slide 41

Slide 41 text

// import React, { // Component, // } from 'react'; // // import { // AppRegistry, // Text, // TouchableHighlight, // } from 'react-native'; // // class SampleApp extends Component { // onPress() { Alert.alert('Hello, World!', 'Press ok to alert again', [ { text: 'Ok', onPress() { alert('Ok!') } }, { text: 'Cancel', onPress() { alert('Cancel') } }, ]); // } // render() { // return ( // // // Button // // ; // ); // } // } // // AppRegistry.registerComponent('SampleApp', () => SampleApp); @tadeuzagallo #reactamsterdam

Slide 42

Slide 42 text

@tadeuzagallo #reactamsterdam

Slide 43

Slide 43 text

@tadeuzagallo #reactamsterdam

Slide 44

Slide 44 text

@tadeuzagallo #reactamsterdam

Slide 45

Slide 45 text

Thank you @tadeuzagallo #reactamsterdam