Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Building Stellar User Experiences with React Na...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Alexander Kotliarskyi
July 12, 2017
Programming
1.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Building Stellar User Experiences with React Native
Alexander Kotliarskyi
July 12, 2017
More Decks by Alexander Kotliarskyi
See All by Alexander Kotliarskyi
React Native: Under the Hood
frantic
31
22k
React Native Tutorial - NYC'15
frantic
5
1.5k
Other Decks in Programming
See All in Programming
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
540
Swiftのレキシカルスコープ管理
kntkymt
0
210
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
720
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.9k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.1k
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
930
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.5k
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
140
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
500
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
190
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
450
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
210
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
Building Adaptive Systems
keathley
44
3k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
BBQ
matthewcrist
89
10k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
140
Bash Introduction
62gerente
615
210k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Invisible Side of Design
smashingmag
302
52k
The Curse of the Amulet
leimatthew05
1
13k
Building Applications with DynamoDB
mza
96
7.1k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Transcript
Alex Kotliarskyi Building Stellar User Experiences with React Native
None
How do you know ☕ is good?
☕
☕
Expectations
Expectations iOS Android Desktop Web Mobile Web Windows Linux
Mobile apps have higher UX expectations level than Web apps
Expectations change
None
None
iOS Developer Web Developer React ❤ React Native Core Team
(3 years) Building apps with RN (F8, Oculus) Alex Kotliarskyi @alex_frantic
<ScrollView> UIScrollView iOS android.widget.ScrollView Android
"React Native made me 10x more productive"
Android RN iOS time
10% is not done
Building for is different
<ScrollView> <Text> <View> <DatePicker> <Switch> <Image> <TabBar>
<ScrollView> <Text> <View> <DatePicker> <Switch> <Image> <TabBar>
<ScrollView> <Text> <View> <DatePicker> <Switch> <Image> <TabBar> ✨
Text Input Direct Manipulation Animation and Spatial Awareness Loading State
UI Library ....
It's all simple things
...but not very obvious
None
Text Input Direct Manipulation Animation and Spatial Awareness Loading State
UI Library
None
None
<TextInput style={styles.field} value={this.state.email} onChangeText={(email) => this.setState({email})} />
None
None
10% time 100% done
Dismissing keyboard Autofocus Placeholders Space under keyboard Spell checking and
auto-capitalization Keyboard type Custom return key
<TextInput style={styles.field} value={this.state.email} onChangeText={(email) => this.setState({email})} keyboardAppearance="light" placeholder="
[email protected]
" autoFocus={true} autoCapitalize="none"
autoCorrect={false} keyboardType="email-address" returnKeyType="next" onSubmitEditing={this._focusNext} blurOnSubmit={false} />
<EmailInput value={this.state.email} onChangeText={(email) => this.setState({email})} />
Text Input Direct Manipulation Animation and Spatial Awareness Loading State
UI Library
None
None
None
None
None
Direct manipulation
Direct Manipulation Instant Feedback Physics Touch Targets Ability to Cancel
✍
https://webkit.org/blog/5610/more-responsive-tapping-on-ios/
<Touchable* />
Direct Manipulation Instant Feedback Physics Touch Targets Ability to Cancel
None
Animated.decay() Animated.timing() Animated.spring() https://github.com/wix/react-native-interactable
None
Animated.spring(value, { ... useNativeDriver: true, }).start();
InteractionManager
Direct Manipulation Instant Feedback Physics Touch Targets Ability to Cancel
None
None
https://material.io/guidelines/usability/accessibility.html#accessibility-style
<Touchable hitSlop={...} />
None
Direct Manipulation Instant Feedback Physics Touch Targets Ability to Cancel
Button Cancelled
Text Input Direct Manipulation Animation and Spatial Awareness Loading State
UI Library
None
None
None
None
None
None
Animation not a luxury
Animation a tool
iOS Android
None
Text Input Direct Manipulation Animation and Spatial Awareness Loading State
UI Library
Most of web is about pages of content
None
None
class TaskDetails extends React.Component { props: { id: string
}; state = { data: null }; componentDidMount() { fetch(`/tasks?id=${this.props.id}`) .then(response => response.json()) .then(data => this.setState({data})); } render() { if (!this.state.data) { return <ActivityIndicator /> } else { return ( ... ); } } }
Loading...
None
None
None
class TaskDetails extends React.Component { props: { id: string,
data: ?Object }; state = { data: null }; componentDidMount() { fetch(`/tasks?id=${this.props.id}`) .then(response => response.json()) .then(data => this.setState({data})); } render() { const data = this.state.data || this.props.data; return ( ... ); } }
class TaskListItem extends React.Component { render() { return
( ... <TouchableHighlight onPressIn={this._startPrefetching}> ... </TouchableHighlight> ... ); } } 500ms
DX → UX
MobX Relay
It Does Not Matter!
Go beyond what frameworks provide
Text Input Direct Manipulation Animation and Spatial Awareness Loading State
UI Library
"Building with React Native is so easy, we don't need
standard components" – Developer
Button
function Button(props) { return ( <TouchableOpacity onPress={props.onPress}>
<Text style={styles.blue}> {props.caption} </Text> </TouchableOpacity> ); }
10% time 100% done
Cross platform Disabled state Icon Fixed height Text wrapping Accessibility
Consistency
Build your own standard controls
Button ✨ ✨
Text Input Direct Manipulation Animation and Spatial Awareness Loading State
UI Library
Experience it on a real device Animation and gestures are
essential tools Go beyond what frameworks provide
Not rocket science
Resources?
None
But you can learn to see it
You have to care
Designers have to care
"Stop Drawing Dead Fish" Bret Victor
Little details are big
Quality is our responsibility
Quality defines perception of your business
Quality defines perception of React Native ecosystem
Build "pit of success" Talk more about User Experience Great
examples
Thanks! http://frantic.im @alex_frantic ☕