Top Banner
SINGLE STATE ATOM APPS
22

Single State Atom apps

Jan 26, 2017

Download

Software

Rogerio Chaves
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Single State Atom apps

SINGLE STATE ATOM APPS

Page 2: Single State Atom apps

2

state =if

Page 3: Single State Atom apps

3

why don’t we put it right on the root?

Page 4: Single State Atom apps

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

Page 5: Single State Atom apps

5

BUT HOW DO WE UPDATE THE STATE?

Page 6: Single State Atom apps

REACT + CURSOR

6

or atom, or zipper

Page 7: Single State Atom apps

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)

Page 8: Single State Atom apps

CLOJURESCRIPT + OMSingle state atom

8

Page 9: Single State Atom apps

9

AWESOME DEMOhttps://youtu.be/5yHFTN-_mOo

Page 10: Single State Atom apps

10

TODOMVC EXAMPLE

Page 11: Single State Atom apps

REACT + REDUX

11

Reduce FTW

R

Page 12: Single State Atom apps

WHAT IS A REDUCER?

12

const list = [1, 2, 3]

list.reduce((accumulated, current) => { return accumulated + current}, 5)

// 11

Page 13: Single State Atom apps

REDUX STRUCTURE

13

main

<foo> <bar>

<qux>

stateactions

user input

reduce

onChange

Page 14: Single State Atom apps

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"}] };*/

Page 15: Single State Atom apps

15

TODOMVC EXAMPLE

Page 16: Single State Atom apps

16

REDUX DEVTOOLS

Page 17: Single State Atom apps

ELM

17

The right way is the only way

Page 18: Single State Atom apps

18

EXAMPLE

Page 19: Single State Atom apps

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

Page 20: Single State Atom apps

20

WHY IS THIS HAPPENING ON FRONT-END?

Page 21: Single State Atom apps

21

EXAMPLES SOURCE CODEgithub.com/rogeriochaves/single-state-atom-apps

Page 22: Single State Atom apps

THANK YOU