React Native
2018.7.21
TechMeetup#2
Who are you?
• Yukiya Nakagawa / @Nkzn
• @
•
• Android 2009
• React Native 2016
TechMeetup#2
https://www.nikkei.com/article/DGXMZO32881350R10C18A7L21000/
React Native
•
• Hello World
• Production
• React Native
IT
• JavaScript (React, Node)
• Android
• iOS
• React Native
• React Native
React
React
https://facebook.github.io/react/
•
• JSX
•
Reactive
JSX
<div>
<Header />
<LeftPane />
<RightPane
name={myName}/>
</div>
React
import React from 'react';
import ReactDOM from 'react-dom';
const styles = {
container: {display: 'flex', flexDirection: ‘row', …}
};
class App extends React.Component {
render() {
const myName = /* props or state */;
return (
<div style={styles.container}>
<Header />
<LeftPane />
<RightPane
name={myName} />
</div>
);
}
}
ReactDOM.render(
<App />,
document.getElementById('app')
);
Virtual DOM
<ccc
style={{
width: 200,
color: "red"
}}
enabled={true} />
React
VirtualDOM
DOM
React
VirtualDOM
DOM
React
VirtualDOM
DOM
React
VirtualDOM
DOM
React is
• Facebook JS
• https://facebook.github.io/react/
•
•
• View
View View
React Native
React
import React from 'react';
import ReactDOM from 'react-dom';
const styles = {
container: {display: 'flex', flexDirection: ‘row', …}
};
class App extends React.Component {
render() {
const myName = /* props or state */;
return (
<div style={styles.container}>
<Header />
<LeftPane />
<RightPane
name={myName} />
</div>
);
}
}
ReactDOM.render(
<App />,
document.getElementById('app')
);
import ReactDOM from 'react-dom';
div
div
ReactDOM.render(
<App />,
document.getElementById('app')
);
import React from "react";
import { View, AppRegistry } from "react-native";
const styles = {
container: {display: 'flex', flexDirection: ‘row', …}
};
class App extends React.Component {
render() {
const myName = /* props or state */;
return (
<View style={styles.container}>
<Header />
<LeftPane />
<RightPane
name={myName} />
</View>
);
}
}
AppRegistry.registerComponent(
"MyReactNativeApp",
() => App
);
React
ReactDOM
React
UI
React Native
Biz
Biz
• Android iOS
•
•
•
https://www.kantarworldpanel.com/global/smartphone-os-market-share/
•
•
• iOS Android
1
Android iOS
XML
xib
storyboard
Android iOS
OS
UI
Java
Kotlin
Obj-C
Swift
React Native
Android iOS
OS
UI
ReactRootView RCTRootView
on
React Native
react-native init
$ npm install -g react-native-cli
$ react-native init RNDemo
$ cd RNDemo
$ yarn start
Xcode/Android Studio
Android/iOS
React Native
Babel
on JavaScriptCore
on C++
Cheap Dive
into React Native
BOOTH 1000
https://echigo-ya.booth.pm/items/825721
on
create-react-native-app
(Expo)
create-react-native-app
$ npm install -g create-react-native-app
$ create-react-native-app crna-demo
$ cd crna-demo
$ yarn start
by Quipper
by
https://play.google.com/store/apps/details?id=jp.agri_note.area&hl=ja
https://itunes.apple.com/jp/app/%E9%9D%A2%E7%A9%8D%E8%A8%88%E7%AE%97/id1234162227?mt=8
Togetter
• React Native Japan
• https://github.com/react-native-jp/react-
native-apps-jp
React Native for Web
React XP
Skype
Microsoft Office
React Native
💪
💪
• JavaScriptCore
• Android
• iOS
• NPM(Node) Babel JS
• Gradle javac Android
• Xcode CocoaPods iOS
CocoaPods
Expo
•
•
AppStore Connect
ipa AppStore Connect
Expo
•
•
•
• 

• Play AppStore
• AppStore
• React
• JavaScriptCore
•
• Android iOS
• React Native
•
•
•
•
•
•
• etc
•
•
•
•
•
• etc
•
• JSON
•
•
•
React Native
RN
• Android iOS
• Kotlin Swift
• Web
• RN
•
• 

RN 🤔
Airbnb
Airbnb
•
• react-native-maps react-native-lottie
•
•
• RN
Airbnb
• RN
•


http://studio-andy.hatenablog.com/entry/
react-native-at-airbnb
React Native
React Nativeの光と闇

React Nativeの光と闇