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
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
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
170
act1-costs.pdf
sumedhbala
0
210
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
220
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
840
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
350
フィードバックで育てるAI開発
kotaminato
1
110
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
150
Creating Composable Callables in Contemporary C++
rollbear
0
200
えっ!!コードを読まずに開発を!?
hananouchi
0
190
Vite+ Unified Toolchain for the Web
naokihaba
0
740
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.4k
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
370
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
410
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Abbi's Birthday
coloredviolet
3
8.6k
How STYLIGHT went responsive
nonsquared
100
6.2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
Navigating Weather and Climate Data
rabernat
0
310
The untapped power of vector embeddings
frankvandijk
2
1.8k
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 ☕