Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
モダンフロントエンド + React Native所感 / techcamp03
Search
Yuichi Goto
May 22, 2017
Programming
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
モダンフロントエンド + React Native所感 / techcamp03
第3回開発合宿(2017/05/22)
Yuichi Goto
May 22, 2017
More Decks by Yuichi Goto
See All by Yuichi Goto
[Teaser] Type-Safe Lightweight DDD with Effect Schema
yasaichi
3
580
Google Cloud を用いたソフトウェア開発の内製化組織の早期立ち上げの実現 / Rapid Establishment of In-House Software Development Teams Using Google Cloud
yasaichi
1
1.7k
[EN] Robust and Scalable API Gateway Built on Effect
yasaichi
3
490
Effectで作る堅牢でスケーラブルなAPIゲートウェイ / Robust and Scalable API Gateway Built on Effect
yasaichi
9
2.5k
あるRailsエンジニアがビジネスリーダーに転身するまで
yasaichi
9
3.4k
Active Recordから考える次の10年を見据えた技術選定 / Architecture decision for the next 10 years at PIXTA
yasaichi
50
23k
Active Recordから考える次世代のRuby on Railsの方向性 / Directions for the next generation of Ruby on Rails: From the viewpoint of its Active Record
yasaichi
38
22k
ピクスタのエンジニアリングとCircleCI / Software Engineering with CircleCI at PIXTA
yasaichi
1
500
Ruby on Railsの正体と向き合い方 / What is Ruby on Rails and how to deal with it?
yasaichi
147
96k
Other Decks in Programming
See All in Programming
不幸な GC
chencmd
0
890
業務時間外もAIに働いてもらう話
colorful12
3
10k
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
270
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
130
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
640
フロントエンドUIフレームワークのこれまでとこれから
ssssota
2
1.3k
AIとGame Jamで、ゲームを完成させた話
takahirosaeki
0
110
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
190
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
580
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
180
Featured
See All Featured
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
We Are The Robots
honzajavorek
0
350
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
340
Producing Creativity
orderedlist
PRO
348
41k
Navigating Weather and Climate Data
rabernat
0
510
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
510
Transcript
ϞμϯϑϩϯτΤϯυ + React Nativeॴײ ୈ3ճ։ൃ߹॓Ռൃදɹyasaichi
ൃදߏ 1. എܠͱత 2. ٕज़֓ཁ 3. ࣮ࡍʹͬͯΈͨ 4. ॴײ
എܠͱత
എܠ1: લճͷ߹॓@2016Ն • ReactͰॻ͍ͨMinesweeperΛվྑͨ͠ • CSS Modules, css next, PostCSSͷಋೖΛ
௨ͯ͡ϞμϯCSSٕज़ʹ৮Εͨ • ซͤͯϏϧυपΓΛGulp + Browserify͔Β npm-scripts + webpackʹҠߦͨ͠
͜ΕͰϞμϯϑϩϯτΤϯυ ։ൃҰ௨Γ͑ͨͰʂ
ͦΜͳ;͏ʹߟ͍͑ͯͨ ࣌ظ͕Զʹ͋Γ·ͨ͠
എܠ2: ReactҠߦ@2016ळౙ • Knockout -> ReactҠߦ࣌ʹഊΛΔ • Reduxʢͷഎܠʹ͋ΔFluxʣ͕Θ͔Βͳ͍ • APIܦ༝Ͱऔಘͨ͠ΛͲ͏͖͔࣋ͭ
• SPAͩͬͨΒRoutingߟ͑ͳ͍ͱμϝΜ
͢Έ·ͤΜͰͨ͠
ࠓճͷ߹॓ͷత • ϑϩϯτΤϯυਂ۷Γ + React Nativeௐࠪ • ϒϥβͰಈ͘SPAΔؾ͕Ͱͳ͔ͬͨ • ߹॓લ:
ReduxͷಋೖRoutingपΓͷ࣮ • ߹॓த: OAuthΛͬͨೝূͷ࣮
ٕज़֓ཁ
React Native • ReactͰωΠςΟϒΞϓϦ͕࡞ΕΔͭ • Facebook͕։ൃʢFB, InstaͰ͍ͬͯΔʣ • Ϗϧυ͢ΔͱAndroid /
iOSͰಈ͘ • ը໘JSXͱCSSʹࣅͨԿ͔Ͱهड़
αϯϓϧ: View component /* Logo.css */ .logo { width: 200px;
height: 200px; } // index.ios.js import React from 'react'; import { AppRegistry, Text, View } from 'react-native'; import styles from './styles'; function AwesomeProject() { return ( <View style={styles.container}> <Text style={styles.hello}> Hello, World! </Text> </View> ); } AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);
αϯϓϧ: Styling // styles.ios.js import { StyleSheet } from 'react-native';
export default StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F5FCFF', }, hello: { fontSize: 20, }, }); ComponentͷϨΠΞτ ʹFlexboxΛ͏
Ϗϧυ͢Δͱ͜Μͳײ͡ ※ ॳճͷΈϏϧυ͕ඞཁͰɺҎ߱㵰+RͰϦϩʔυͰ͖Δ
React Navigation • React NativeͷφϏήʔγϣϯϥΠϒϥϦ • keyͱComponentͷϚοϓΛఆٛͯ͠͏ • React NativeެࣜʢͷυΩϡϝϯτʣਪ͠
• WebͰ͍͏react-router
αϯϓϧ /* Logo.css */ .logo { width: 200px; height: 200px;
} import React, { Component } from 'react'; import { AppRegistry, Button, Text, View } from 'react-native'; import { StackNavigator } from 'react-navigation'; import styles from './styles'; class Home extends Component { static navigationOptions = { title: 'Home' }; render() { const { navigate } = this.props.navigation; return ( <View style={styles.container}> <Button onPress={() => navigate('Chat')} title="Chat with Rina" /> </View> ); } } … const AwesomeProject = StackNavigator({ Home: { screen: Home }, Chat: { screen: Chat }}); AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject); keyͱComponentͷϚοϓ
ςΩετΛλοϓ͢Δͱ νϟοτը໘ʹભҠ͢Δ
࣮ࡍʹͬͯΈͨ
ࠓճͷϥΠϒϥϦߏ • ͪΌΜͱ։ൃ͢Δࡍʹඞཁͦ͏ͳͷΛબ • Flux࣮: redux, react-redux • StoreपΓ: normalizr,
reselect • Routing: react-navigation
σϞ
None
None
ॴײ
ϞμϯϑϩϯτΤϯυ • ͪΌΜͱਂ۷ΓͰ͖ͨײ͋ͬͯΑ͔ͬͨ • ReduxΛ͏աఔͰFluxͷ֓೦͕ΫϦΞʹ • σʔλΛਖ਼نԽͯ͠StoreʹೖΕΔͱ͔ • Routingͬͯ͜Μͳײ͡ͰΔΜͩ
React Native • ࡐʹωΠςΟϒΞϓϦΛબΜͰྑ͔ͬͨ • ԶɺΞϓϦ࡞ΕΔʂͱ୯७ʹײಈ͢Δ • SPAͱͯ͠࡞Δ͔͠ͳ͍ͷͰਂ۷ΓͰ͖Δ • ͙͢ϦϩʔυͰ͖ΔͷͰɺखΛಈ͔͠ͳ͕Β
σβΠϯ࡞Δͷʹ͍ͯΔ
ͱ͍͑ • ߥதͷߥͩͳʔײ • ຊମͱΤίγεςϜ͕·ͩ҆ఆ͍ͯ͠ͳ͍ • Կ͔͋ͬͨΒ·ͣissueΛ୳͢ମྗ͕ඞཁ • ϓϥοτϑΥʔϜݻ༗ʢྫ: Deep
Linkʣͷ ͱ͜ΖΛ৮ΔʹωΠςΟϒଆͷ͕ࣝඞཁ
͓ർΕ͞·Ͱͨ͠ʂ Ռ: https://github.com/yasaichi/GHFav