63
React Native for Android 廖廖廖

React Native

Embed Size (px)

Citation preview

Page 1: React Native

React Native for Android廖祜秋

Page 2: React Native

唯有钱与美酒不可辜负

Page 3: React Native

Make it better.

Page 4: React Native

质有高低,境界不同。

Page 5: React Native

Thanks.

Page 6: React Native

廖祜秋 liaohuqiu_秋百万

Page 7: React Native

Not only for Android.

Page 8: React Native

Let’s start again.

Page 9: React Native

React Native廖祜秋

Page 10: React Native

A month ago …

Page 11: React Native

Survey

• Node.js / NPM

• JavaScript

• React Native

• React

Page 12: React Native

Content

• React && React Native

• Thinking

• Performance

• JavaScript

• Deep into React Native

• Quick Start

• Hot Deployment

• Why React Native

Page 13: React Native

JavaScript Environment

• JSC: iOS simulators and devices

• V8: Chrome debugging / Debug Server

• JSC: Android emulators and devices

Page 14: React Native

ES6

Page 15: React Native

JSX Synax

• Looks similar to XML

• A JavaScript syntax extension

• NOT a part of the ECMAScript spec

Page 16: React Native

JSX Synax

https://facebook.github.io/jsx/

Page 17: React Native

Node.js / NPM

Full stack development

Page 18: React Native

React

• Declarative

• Virtual DOM

• Simple: state / render

Page 19: React Native

Render

• Data changed: setState()

• Initialized: getIinitialState()

Page 20: React Native

JavaScript & React

Page 21: React Native

React Native

Page 22: React Native

Quick Start

Page 23: React Native

Quick Start

Page 24: React Native

Debug Server

Page 25: React Native

Run Demo

• Android …

• iOS: open project in Xcode, then run

Page 26: React Native

Run Demo for Android

• devices: 5.0 above, adb reverse port

• simulators

• devices: set Debug server

Page 27: React Native

Deliver Package

• Android: gradle plugin

• iOS / Android: react-native bundle(since 0.12.0)

Page 28: React Native

Examples

Page 29: React Native

Why React Native

Page 30: React Native

Why React Native

• Acceptable performance

• Native look and feel

• Code reuse

• Fast development

• Fast deployment (Still some way to go for Android)

Page 31: React Native

Deep into React Native

Page 32: React Native

Deep into React Native

• JavaScriptModule

• ReactBridge

• NativeModule

• Native UI Components

Page 33: React Native

ReactBridge

Page 34: React Native

ReactBridge

• callFunction(int moduleId, int methodId, NativeArray arguments)

• setGlobalVariable(String propertyName, String data)

Page 35: React Native

Module tables

• NativeModule

• JavaScriptModule

Page 36: React Native

JavaScriptModule

Page 37: React Native

NativeModule

Page 38: React Native

NativeModule

Page 39: React Native

Module tables

• From JS to Native: MessageQueue

• From Native to JS

• Send touch event to JS, JS process UI

Page 40: React Native

Reuse of current code

• Module

• UI

Page 41: React Native

Hot Deployment

Page 42: React Native

Update React Native apps, instantly.Only for iOS currently.

Page 43: React Native

Android ?

Page 44: React Native

Performance

Page 45: React Native
Page 46: React Native

A compelling reason for using React Native instead of WebView-based tools is to achieve 60 FPS and a native look & feel to your apps.

Performance

Page 47: React Native

Sources of performance problems.

Page 48: React Native

Dropping JS thread FPS because of doing a lot of work on the JavaScript thread at the same time

Page 49: React Native

• Development mode (dev=true)

• Slow navigator transitions

• ListView initial rendering is too slow or scroll performance is bad for large lists

Page 50: React Native

Considerations

• Test on both platforms

• Prone to human error

• Inevitable consequence

Page 51: React Native

Working across separate iOS and Android code repositories is difficult.

Even with lots of tools and automation.

Code repositories

Page 52: React Native

What do we have?

Page 53: React Native

WeApp

Page 54: React Native

WeApp

• CSS

• iOS and Android implementation

• Testing

Page 55: React Native

What we learn?

Page 56: React Native

Shipped native app on two platforms, with native look and feel.

What we learn

Page 57: React Native

3 -> 7

What we learn

Page 58: React Native

Not all of the engineers were familiar with React when they joined the team.

Yet they built an iOS app with native look and feel in just five months.

What we learn

Page 59: React Native

And after an additional three months, we released the Android version of the app.

What we learn

Page 60: React Native

What we learn

• Product engineer: full stack

• Creativity

• Smart and hard working

Page 61: React Native

Q & A

Page 62: React Native

What we learn

Page 63: React Native

廖祜秋 liaohuqiu_秋百万Q & A