SlideShare a Scribd company logo
Panagiotis Vourtsis
Front-End Developer @orfium
AN EMOJI INTRO
TO REACT NATIVE
#RNISAWESOME
WHAT I WILL TRY TO COVER
▸ What is RN anyway?
▸ RN API
▸ Examples
▸ Daily tools
▸ Native Modules
▸ Other alternatives
VUE
REACT
ANGULAR
BACKBONE METEOR.JS
EMBER.JS
POLYMER
MITHRIL
FIRST THOUGHTS
#RNISAWESOME
NATIVE APPS ? REALLY ??
▸ Faster
▸ Responsive
▸ Complex gestures
▸ Mobile functionalities usage
▸ Different market for users
but how to stay up with the scale etc?
WHAT IS RN ANYWAY?
#RNISAWESOME
REACT AND REACT NATIVE
ReactJS is a JavaScript library where you can use it to build user
interfaces for the web either standalone or being served from a
server.
What you will need?
‣ A bundler - Webpack setup
‣ Testing environment
‣ jest maybe
‣ enzyme maybe
‣ …etc
#RNISAWESOME
REACT AND REACT NATIVE
React Native is a mobile framework that uses ReactJS and compiles
to native app components.
This way it allowing you to build native mobile applications for
different platforms (iOS, Android, and Windows Mobile) in
JavaScript. In order to do so you will may need Xcode or Android
Studio
It comes out of the box with:
‣ packager (bundler) called metro
‣ jest environment for testing
‣ flow for typing
#RNISAWESOME
RN API
DIV
SPAN
IMG
VIEW
TEXT
IMAGE
TOUCHABLE OPACITY
SCROLLVIEW
…
SOME EXAMPLES
#RNISAWESOME
import React from 'react';
const Welcome = () => (
<div>
Welcome GreeceJS
</div>
);
export default Welcome;
import React from 'react';
import { Text, View } from ΄react-native΄;
const Welcome = () => (
<View>
<Text>Welcome GreeceJS </Text>
</View>
);
export default Welcome;
SIMPLE TRANSFORMATION
#RNISAWESOME
import React from 'react';
const Welcome = () => (
<div>
<span>Welcome GreeceJS </span>
<span style={{ marginTop: 100 }}>
Hey i am right here!
</span>
</div>
);
export default Welcome;
import React from 'react';
import { Text, ScrollView } from ΄react-
native΄;
const Welcome = () => (
<ScrollView>
<Text>Welcome GreeceJS </Text>
<Text style={{ marginTop: 100 }}>
Hey i am right here !!
</Text>
</ScrollView>
);
export default Welcome;
SCROLL CONTENT
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End Developer at Orfium)
#RNISAWESOME
import React from 'react';
const data = {[
{id: '11', key: 'Devin'},
{id: '12', key: 'Jackson'},
{id: '13', key: 'James'},
{id: '14', key: 'Joel'},
]}
const Rankings = () => (
<ul>
{data.map(({ key, id }) => (
<li key={id}>{key}</span>
)}
</ul>
);
export default Rankings;
import React from 'react';
import { Text, View, FlatList } from ΄react-native΄;
const Rankings = () => (
<View>
<FlatList
data={[
{id: '11', key: 'Devin'},
{id: '12', key: 'Jackson'},
{id: '13', key: ‘James'},
]}
keyExtractor={(item) => item.id}
renderItem={({ item }) => <Text>{item.key}
</Text>}
/>
</View>
);
export default Rankings;
LIST
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End Developer at Orfium)
#RNISAWESOME
{
container: {
width: 100%;
position: relative;
margin-top: 10px;
}
}
StyleSheet.create({
container: {
width: ‘100%’,
position: ‘relative’,
marginTop: 10
}
})
STYLING
Native App
MAIN THREAD
JAVASCRIPT
BRIDGE - NATIVE MODULES API
ASYNC
BATCHED
SERIALISABLE
SYNC
%Memorypercore
0
15
30
45
60
PROFILE TO DO LIST PAGE VIEW MAPS
56,02%
24,29%
44,2%
26,52%
42,34%
18%
45,73%
28,38%
Swift RN
CPU USAGE
#RNISAWESOME
DAILY TOOLS
This is the regular hot reload of react, on every change you can
see the changes on your simulator
HOT RELOADING
Reloads the app on every change
LIVE RELOAD
DEBUGGING - PERFORMANCE
Enables the debugging inspector
REMOTE JS DEBUGGING
Shows the frames per screen in order to see which screens
underperform
SHOW PERF MONITOR
#RNISAWESOME
DAILY TOOLS
RN debugging tools
‣ react-devtools (npm)
‣ react-native debugger (redux)
de-
‣ Inspect network requests like in web
‣ Redux inspect for state
‣ React profiling
#RNISAWESOME
REACT NATIVE CHALLENGES
Not very stable modules, event official ones (react-navigation)
iOS / android behave differently in some cases
Although is react doesn’t behave like a web app
Need to understand native renders differently
Keep in mind of performance when dealing with lists
Dealing with emulators vs physical devices
Error logging for production is often difficult to debug
#RNISAWESOME
REACT NATIVE PROS & CONS
✓ Hot reloading
✓ Multiple platforms
✓ Faster build for smaller apps
✓ On the fly JS Bundle
✓ Bigger pool of devs
- Lack of modules
- Native developers still needed
- Immaturity on tools
#RNISAWESOME
CURRENTLY
Facebook
FB Ads Skype Discord Pinterest
WalmartInstagramFB Analytics
TURNED AWAY
Udacity
Airbnb
REACT NATIVE APPS
WHAT IF THERE ARE NO READY
MODULES ??
NATIVE MODULES
#RNISAWESOME
MODULE PACKAGE
APPLICATION
VIEW
MANAGER
VIEW
REACT EXPOSURE
#RNISAWESOME
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new MeetupPackage()
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
}
#RNISAWESOME
public class JSMeetupPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new JSMeetupModule(reactContext));
return modules;
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
List<ViewManager> modules = new ArrayList<>();
modules.add(new JSMeetupViewManager(reactContext));
return modules; // if we have a view else return Collections.emptyList();
}
}
#RNISAWESOME
class JSMeetupModule extends ReactContextBaseJavaModule {
private static String mPremium = "";
public JSMeetupModule(ReactApplicationContext reactContext) {
super(reactContext);
...
}
@Override
public String getName() {
return "JSMeetup";
}
   @ReactMethod
public void setPremium(String premium) {
mPremium = premium;
}
}
#RNISAWESOME
MODULE PACKAGE
APPLICATION
VIEW
MANAGER
VIEW
REACT EXPOSURE
#RNISAWESOME
class JSMeetupReactView extends Component {
setPremium(str) {
NativeModules.JSMeetup.setPremium(str);
}
render() {
return <JSMeetupView
{...this.props}
ref="JSMeetupReactView"
/>;
};
}
const JSMeetupView = requireNativeComponent(
'JSMeetupView',
JSMeetupReactView,
{
nativeOnly: { onChange: true }
}
);
module.exports = JSMeetupReactView;
#RNISAWESOME
public class JSMeetupViewManager extends SimpleViewManager<JSMeetupView> {
private JSMeetupView view;
public JSMeetupViewManager(ReactApplicationContext reactContext) {
view = new JSMeetupView(reactContext);
}
…
@ReactProp(name = "inputUrl")
public void setInputUrl(JSMeetupView view, @Nullable String inputUrl) {
view.setInputUrl(inputUrl);
}
@Override
public void receiveCommand(JSMeetupView root, int commandId, @Nullable
ReadableArray args) {
switch (commandId) {
case "blah":
root.blah();
break;
}
}
}
#RNISAWESOME
public class JSMeetupView extends AnyComponent implements LifecycleEventListener {
public JSMeetupView(ReactApplicationContext context) {
super(context);
context.addLifecycleEventListener(this);
}
public void setInputUrl(String inputUrl) {
...
}
public void blah() {
...
}
}
#RNISAWESOME
MODULE PACKAGE
APPLICATION
VIEW
MANAGER
VIEW
REACT EXPOSURE
#RNISAWESOME
class JSMeetupReactView extends Component {
setPremium(str) {
NativeModules.JSMeetup.setPremium(str);
}
setInputUrl(url) {
NativeModules.JSMeetup.setInputUrl(url);
}
blah() {
UIManager.dispatchViewManagerCommand(
findNodeHandle(this.refs.JSMeetupReactView),
UIManager.JSMeetupView.Commands.blah,
null
);
}
render() {
return <JSMeetupView
{...this.props}
ref="JSMeetupReactView"
/>;
};
}
const JSMeetupView = requireNativeComponent(
'JSMeetupView',
JSMeetupReactView,
{
nativeOnly: { onChange: true }
}
);
module.exports = JSMeetupReactView;
EXPO VS RN INIT
#RNISAWESOME
Expo is the easiest way to start building a new React Native
application. It allows to start a project without installing or
configuring any tools to build native code
#RNISAWESOME
EXPONENTRN INIT
ios/
android/
index.js
App.js
index.js
App.js
it's not possible to include custom native modules beyond the React
Native APIs and components that are available in the Expo client app
#RNISAWESOME
▸ Will I need access to the Native portion of the codebase?
▸ Will I need any third party packages in my app that are not
supported by Expo?
▸ Will my app need to play audio while it is not in the foreground?
▸ Will my app need location services while it is not in the
foreground?
▸ Will I need push notification support?
▸ Am I comfortable working in Xcode and Android Studio?
OTHER ALTERNATIVES
#RNISAWESOME
▸ Ionic
▸ Run on a “webview” with cordova - performance issues
▸ Write once run everywhere
▸ Mimic the platform’s widgets to make your application look native
▸ Angular (lately you can write with VUE as well)
▸ Xamarin
▸ a complete set of tools (diagnostics, debugging)
▸ Just in time & Ahead of time compilation = faster application
startup
▸ You need to write on C#
THANK YOU !
Panagiotis Vourtsis
Front-End Developer @orfium
#RNISAWESOME
https://www.youtube.com/watch?v=hDviGU-57lU
https://medium.com/the-react-native-log/comparing-the-performance-
between-native-ios-swift-and-react-native-7b5490d363e2
https://gist.github.com/panvourtsis/
714155aa2325b7b3b35bdb91f53fe2d3
LINKS
Ad

More Related Content

What's hot (20)

Vuejs testing
Vuejs testingVuejs testing
Vuejs testing
Greg TAPPERO
 
Adventures In JavaScript Testing
Adventures In JavaScript TestingAdventures In JavaScript Testing
Adventures In JavaScript Testing
Thomas Fuchs
 
Angular2 & ngrx/store: Game of States
Angular2 & ngrx/store: Game of StatesAngular2 & ngrx/store: Game of States
Angular2 & ngrx/store: Game of States
Oren Farhi
 
KISS Automation.py
KISS Automation.pyKISS Automation.py
KISS Automation.py
Iakiv Kramarenko
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Paulo Ragonha
 
Testing JS with Jasmine
Testing JS with JasmineTesting JS with Jasmine
Testing JS with Jasmine
Evgeny Gurin
 
Understanding JavaScript Testing
Understanding JavaScript TestingUnderstanding JavaScript Testing
Understanding JavaScript Testing
jeresig
 
Web ui tests examples with selenide, nselene, selene & capybara
Web ui tests examples with  selenide, nselene, selene & capybaraWeb ui tests examples with  selenide, nselene, selene & capybara
Web ui tests examples with selenide, nselene, selene & capybara
Iakiv Kramarenko
 
Under the Hood: Using Spring in Grails
Under the Hood: Using Spring in GrailsUnder the Hood: Using Spring in Grails
Under the Hood: Using Spring in Grails
GR8Conf
 
How Reactive do we need to be
How Reactive do we need to beHow Reactive do we need to be
How Reactive do we need to be
Jana Karceska
 
Testing JavaScript Applications
Testing JavaScript ApplicationsTesting JavaScript Applications
Testing JavaScript Applications
The Rolling Scopes
 
Angularjs Performance
Angularjs PerformanceAngularjs Performance
Angularjs Performance
Steven Lambert
 
JS Fest 2018. Сергей Пузанков. E2E-тестирование фронтенда c Hermione
JS Fest 2018. Сергей Пузанков. E2E-тестирование фронтенда c HermioneJS Fest 2018. Сергей Пузанков. E2E-тестирование фронтенда c Hermione
JS Fest 2018. Сергей Пузанков. E2E-тестирование фронтенда c Hermione
JSFestUA
 
Under the Hood: Using Spring in Grails
Under the Hood: Using Spring in GrailsUnder the Hood: Using Spring in Grails
Under the Hood: Using Spring in Grails
Burt Beckwith
 
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Iakiv Kramarenko
 
Ember and containers
Ember and containersEmber and containers
Ember and containers
Matthew Beale
 
Making React Native UI Components with Swift
Making React Native UI Components with SwiftMaking React Native UI Components with Swift
Making React Native UI Components with Swift
Ray Deck
 
Good karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with KarmaGood karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with Karma
ExoLeaders.com
 
PL/SQL Unit Testing Can Be Fun!
PL/SQL Unit Testing Can Be Fun!PL/SQL Unit Testing Can Be Fun!
PL/SQL Unit Testing Can Be Fun!
Raimonds Simanovskis
 
Workshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native Side
Visual Engineering
 
Adventures In JavaScript Testing
Adventures In JavaScript TestingAdventures In JavaScript Testing
Adventures In JavaScript Testing
Thomas Fuchs
 
Angular2 & ngrx/store: Game of States
Angular2 & ngrx/store: Game of StatesAngular2 & ngrx/store: Game of States
Angular2 & ngrx/store: Game of States
Oren Farhi
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Paulo Ragonha
 
Testing JS with Jasmine
Testing JS with JasmineTesting JS with Jasmine
Testing JS with Jasmine
Evgeny Gurin
 
Understanding JavaScript Testing
Understanding JavaScript TestingUnderstanding JavaScript Testing
Understanding JavaScript Testing
jeresig
 
Web ui tests examples with selenide, nselene, selene & capybara
Web ui tests examples with  selenide, nselene, selene & capybaraWeb ui tests examples with  selenide, nselene, selene & capybara
Web ui tests examples with selenide, nselene, selene & capybara
Iakiv Kramarenko
 
Under the Hood: Using Spring in Grails
Under the Hood: Using Spring in GrailsUnder the Hood: Using Spring in Grails
Under the Hood: Using Spring in Grails
GR8Conf
 
How Reactive do we need to be
How Reactive do we need to beHow Reactive do we need to be
How Reactive do we need to be
Jana Karceska
 
Testing JavaScript Applications
Testing JavaScript ApplicationsTesting JavaScript Applications
Testing JavaScript Applications
The Rolling Scopes
 
JS Fest 2018. Сергей Пузанков. E2E-тестирование фронтенда c Hermione
JS Fest 2018. Сергей Пузанков. E2E-тестирование фронтенда c HermioneJS Fest 2018. Сергей Пузанков. E2E-тестирование фронтенда c Hermione
JS Fest 2018. Сергей Пузанков. E2E-тестирование фронтенда c Hermione
JSFestUA
 
Under the Hood: Using Spring in Grails
Under the Hood: Using Spring in GrailsUnder the Hood: Using Spring in Grails
Under the Hood: Using Spring in Grails
Burt Beckwith
 
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Iakiv Kramarenko
 
Ember and containers
Ember and containersEmber and containers
Ember and containers
Matthew Beale
 
Making React Native UI Components with Swift
Making React Native UI Components with SwiftMaking React Native UI Components with Swift
Making React Native UI Components with Swift
Ray Deck
 
Good karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with KarmaGood karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with Karma
ExoLeaders.com
 
Workshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native Side
Visual Engineering
 

Similar to An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End Developer at Orfium) (20)

Connect.js - Exploring React.Native
Connect.js - Exploring React.NativeConnect.js - Exploring React.Native
Connect.js - Exploring React.Native
joshcjensen
 
React native by example by Vadim Ruban
React native by example by Vadim RubanReact native by example by Vadim Ruban
React native by example by Vadim Ruban
Lohika_Odessa_TechTalks
 
React Native Androidはなぜ動くのか
React Native Androidはなぜ動くのかReact Native Androidはなぜ動くのか
React Native Androidはなぜ動くのか
Yukiya Nakagawa
 
How to React Native
How to React NativeHow to React Native
How to React Native
Dmitry Ulyanov
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React
Robert DeLuca
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
Guy Royse
 
Having Fun with Play
Having Fun with PlayHaving Fun with Play
Having Fun with Play
Clinton Dreisbach
 
Let's react - Meetup
Let's react - MeetupLet's react - Meetup
Let's react - Meetup
RAJNISH KATHAROTIYA
 
Improving android experience for both users and developers
Improving android experience for both users and developersImproving android experience for both users and developers
Improving android experience for both users and developers
Pavel Lahoda
 
Droidcon2013 android experience lahoda
Droidcon2013 android experience lahodaDroidcon2013 android experience lahoda
Droidcon2013 android experience lahoda
Droidcon Berlin
 
React & Redux for noobs
React & Redux for noobsReact & Redux for noobs
React & Redux for noobs
[T]echdencias
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
Yekmer Simsek
 
React Native
React NativeReact Native
React Native
Craig Jolicoeur
 
N Things You Don't Want to Repeat in React Native
N Things You Don't Want to Repeat in React NativeN Things You Don't Want to Repeat in React Native
N Things You Don't Want to Repeat in React Native
Anton Kulyk
 
Reliable Javascript
Reliable Javascript Reliable Javascript
Reliable Javascript
Glenn Stovall
 
How To Integrate Native Android App With React Native.
How To Integrate Native Android App With React Native.How To Integrate Native Android App With React Native.
How To Integrate Native Android App With React Native.
Techugo
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
Jeff Durta
 
React lecture
React lectureReact lecture
React lecture
Christoffer Noring
 
JSAnkara Swift v React Native
JSAnkara Swift v React NativeJSAnkara Swift v React Native
JSAnkara Swift v React Native
Muhammed Demirci
 
End to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux SagaEnd to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux Saga
Babacar NIANG
 
Connect.js - Exploring React.Native
Connect.js - Exploring React.NativeConnect.js - Exploring React.Native
Connect.js - Exploring React.Native
joshcjensen
 
React Native Androidはなぜ動くのか
React Native Androidはなぜ動くのかReact Native Androidはなぜ動くのか
React Native Androidはなぜ動くのか
Yukiya Nakagawa
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React
Robert DeLuca
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
Guy Royse
 
Improving android experience for both users and developers
Improving android experience for both users and developersImproving android experience for both users and developers
Improving android experience for both users and developers
Pavel Lahoda
 
Droidcon2013 android experience lahoda
Droidcon2013 android experience lahodaDroidcon2013 android experience lahoda
Droidcon2013 android experience lahoda
Droidcon Berlin
 
React & Redux for noobs
React & Redux for noobsReact & Redux for noobs
React & Redux for noobs
[T]echdencias
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
Yekmer Simsek
 
N Things You Don't Want to Repeat in React Native
N Things You Don't Want to Repeat in React NativeN Things You Don't Want to Repeat in React Native
N Things You Don't Want to Repeat in React Native
Anton Kulyk
 
Reliable Javascript
Reliable Javascript Reliable Javascript
Reliable Javascript
Glenn Stovall
 
How To Integrate Native Android App With React Native.
How To Integrate Native Android App With React Native.How To Integrate Native Android App With React Native.
How To Integrate Native Android App With React Native.
Techugo
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
Jeff Durta
 
JSAnkara Swift v React Native
JSAnkara Swift v React NativeJSAnkara Swift v React Native
JSAnkara Swift v React Native
Muhammed Demirci
 
End to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux SagaEnd to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux Saga
Babacar NIANG
 
Ad

More from GreeceJS (19)

Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
GreeceJS
 
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
GreeceJS
 
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
GreeceJS
 
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
GreeceJS
 
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
GreeceJS
 
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
GreeceJS
 
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
GreeceJS
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with React
GreeceJS
 
The JavaScript toolset for development on Ethereum
The JavaScript toolset for development on EthereumThe JavaScript toolset for development on Ethereum
The JavaScript toolset for development on Ethereum
GreeceJS
 
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
GreeceJS
 
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
GreeceJS
 
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
GreeceJS
 
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
GreeceJS
 
Challenges of angular in production (Tasos Bekos) - GreeceJS #17
Challenges of angular in production (Tasos Bekos) - GreeceJS #17Challenges of angular in production (Tasos Bekos) - GreeceJS #17
Challenges of angular in production (Tasos Bekos) - GreeceJS #17
GreeceJS
 
The case for HTTP/2
The case for HTTP/2The case for HTTP/2
The case for HTTP/2
GreeceJS
 
GraphQL vs REST
GraphQL vs RESTGraphQL vs REST
GraphQL vs REST
GreeceJS
 
Ellak JavaScript Day
Ellak JavaScript DayEllak JavaScript Day
Ellak JavaScript Day
GreeceJS
 
The history of asynchronous JavaScript
The history of asynchronous JavaScriptThe history of asynchronous JavaScript
The history of asynchronous JavaScript
GreeceJS
 
The tools & technologies behind Resin.io
The tools & technologies behind Resin.ioThe tools & technologies behind Resin.io
The tools & technologies behind Resin.io
GreeceJS
 
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
GreeceJS
 
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
GreeceJS
 
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
GreeceJS
 
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
GreeceJS
 
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
GreeceJS
 
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
GreeceJS
 
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
GreeceJS
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with React
GreeceJS
 
The JavaScript toolset for development on Ethereum
The JavaScript toolset for development on EthereumThe JavaScript toolset for development on Ethereum
The JavaScript toolset for development on Ethereum
GreeceJS
 
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
GreeceJS
 
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
GreeceJS
 
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
GreeceJS
 
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
GreeceJS
 
Challenges of angular in production (Tasos Bekos) - GreeceJS #17
Challenges of angular in production (Tasos Bekos) - GreeceJS #17Challenges of angular in production (Tasos Bekos) - GreeceJS #17
Challenges of angular in production (Tasos Bekos) - GreeceJS #17
GreeceJS
 
The case for HTTP/2
The case for HTTP/2The case for HTTP/2
The case for HTTP/2
GreeceJS
 
GraphQL vs REST
GraphQL vs RESTGraphQL vs REST
GraphQL vs REST
GreeceJS
 
Ellak JavaScript Day
Ellak JavaScript DayEllak JavaScript Day
Ellak JavaScript Day
GreeceJS
 
The history of asynchronous JavaScript
The history of asynchronous JavaScriptThe history of asynchronous JavaScript
The history of asynchronous JavaScript
GreeceJS
 
The tools & technologies behind Resin.io
The tools & technologies behind Resin.ioThe tools & technologies behind Resin.io
The tools & technologies behind Resin.io
GreeceJS
 
Ad

Recently uploaded (20)

Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 

An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End Developer at Orfium)

  • 1. Panagiotis Vourtsis Front-End Developer @orfium AN EMOJI INTRO TO REACT NATIVE
  • 2. #RNISAWESOME WHAT I WILL TRY TO COVER ▸ What is RN anyway? ▸ RN API ▸ Examples ▸ Daily tools ▸ Native Modules ▸ Other alternatives
  • 5. #RNISAWESOME NATIVE APPS ? REALLY ?? ▸ Faster ▸ Responsive ▸ Complex gestures ▸ Mobile functionalities usage ▸ Different market for users but how to stay up with the scale etc?
  • 6. WHAT IS RN ANYWAY?
  • 7. #RNISAWESOME REACT AND REACT NATIVE ReactJS is a JavaScript library where you can use it to build user interfaces for the web either standalone or being served from a server. What you will need? ‣ A bundler - Webpack setup ‣ Testing environment ‣ jest maybe ‣ enzyme maybe ‣ …etc
  • 8. #RNISAWESOME REACT AND REACT NATIVE React Native is a mobile framework that uses ReactJS and compiles to native app components. This way it allowing you to build native mobile applications for different platforms (iOS, Android, and Windows Mobile) in JavaScript. In order to do so you will may need Xcode or Android Studio It comes out of the box with: ‣ packager (bundler) called metro ‣ jest environment for testing ‣ flow for typing
  • 11. #RNISAWESOME import React from 'react'; const Welcome = () => ( <div> Welcome GreeceJS </div> ); export default Welcome; import React from 'react'; import { Text, View } from ΄react-native΄; const Welcome = () => ( <View> <Text>Welcome GreeceJS </Text> </View> ); export default Welcome; SIMPLE TRANSFORMATION
  • 12. #RNISAWESOME import React from 'react'; const Welcome = () => ( <div> <span>Welcome GreeceJS </span> <span style={{ marginTop: 100 }}> Hey i am right here! </span> </div> ); export default Welcome; import React from 'react'; import { Text, ScrollView } from ΄react- native΄; const Welcome = () => ( <ScrollView> <Text>Welcome GreeceJS </Text> <Text style={{ marginTop: 100 }}> Hey i am right here !! </Text> </ScrollView> ); export default Welcome; SCROLL CONTENT
  • 14. #RNISAWESOME import React from 'react'; const data = {[ {id: '11', key: 'Devin'}, {id: '12', key: 'Jackson'}, {id: '13', key: 'James'}, {id: '14', key: 'Joel'}, ]} const Rankings = () => ( <ul> {data.map(({ key, id }) => ( <li key={id}>{key}</span> )} </ul> ); export default Rankings; import React from 'react'; import { Text, View, FlatList } from ΄react-native΄; const Rankings = () => ( <View> <FlatList data={[ {id: '11', key: 'Devin'}, {id: '12', key: 'Jackson'}, {id: '13', key: ‘James'}, ]} keyExtractor={(item) => item.id} renderItem={({ item }) => <Text>{item.key} </Text>} /> </View> ); export default Rankings; LIST
  • 16. #RNISAWESOME { container: { width: 100%; position: relative; margin-top: 10px; } } StyleSheet.create({ container: { width: ‘100%’, position: ‘relative’, marginTop: 10 } }) STYLING
  • 17. Native App MAIN THREAD JAVASCRIPT BRIDGE - NATIVE MODULES API ASYNC BATCHED SERIALISABLE SYNC
  • 18. %Memorypercore 0 15 30 45 60 PROFILE TO DO LIST PAGE VIEW MAPS 56,02% 24,29% 44,2% 26,52% 42,34% 18% 45,73% 28,38% Swift RN CPU USAGE
  • 19. #RNISAWESOME DAILY TOOLS This is the regular hot reload of react, on every change you can see the changes on your simulator HOT RELOADING Reloads the app on every change LIVE RELOAD DEBUGGING - PERFORMANCE Enables the debugging inspector REMOTE JS DEBUGGING Shows the frames per screen in order to see which screens underperform SHOW PERF MONITOR
  • 20. #RNISAWESOME DAILY TOOLS RN debugging tools ‣ react-devtools (npm) ‣ react-native debugger (redux) de- ‣ Inspect network requests like in web ‣ Redux inspect for state ‣ React profiling
  • 21. #RNISAWESOME REACT NATIVE CHALLENGES Not very stable modules, event official ones (react-navigation) iOS / android behave differently in some cases Although is react doesn’t behave like a web app Need to understand native renders differently Keep in mind of performance when dealing with lists Dealing with emulators vs physical devices Error logging for production is often difficult to debug
  • 22. #RNISAWESOME REACT NATIVE PROS & CONS ✓ Hot reloading ✓ Multiple platforms ✓ Faster build for smaller apps ✓ On the fly JS Bundle ✓ Bigger pool of devs - Lack of modules - Native developers still needed - Immaturity on tools
  • 23. #RNISAWESOME CURRENTLY Facebook FB Ads Skype Discord Pinterest WalmartInstagramFB Analytics TURNED AWAY Udacity Airbnb REACT NATIVE APPS
  • 24. WHAT IF THERE ARE NO READY MODULES ??
  • 27. #RNISAWESOME public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), new MeetupPackage() ); } }; @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } }
  • 28. #RNISAWESOME public class JSMeetupPackage implements ReactPackage { @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); modules.add(new JSMeetupModule(reactContext)); return modules; } @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { List<ViewManager> modules = new ArrayList<>(); modules.add(new JSMeetupViewManager(reactContext)); return modules; // if we have a view else return Collections.emptyList(); } }
  • 29. #RNISAWESOME class JSMeetupModule extends ReactContextBaseJavaModule { private static String mPremium = ""; public JSMeetupModule(ReactApplicationContext reactContext) { super(reactContext); ... } @Override public String getName() { return "JSMeetup"; }    @ReactMethod public void setPremium(String premium) { mPremium = premium; } }
  • 31. #RNISAWESOME class JSMeetupReactView extends Component { setPremium(str) { NativeModules.JSMeetup.setPremium(str); } render() { return <JSMeetupView {...this.props} ref="JSMeetupReactView" />; }; } const JSMeetupView = requireNativeComponent( 'JSMeetupView', JSMeetupReactView, { nativeOnly: { onChange: true } } ); module.exports = JSMeetupReactView;
  • 32. #RNISAWESOME public class JSMeetupViewManager extends SimpleViewManager<JSMeetupView> { private JSMeetupView view; public JSMeetupViewManager(ReactApplicationContext reactContext) { view = new JSMeetupView(reactContext); } … @ReactProp(name = "inputUrl") public void setInputUrl(JSMeetupView view, @Nullable String inputUrl) { view.setInputUrl(inputUrl); } @Override public void receiveCommand(JSMeetupView root, int commandId, @Nullable ReadableArray args) { switch (commandId) { case "blah": root.blah(); break; } } }
  • 33. #RNISAWESOME public class JSMeetupView extends AnyComponent implements LifecycleEventListener { public JSMeetupView(ReactApplicationContext context) { super(context); context.addLifecycleEventListener(this); } public void setInputUrl(String inputUrl) { ... } public void blah() { ... } }
  • 35. #RNISAWESOME class JSMeetupReactView extends Component { setPremium(str) { NativeModules.JSMeetup.setPremium(str); } setInputUrl(url) { NativeModules.JSMeetup.setInputUrl(url); } blah() { UIManager.dispatchViewManagerCommand( findNodeHandle(this.refs.JSMeetupReactView), UIManager.JSMeetupView.Commands.blah, null ); } render() { return <JSMeetupView {...this.props} ref="JSMeetupReactView" />; }; } const JSMeetupView = requireNativeComponent( 'JSMeetupView', JSMeetupReactView, { nativeOnly: { onChange: true } } ); module.exports = JSMeetupReactView;
  • 36. EXPO VS RN INIT
  • 37. #RNISAWESOME Expo is the easiest way to start building a new React Native application. It allows to start a project without installing or configuring any tools to build native code
  • 38. #RNISAWESOME EXPONENTRN INIT ios/ android/ index.js App.js index.js App.js it's not possible to include custom native modules beyond the React Native APIs and components that are available in the Expo client app
  • 39. #RNISAWESOME ▸ Will I need access to the Native portion of the codebase? ▸ Will I need any third party packages in my app that are not supported by Expo? ▸ Will my app need to play audio while it is not in the foreground? ▸ Will my app need location services while it is not in the foreground? ▸ Will I need push notification support? ▸ Am I comfortable working in Xcode and Android Studio?
  • 41. #RNISAWESOME ▸ Ionic ▸ Run on a “webview” with cordova - performance issues ▸ Write once run everywhere ▸ Mimic the platform’s widgets to make your application look native ▸ Angular (lately you can write with VUE as well) ▸ Xamarin ▸ a complete set of tools (diagnostics, debugging) ▸ Just in time & Ahead of time compilation = faster application startup ▸ You need to write on C#
  • 42. THANK YOU ! Panagiotis Vourtsis Front-End Developer @orfium #RNISAWESOME https://www.youtube.com/watch?v=hDviGU-57lU https://medium.com/the-react-native-log/comparing-the-performance- between-native-ios-swift-and-react-native-7b5490d363e2 https://gist.github.com/panvourtsis/ 714155aa2325b7b3b35bdb91f53fe2d3 LINKS