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
Single State Atom apps
Search
Rogério Chaves
December 02, 2015
Technology
190
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
200
A Brief History of Frontend
rogeriochaves
1
68
Implementando PWA em qualquer projeto
rogeriochaves
2
220
Microfrontends
rogeriochaves
2
150
Introducción a Elm
rogeriochaves
0
80
Immutable App Architecture
rogeriochaves
0
230
Faça programação funcional com JavaScript codando menos
rogeriochaves
4
510
Introduction to Elm
rogeriochaves
2
160
Playing with RxJS
rogeriochaves
0
120
Other Decks in Technology
See All in Technology
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
620
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
950
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.5k
そのドキュメント、自動化しませんか?
yuksew
1
360
副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects
koukihosaka
1
130
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
500
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
360
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
170
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
300
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
3
890
GoでCコンパイラを作った話
repunit
0
140
実践!既存 Project への AI-Driven Development 適用〜 一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
0
360
Featured
See All Featured
The SEO identity crisis: Don't let AI make you average
varn
0
520
Scaling GitHub
holman
464
140k
Site-Speed That Sticks
csswizardry
13
1.3k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
280
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Building Applications with DynamoDB
mza
96
7.1k
The browser strikes back
jonoalderson
0
1.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
How to make the Groovebox
asonas
2
2.3k
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