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
Single State Atom apps
Search
Rogério Chaves
December 02, 2015
Technology
200
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Single State Atom apps
If state is the root of all evil, why don't we put it right on the root?
I'll show 3 examples
Rogério Chaves
December 02, 2015
More Decks by Rogério Chaves
See All by Rogério Chaves
O problema das Fake News
rogeriochaves
1
210
A Brief History of Frontend
rogeriochaves
1
86
Implementando PWA em qualquer projeto
rogeriochaves
2
230
Microfrontends
rogeriochaves
2
150
Introducción a Elm
rogeriochaves
0
84
Immutable App Architecture
rogeriochaves
0
240
Faça programação funcional com JavaScript codando menos
rogeriochaves
4
530
Introduction to Elm
rogeriochaves
2
170
Playing with RxJS
rogeriochaves
0
120
Other Decks in Technology
See All in Technology
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
630
go-sqletch
moznion
0
120
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
530
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
140
プロダクト価値を、 チームが使える判断軸に変える
vivion
0
140
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
6
2.3k
Codex概要
ymiya55
0
490
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.2k
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
430
継続的なAIコスト最適化
bgpat
1
270
1万名の社員が使う認証基盤で どう信頼性を担保するか?
kairim0
0
220
分析AIエージェントを育てる、動く環境を育てる
codatum
1
690
Featured
See All Featured
Being A Developer After 40
akosma
92
590k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
The Art of Programming - Codeland 2020
erikaheidi
57
14k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
400
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
450
The Cult of Friendly URLs
andyhume
79
7k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
WENDY [Excerpt]
tessaabrams
14
40k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Transcript
SINGLE STATE ATOM APPS
2 state = if
3 why don’t we put it right on the root?
THE IDEA 4 main <foo> <bar> <qux> state •State lives
on the root •Pass below only what matters •Components just render what it receives, no side-effects
5 BUT HOW DO WE UPDATE THE STATE?
REACT + CURSOR 6 or atom, or zipper
REACT + CURSOR 7 <List items={cursor.refine('items')} /> const List =
(props) => <ul> {props.items.map(ListItem)} </ul> const ListItem = (item) => <li> {item.refine('name').value} <NameInput name={item.refine('name')} /> </li> const NameInput = (props) => <input value={props.name.value} onChange={props.name.set} /> (not an actual implementation)
CLOJURESCRIPT + OM Single state atom 8
9 AWESOME DEMO https://youtu.be/5yHFTN-_mOo
10 TODOMVC EXAMPLE
REACT + REDUX 11 Reduce FTW R
WHAT IS A REDUCER? 12 const list = [1, 2,
3] list.reduce((accumulated, current) => { return accumulated + current }, 5) // 11
REDUX STRUCTURE 13 main <foo> <bar> <qux> state actions user
input reduce onChange
HOW REDUX WORKS 14 const state = { list: [{name:
"une"}, {name: "due"}] }; const actions = [{type: "ADD", name: "tre"}]; const reducer = (currentState, action) => { switch (action.type) { case "ADD": return { list: [...currentState.list, {name: action.name}) } default: return currentState; } } actions.reduce(reducer, state); /* { list: [{name: "une"}, {name: "due"}, {name: "tre"}] }; */
15 TODOMVC EXAMPLE
16 REDUX DEVTOOLS
ELM 17 The right way is the only way
18 EXAMPLE
ADVANTAGES 19 •Single source of truth •Deterministic state changes •Rationalise
about the rendered UI •State change timeline •Easier to debug •Hot reloading (example) •Fast rendering •Easier to implement optimistic updates •Easier to have an isomorphic app •Simple functions and data structures
20 WHY IS THIS HAPPENING ON FRONT-END?
21 EXAMPLES SOURCE CODE github.com/rogeriochaves/single-state-atom-apps
THANK YOU