React Native Beginners Workshop
Intro
Rahul Gaba
Atul R


Pre-requisites
- 
	
Install node, react-native-cli, Android studio and Xcode (click on "Building Projects with Native Code" tab): https://facebook.github.io/react-native/docs/getting-started.html
 - 
	
Make sure your emulators are working and running (either android or ios)
 - 
	
Yarn: npm install -g yarn
 - 
	
An ESLint supported IDE, preferably Atom: https://atom.io
 - 
	
Clone this repo: https://github.com/react-native-workshop/note-taker
 - 
	
Install latest version of React Native Debugger: https://github.com/jhen0409/react-native-debugger/releases
 
Goal
- Understand how react-native works.
 - Build a native android and iOS app.
 - Setup CI for automated builds.
 - Conventions to manage the codebase.
 
Note Taker






react-native
Another JS framework?

A revolutionary framework which lets you build native apps using JS*

React-Native Architecture 🏛
- 
	
Native Code/Modules
 - JavaScript VM
 
React-Native Internals 🛠


Get, Set.. Code!
git checkout chapter-1 yarn install
yarn android or yarn ios
Get, Set.. Code!
Task #1: Run Hello world app
Get, Set.. Code!
Get, Set.. Code!
Task #1: Run Hello world app


Debugging


Mac
iOS: cmd+ctrl+z
Android: cmd+m
Windows
iOS: NA
Android: ctrl+m
The Boilerplate 🍽
Get, Set.. Code!
Start writing components


Get, Set.. Code!
Task #2: Adding ESLint, githooks
yarn git checkout chapter-2 yarn android OR yarn ios
Get, Set.. Code!
Task #3: Adding ESLint, githooks


Speeding up development with some ES7 Features ⏩
- ES6 Classes
 - Class properties instead of constructor
 - Arrow functions instead of class methods
 - Object rest spread
 


Using ES7 features
Testing 🙇
- What's the use of testing UI code?
 - Snapshots
 - Testing stateful components using Enzyme
 
Get, Set.. Code!
Task #3: Write test cases for the code so far
yarn git checkout chapter-3
Styling 💅
- Flexbox
 - Theme variables
 - Separating styles from component code
 
Get, Set.. Code!
Task #4: Style the components
git checkout chapter-4
Get, Set.. Code!
Task #4: Style the components


Before
After
Using third party modules 📦
- When should I look for third party components?
 - awesome-react-native: https://github.com/jondot/awesome-react-native
 - How react-native link works?
 - Adding react-native-vector-icons
 
Get, Set.. Code!
Task : Add react-native-vector-icons using react-native link
BREAK
DevOps ✈️
- 
	
Lint and tests with coverage should run whenever a pull request is raised.
 - 
	
CI builds and publish app to the internal team testers on every merge to master.
 - 
	
Manual Building capability for developers
 
To see circleci build: https://goo.gl/uzgNp1
Redux 🗄
- 
	
Why state management?
 - 
	
Reducers/Actions/Dispatch
 - 
	
Presentational Components VS Container Components
 
Redux 🗄

Get, Set.. Code!
Task #6: Add functionality to our app using redux
git checkout chapter-6
Get, Set.. Code!

Task #6: Add functionality to our app using redux
Navigation 🛣
- 
	
How navigation happens in native applications?
 - 
	
Types of navigators offered by react-navigation
 - 
	
Navigate using redux-actions
 
Navigation 🛣

A Stack in native apps
Get, Set.. Code!
Task #7: Add multipage navigation to our app
git checkout chapter-7
Get, Set.. Code!
Task #7: Add multipage navigation to our app


Porting the app to web
git checkout chapter-8
Task #8: Add a Link component to our app that should show up the link passed to it on a separate tab in browser on both android and web
Custom Native Modules 🍱
- Do I need to know Java/Objective-C?
 - Writing Native-wrappers of existing native modules.
 - Writing a Device Module for both Android and iOS
 
Get, Set.. Code!
Task #9: Create a custom module which returns the device name
git checkout chapter-9
Task #11: Create a custom module which returns the device name


References
- 
	
http://reactkungfu.com/2015/07/why-and-how-to-bind-methods-in-your-react-component-classes/
 - 
	
https://medium.com/differential/managing-configuration-in-react-native-cd2dfb5e6f7b
 - 
	
https://medium.com/the-react-native-log/comparing-the-performance-between-native-ios-swift-and-react-native-7b5490d363e2
 
Q&A
The End


Feedback: https://goo.gl/PXLjov
React-Native
By Rahul Gaba
React-Native
- 3,556