SlideShare a Scribd company logo
Eugene Zharkov
Full Stack Developer
React Native: Hurdle Race
Евгений Жарков "React Native: Hurdle Race"
Евгений Жарков "React Native: Hurdle Race"
Release Cycle
• 0.50 - October (270 commits)

• 0.49 - September (289 commits)

• 0.48 - September (526 commits)

• 0.47 - August (781 commits)

• 0.46 - July (977 commits)

• 0.45 - June (1325 commits)

• 0.44 - May (1731 commits)

• 0.43 - April (2134 commits)

• 0.42 - March (2487 commits)

• 0.41 - January (2777 commits)

• 0.41 - December (3243 commits)
Евгений Жарков "React Native: Hurdle Race"
Breaking Changes Happens
<Image> with nested content is no longer supported. Looking into
<ImageBackground> instead if this is something you did in our
app
Make RCTDeviceEventEmitter warnings fatal
Remove AdSupportIOS
OSS Life
Евгений Жарков "React Native: Hurdle Race"
Styles: Almost CSS
cardIconText: {
color: '#fff',
fontSize: 14,
fontWeight: '600',
letterSpacing: 0.8
},
testDriveLine: {
borderTopWidth: 1,
borderTopColor: '#31353F',
marginTop: 40
},
testDriveActions: {
justifyContent: 'center',
alignItems: 'center',
marginVertical: 16
}
firstName: {
fontSize: 17,
backgroundColor: '#fff',
borderColor: '#acb2b8',
borderRadius: 5,
borderWidth: 1,
paddingVertical: 18,
paddingHorizontal: 16,
marginTop: 30,
marginBottom: 12,
width: '100%',
}
borderStyle: 'solid'
borderWidth: 1
borderColor: ‘#acb2b8’
CSS
React Native CSS
border: solid 1px #acb2b8
Styles: Almost CSS
• No inheritance, nesting, combinations, pseudo
classes -> spaghetti only

• Lack of general styles border: 5px solid red
github/react-native-styling-cheat-sheet
Extended Styles
• styled-components/css-to-react-native

• pjjanak/react-native-nested-stylesheets

• sabeurthabti/react-native-css

• jspears/postcss-react-native
Layout: Flex
buttons: {
flex: 1,
flexDirection: 'row',
justifyContent: 'space-around',
alignItems: 'center',
}
Layout: Markup
<ScrollView
contentContainerStyle={ styles.container }>
<View style={ styles.photoRow }>
<TouchableHighlight
style={ styles.photoWrapper }
onPress={ this.onAvatarPress }>
<Image style={ avatarStyle }
source={ avatarSource } "/>
"</TouchableHighlight>
"</View>
"</ScrollView>
Platform Specific
<TextInput
style={ styles.textInput }
maxLength={ 10 }
blurOnSubmit={ false }
returnKeyType={ "next" }
caretHidden
autoFocus={ num "== 0 "&& this.props.autoFocus }
autoCorrect={ false }
spellCheck={false}
clearTextOnFocus={false}
underlineColorAndroid="transparent"
numberOfLines={2}
autoGrow={true}
keyboardType="numeric"
ref={ input "=> {
this.inputs[num] = input;
}}
onChangeText={ (text) "=> this.onChange(num, text) }
onSubmitEditing={() "=> {
this.focusNextField(num + 1);
}}
"/>
Platform Specific
spellCheck={false}
clearTextOnFocus={false}
underlineColorAndroid="transparent"
numberOfLines={2}
autoGrow={true}
keyboardType="numeric"
Partially
Platform Specific
import { Platform} from 'react-native';
or

Component.ios.js
Component.android.js
import Component from ‘Component';
Application
Fast Start
> npm install -g create-react-native-app
> create-react-native-app my-app
> cd my-app/
> npm start
Component Integration
> npm install react-native-fingerprint-scanner —save
> react-native link react-native-fingerprint-scanner
Happy Way
Component Integration
iOS
	 1	 In XCode, in the project navigator, right click Libraries ➜ Add	Files	to	[your	project's	name]

	 2	 Go to node_modules ➜ react-native-fingerprint-scanner and add
ReactNativeFingerprintScanner.xcodeproj

	 3	 In XCode, in the project navigator, select your project. Add libReactNativeFingerprintScanner.a to
your project's Build	Phases ➜ Link	Binary	With	Libraries

	 4	 Run your project (Cmd+R)

Android
	 1	 Open up android/app/src/main/java/[...]/MainActivity.java

	 •	 Add import	com.hieuvp.fingerprint.ReactNativeFingerprintScannerPackage; to the imports at
the top of the file

	 •	 Add new	ReactNativeFingerprintScannerPackage() to the list returned by the getPackages() method

	 2	 Append the following lines to android/settings.gradle: include	':react-native-fingerprint-
scanner'	
	3	 project(':react-native-fingerprint-scanner').projectDir	=	new	
File(rootProject.projectDir,	'../node_modules/react-native-fingerprint-scanner/
android')	
	 4	 

	 5	 Insert the following lines inside the dependencies block in android/app/build.gradle: compile	
project(':react-native-fingerprint-scanner')
Real Way
What are the limitations of Create React Native App?
The main limitation of a Create React Native App project
is that it must be written in pure JavaScript and not
have any dependencies which rely on custom native code
(i.e. ones which require running react-native link to
work).
Navigation
Navigation Libs
• ReactTraining/react-router (JS)

• react-community/react-navigation (JS)

• wix/react-native-navigation (native)

• airbnb/native-navigation (native)
WIX / react-native-navigation
Navigation / Registration
import { Navigation } from ‘react-native-navigation';
Navigation.registerComponent('pilot.Auth', () "=> Auth);
or with Redux:
Navigation.registerComponent('pilot.Auth', () "=> Auth,
store, Provider);
Navigation / Start
Storage.isUserExist()
.then(exist "=> {
const startScreen = exist ? 'pilot.Auth' :
‘pilot.CreateProfile';
Navigation.startSingleScreenApp({
screen: {
screen: startScreen
}
});
});
Navigation / Go to
this.props.navigator.push({
screen: 'pilot.CreateProfile.UserInfo',
backButtonTitle: '',
passProps: {
phone: this.props.phone,
pin: this.state.code,
authType
}
});
Keyboard Aware View
Medium Article
Debug
• Chrome Developer Tools

• facebook/react-devtools

• jhen0409/react-native-debugger
Debug
Animation Demo
Animation: Init
constructor(props) {
super(props);
let topStart = 0;
if (props.index "<= 1)
topStart = posterTopStart;
else
topStart = props.index % 2 ? 100 : 50;
this.state = {
fadeAnim: new Animated.Value(0),
topAnim: new Animated.Value(topStart),
}
}
Animation: View
<Animated.View
style={{
""...styles.outerContainer,
opacity: fadeAnim,
marginTop: topAnim
}}>
Animation: Run
Animated.timing(this.state.topAnim, {
toValue: topStop,
duration: 1000,
easing: Easing.out(Easing.cubic)
}).start();
Евгений Жарков "React Native: Hurdle Race"
Get used to Xcode
Get used to Android Studio
Knowledge Bottlenecks
• Test simultaneously iOS / Android

• Library Integration beyond react-native link

• Fix library compatibility with latest react-native version

• Learn a part of Swift / Java

• Setup iOS / Android build / deploy
Which Caused Wrong Estimates
Estimated: 10 days
Real: 16 days
Difference: 50-60%
Thank you!
@2j2e
eu.zharkov@gmail.com

More Related Content

PPTX
Володимир Дубенко "Node.js for desktop development (based on Electron library)"
PDF
為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
PDF
JavaScript + Jenkins = Winning!
PDF
JCConf 2015 workshop 動手玩 Java 專案建置工具
PDF
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
PDF
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
PDF
中華電信 教育訓練
PDF
"Wix Serverless from inside", Mykola Borozdin
Володимир Дубенко "Node.js for desktop development (based on Electron library)"
為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
JavaScript + Jenkins = Winning!
JCConf 2015 workshop 動手玩 Java 專案建置工具
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
中華電信 教育訓練
"Wix Serverless from inside", Mykola Borozdin

What's hot (20)

PDF
JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
PDF
"13 ways to run web applications on the Internet" Andrii Shumada
PDF
Viktor Turskyi "Effective NodeJS Application Development"
PDF
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
PDF
Automated android testing using jenkins ci
PDF
[English][Test Girls] Zero to Hero: Start Test automation with Cypress
PDF
Jenkins 101: Getting Started
PDF
Супер быстрая автоматизация тестирования на iOS
PDF
Hacking Jenkins
PPTX
Supermondays: Jenkins CI lightning talk
PDF
Graphql usage
PPTX
Jenkins presentation
PPTX
Grooving with Jenkins
PDF
Jenkins
PPTX
Jenkins Pipeline 101 and TCI - presentation and workshop
ODP
Jenkins 101: Continuos Integration with Jenkins
PDF
Web Performance Part 4 "Client-side performance"
PDF
An Introduction to Gradle for Java Developers
PPTX
Cypress Automation
PPTX
Load Testing with k6 framework
JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
"13 ways to run web applications on the Internet" Andrii Shumada
Viktor Turskyi "Effective NodeJS Application Development"
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
Automated android testing using jenkins ci
[English][Test Girls] Zero to Hero: Start Test automation with Cypress
Jenkins 101: Getting Started
Супер быстрая автоматизация тестирования на iOS
Hacking Jenkins
Supermondays: Jenkins CI lightning talk
Graphql usage
Jenkins presentation
Grooving with Jenkins
Jenkins
Jenkins Pipeline 101 and TCI - presentation and workshop
Jenkins 101: Continuos Integration with Jenkins
Web Performance Part 4 "Client-side performance"
An Introduction to Gradle for Java Developers
Cypress Automation
Load Testing with k6 framework
Ad

Similar to Евгений Жарков "React Native: Hurdle Race" (20)

PDF
Burn your grass with react native
PDF
Lessons from a year of building apps with React Native
PDF
Intro to computer vision in .net
PDF
Bye flex. Hey js.
PDF
Creating Scalable JVM/Java Apps on Heroku
PDF
Node.js Crash Course
PDF
The Ring programming language version 1.9 book - Part 81 of 210
PDF
Node azure
PPTX
React inter3
PPTX
Android 101 - Introduction to Android Development
PDF
PVS-Studio in the Clouds: CircleCI
PDF
Microservices DevOps on Google Cloud Platform
PPTX
Building a REST API Microservice for the DevNet API Scavenger Hunt
PPTX
React nativebeginner1
PPTX
Real World Lessons on the Pain Points of Node.JS Application
PPTX
How (and why) to roll your own Docker SaaS
PDF
Play framework
PDF
OpenStack API's and WSGI
PDF
How to make Ajax Libraries work for you
PPTX
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Burn your grass with react native
Lessons from a year of building apps with React Native
Intro to computer vision in .net
Bye flex. Hey js.
Creating Scalable JVM/Java Apps on Heroku
Node.js Crash Course
The Ring programming language version 1.9 book - Part 81 of 210
Node azure
React inter3
Android 101 - Introduction to Android Development
PVS-Studio in the Clouds: CircleCI
Microservices DevOps on Google Cloud Platform
Building a REST API Microservice for the DevNet API Scavenger Hunt
React nativebeginner1
Real World Lessons on the Pain Points of Node.JS Application
How (and why) to roll your own Docker SaaS
Play framework
OpenStack API's and WSGI
How to make Ajax Libraries work for you
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Ad

More from Fwdays (20)

PDF
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
PDF
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
PPTX
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
PPTX
"Як ми переписали Сільпо на Angular", Євген Русаков
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
PDF
"Validation and Observability of AI Agents", Oleksandr Denisyuk
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
PPTX
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
PPTX
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
PDF
"AI is already here. What will happen to your team (and your role) tomorrow?"...
PPTX
"Is it worth investing in AI in 2025?", Alexander Sharko
PDF
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
PDF
"Scaling in space and time with Temporal", Andriy Lupa.pdf
PDF
"Database isolation: how we deal with hundreds of direct connections to the d...
PDF
"Scaling in space and time with Temporal", Andriy Lupa .pdf
PPTX
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
PPTX
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
PPTX
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
PPTX
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
"Як ми переписали Сільпо на Angular", Євген Русаков
"AI Transformation: Directions and Challenges", Pavlo Shaternik
"Validation and Observability of AI Agents", Oleksandr Denisyuk
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
"AI is already here. What will happen to your team (and your role) tomorrow?"...
"Is it worth investing in AI in 2025?", Alexander Sharko
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Database isolation: how we deal with hundreds of direct connections to the d...
"Scaling in space and time with Temporal", Andriy Lupa .pdf
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...

Recently uploaded (20)

PDF
Getting Started with Data Integration: FME Form 101
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
Hybrid model detection and classification of lung cancer
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
A contest of sentiment analysis: k-nearest neighbor versus neural network
PDF
Getting started with AI Agents and Multi-Agent Systems
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPTX
O2C Customer Invoices to Receipt V15A.pptx
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
DP Operators-handbook-extract for the Mautical Institute
PDF
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
PPTX
Chapter 5: Probability Theory and Statistics
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PPT
What is a Computer? Input Devices /output devices
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
2021 HotChips TSMC Packaging Technologies for Chiplets and 3D_0819 publish_pu...
PDF
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
PDF
August Patch Tuesday
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
Getting Started with Data Integration: FME Form 101
A comparative study of natural language inference in Swahili using monolingua...
Hybrid model detection and classification of lung cancer
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
A contest of sentiment analysis: k-nearest neighbor versus neural network
Getting started with AI Agents and Multi-Agent Systems
Univ-Connecticut-ChatGPT-Presentaion.pdf
gpt5_lecture_notes_comprehensive_20250812015547.pdf
O2C Customer Invoices to Receipt V15A.pptx
Hindi spoken digit analysis for native and non-native speakers
DP Operators-handbook-extract for the Mautical Institute
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
Chapter 5: Probability Theory and Statistics
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
What is a Computer? Input Devices /output devices
Assigned Numbers - 2025 - Bluetooth® Document
2021 HotChips TSMC Packaging Technologies for Chiplets and 3D_0819 publish_pu...
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
August Patch Tuesday
Final SEM Unit 1 for mit wpu at pune .pptx

Евгений Жарков "React Native: Hurdle Race"

  • 1. Eugene Zharkov Full Stack Developer React Native: Hurdle Race
  • 4. Release Cycle • 0.50 - October (270 commits) • 0.49 - September (289 commits) • 0.48 - September (526 commits) • 0.47 - August (781 commits) • 0.46 - July (977 commits) • 0.45 - June (1325 commits) • 0.44 - May (1731 commits) • 0.43 - April (2134 commits) • 0.42 - March (2487 commits) • 0.41 - January (2777 commits) • 0.41 - December (3243 commits)
  • 6. Breaking Changes Happens <Image> with nested content is no longer supported. Looking into <ImageBackground> instead if this is something you did in our app Make RCTDeviceEventEmitter warnings fatal Remove AdSupportIOS
  • 9. Styles: Almost CSS cardIconText: { color: '#fff', fontSize: 14, fontWeight: '600', letterSpacing: 0.8 }, testDriveLine: { borderTopWidth: 1, borderTopColor: '#31353F', marginTop: 40 }, testDriveActions: { justifyContent: 'center', alignItems: 'center', marginVertical: 16 } firstName: { fontSize: 17, backgroundColor: '#fff', borderColor: '#acb2b8', borderRadius: 5, borderWidth: 1, paddingVertical: 18, paddingHorizontal: 16, marginTop: 30, marginBottom: 12, width: '100%', }
  • 10. borderStyle: 'solid' borderWidth: 1 borderColor: ‘#acb2b8’ CSS React Native CSS border: solid 1px #acb2b8
  • 11. Styles: Almost CSS • No inheritance, nesting, combinations, pseudo classes -> spaghetti only • Lack of general styles border: 5px solid red github/react-native-styling-cheat-sheet
  • 12. Extended Styles • styled-components/css-to-react-native • pjjanak/react-native-nested-stylesheets • sabeurthabti/react-native-css • jspears/postcss-react-native
  • 13. Layout: Flex buttons: { flex: 1, flexDirection: 'row', justifyContent: 'space-around', alignItems: 'center', }
  • 14. Layout: Markup <ScrollView contentContainerStyle={ styles.container }> <View style={ styles.photoRow }> <TouchableHighlight style={ styles.photoWrapper } onPress={ this.onAvatarPress }> <Image style={ avatarStyle } source={ avatarSource } "/> "</TouchableHighlight> "</View> "</ScrollView>
  • 15. Platform Specific <TextInput style={ styles.textInput } maxLength={ 10 } blurOnSubmit={ false } returnKeyType={ "next" } caretHidden autoFocus={ num "== 0 "&& this.props.autoFocus } autoCorrect={ false } spellCheck={false} clearTextOnFocus={false} underlineColorAndroid="transparent" numberOfLines={2} autoGrow={true} keyboardType="numeric" ref={ input "=> { this.inputs[num] = input; }} onChangeText={ (text) "=> this.onChange(num, text) } onSubmitEditing={() "=> { this.focusNextField(num + 1); }} "/>
  • 17. Platform Specific import { Platform} from 'react-native'; or Component.ios.js Component.android.js import Component from ‘Component';
  • 19. Fast Start > npm install -g create-react-native-app > create-react-native-app my-app > cd my-app/ > npm start
  • 20. Component Integration > npm install react-native-fingerprint-scanner —save > react-native link react-native-fingerprint-scanner Happy Way
  • 21. Component Integration iOS 1 In XCode, in the project navigator, right click Libraries ➜ Add Files to [your project's name] 2 Go to node_modules ➜ react-native-fingerprint-scanner and add ReactNativeFingerprintScanner.xcodeproj 3 In XCode, in the project navigator, select your project. Add libReactNativeFingerprintScanner.a to your project's Build Phases ➜ Link Binary With Libraries 4 Run your project (Cmd+R) Android 1 Open up android/app/src/main/java/[...]/MainActivity.java • Add import com.hieuvp.fingerprint.ReactNativeFingerprintScannerPackage; to the imports at the top of the file • Add new ReactNativeFingerprintScannerPackage() to the list returned by the getPackages() method 2 Append the following lines to android/settings.gradle: include ':react-native-fingerprint- scanner' 3 project(':react-native-fingerprint-scanner').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fingerprint-scanner/ android') 4 5 Insert the following lines inside the dependencies block in android/app/build.gradle: compile project(':react-native-fingerprint-scanner') Real Way
  • 22. What are the limitations of Create React Native App? The main limitation of a Create React Native App project is that it must be written in pure JavaScript and not have any dependencies which rely on custom native code (i.e. ones which require running react-native link to work).
  • 24. Navigation Libs • ReactTraining/react-router (JS) • react-community/react-navigation (JS) • wix/react-native-navigation (native) • airbnb/native-navigation (native)
  • 26. Navigation / Registration import { Navigation } from ‘react-native-navigation'; Navigation.registerComponent('pilot.Auth', () "=> Auth); or with Redux: Navigation.registerComponent('pilot.Auth', () "=> Auth, store, Provider);
  • 27. Navigation / Start Storage.isUserExist() .then(exist "=> { const startScreen = exist ? 'pilot.Auth' : ‘pilot.CreateProfile'; Navigation.startSingleScreenApp({ screen: { screen: startScreen } }); });
  • 28. Navigation / Go to this.props.navigator.push({ screen: 'pilot.CreateProfile.UserInfo', backButtonTitle: '', passProps: { phone: this.props.phone, pin: this.state.code, authType } });
  • 30. Debug • Chrome Developer Tools • facebook/react-devtools • jhen0409/react-native-debugger
  • 31. Debug
  • 33. Animation: Init constructor(props) { super(props); let topStart = 0; if (props.index "<= 1) topStart = posterTopStart; else topStart = props.index % 2 ? 100 : 50; this.state = { fadeAnim: new Animated.Value(0), topAnim: new Animated.Value(topStart), } }
  • 35. Animation: Run Animated.timing(this.state.topAnim, { toValue: topStop, duration: 1000, easing: Easing.out(Easing.cubic) }).start();
  • 37. Get used to Xcode
  • 38. Get used to Android Studio
  • 39. Knowledge Bottlenecks • Test simultaneously iOS / Android • Library Integration beyond react-native link • Fix library compatibility with latest react-native version • Learn a part of Swift / Java • Setup iOS / Android build / deploy
  • 40. Which Caused Wrong Estimates Estimated: 10 days Real: 16 days Difference: 50-60%