Lap-Trinh-Tren-Thiet-Bi-Di-Dong - L1-Reactnativeintroduction - (Cuuduongthancong - Com)
Lap-Trinh-Tren-Thiet-Bi-Di-Dong - L1-Reactnativeintroduction - (Cuuduongthancong - Com)
CuuDuongThanCong.com https://fb.com/tailieudientucntt
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Course Outline
Buổi 1 Giới thiệu môn học, Giới thiệu React Native, Thiết lập môi trường
phát triển, Tạo thử ứng dụng đầu tiên.
Buổi 2 JavaScript Programming Language, Lịch sử JavaScript, ECMAScript
2015 /ECMAScript 6/ES2015/ES6, Công cụ ESLint
Buổi 3 Xây dựng giao diện người dùng sử dụng JSX và Flexbox, Testing và
Debugging
Buổi 4 File structures và import, Vòng đời của React component và
methods, Basic Views, React’s Props, tái sử dụng Components.
Buổi 5 Trạng thái của React, Xử lý User Inputs, Input Fields, Cài đặt
modules & libraries bên ngoài.
Buổi 6 Navigation Bar, Scene Transition, ListView
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Course Outline
Buổi 8 Camera, Camera Roll, và Picture Gallery + AsyncStorage
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Grading Policy
Quizzes: 10%
Seminar: 20%
Term Project: 70%
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Term Project
• Making a 5-10 Screens Mobile Application.
• Group & Project Assignment after the midterm exam.
• Set up a group up to three people. (40/3 ~14 groups)
• 15% - Group scores - Usefulness, App Business
Model, UI, UX, Functionality, Code Style, and
Pitching.
• 5% - Individual scores - App development questions
target to each person during presentation.
• 10 minutes presentation: Pitching 3 minutes, Code
Explanation 2 minutes, Question & Answering 5
minutes.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Books & References
• https://facebook.github.io/react-native/
• https://github.com/jondot/awesome-react-native
• https://js.coach/react-native/
CuuDuongThanCong.com https://fb.com/tailieudientucntt
CuuDuongThanCong.com https://fb.com/tailieudientucntt
What is React Native?
• JavaScript framework for building iOS and Android
mobile apps.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Approach of Mobile App Dev.
Object C, Swift
Native (iOS), Java Native Native Smooth 6-24 weeks
(Android)
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Why React Native?
• Native Experience
CuuDuongThanCong.com https://fb.com/tailieudientucntt
What is React?
• Declarative, Efficient,
and Flexible
JavaScript Library that
Building User
Interface on Website.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
What HAPPENS WHEN YOU
RUN A React Native APP?
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
No WebView
No HTML
No CSS
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
import React, {
Component,
} from 'react';
import {
AppRegistry,
Text,
} from 'react-native';
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@implementation MyNativeModule
RCT_EXPORT_MODULE()
@end
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@implementation MyNativeModule
@end
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
{
"remoteModuleConfig":[
// [ $moduleName, $exportedConstants:{}? $methods:[]?, $asyncIndexes:[]? ]
["RCTStatusBarManager",["getHeight","setStyle","setHidden","setNetworkActivityIndicatorVisible"]],
["RCTSourceCode",{"scriptURL":"https:\/\/fanyv88.com:443\/http\/localhost:8081\/index.ios.bundle?platform=ios&dev=true"},["getScriptText"],[0]],
["RCTAlertManager",["alertWithArgs"]],
["RCTExceptionsManager",["reportSoftException","reportFatalException","updateExceptionMessage","reportUnhandledException"]]
,
// ...
]
}
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
VM
Basics
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
// import React, {
// Component,
// } from 'react';
//
// import {
// AppRegistry,
// Text,
TouchableHighlight,
// } from 'react-native';
//
// class SampleApp extends Component {
onPress() {
alert('Hello, World!');
}
// render() {
// return (
<TouchableHighlight style={{ margin: 40 }} onPress={this.onPress}>
<Text>
Button
</Text>
</TouchableHighlight>;
// );
// }
// }
//
// AppRegistry.registerComponent('SampleApp', () => SampleApp);
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
class SampleApp extends Component {
onPress() {
-> alert('Hello, World!');
}
...
}
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
if (Platform.OS === 'ios') {
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons);
}
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
// import React,
//
{
//
// Component,
} from 'react';
// import {
// AppRegistry,
// Text,
// TouchableHighlight,
// } from 'react-native';
//
// class SampleApp extends Component {
// onPress() {
Alert.alert('Hello, World!', 'Press ok to alert again', [
{ text: 'Ok', onPress() { alert('Ok!') } },
{ text: 'Cancel', onPress() { alert('Cancel') } },
]);
// }
// render() {
// return (
// <TouchableHighlight style={{ margin: 40 }} onPress={this.onPress}>
// <Text>
// Button
// </Text>
// </TouchableHighlight>;
// );
// }
// }
//
// AppRegistry.registerComponent('SampleApp', () => SampleApp);
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
@tadeuzagallo #reactamsterdam
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Async Rules
• Good benefits of JavaScript is their asynchronous
natures.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
JS World Android World
Event Bridge
AsyncCall Android
(Non-Blocking) Native
UI
<SwitchAndroid> <SwitchIOS>
CuuDuongThanCong.com https://fb.com/tailieudientucntt
JSX
• Combining JavaScript and XML-markup syntax to create view.
{ background-color : ‘white’}
CSS
{ backgroundColor : ‘white’}
Camel Case in React
CuuDuongThanCong.com https://fb.com/tailieudientucntt
CuuDuongThanCong.com https://fb.com/tailieudientucntt
React-Native Support
• Mac OS can develop
• iOS
• Android
• Only Android
• Ubuntu
• Only Android
CuuDuongThanCong.com https://fb.com/tailieudientucntt
HomeBrew Installation
• Type “Terminal”
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Install React-Native in Mac
for iOS Development.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
React-Native-Cli Command
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Try
• $ cd sampleProject
• $ react-native run-ios
CuuDuongThanCong.com https://fb.com/tailieudientucntt
IDE
• Any Text Editor is fine.
• Atom
• React
• React-Snippet
• Atom-React-Native-CSS
• Atom-React-Native-
Autocomplete
• Sublimes
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Project Structure
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Q/A
CuuDuongThanCong.com https://fb.com/tailieudientucntt