66
Time traveling with ReSwift @EliSawic

Time traveling with ReSwift

Embed Size (px)

Citation preview

Page 1: Time traveling with ReSwift

Time traveling with ReSwift

@EliSawic

Page 2: Time traveling with ReSwift

About me

Eliasz SawickiBlog: www.eliaszsawicki.comTwitter: @EliSawic

@EliSawic

Page 3: Time traveling with ReSwift

ReSwift

@EliSawic

Page 4: Time traveling with ReSwift

ReSwift is a Redux-like implementation of the unidirectional data flow

architecture in Swift.@EliSawic

Page 5: Time traveling with ReSwift

Plan• How did it all start?

@EliSawic

Page 6: Time traveling with ReSwift

Plan• How did it all start?

• How does it work?

@EliSawic

Page 7: Time traveling with ReSwift

Plan• How did it all start?

• How does it work?

• What are my thoughts?

@EliSawic

Page 8: Time traveling with ReSwift

How did it all start?

@EliSawic

Page 9: Time traveling with ReSwift

What do we use?

@EliSawic

Page 10: Time traveling with ReSwift

React

@EliSawic

Page 11: Time traveling with ReSwift

Flux

@EliSawic

Page 12: Time traveling with ReSwift

Redux

@EliSawic

Page 13: Time traveling with ReSwift

Unidirectional Data Flow

@EliSawic

Page 14: Time traveling with ReSwift

Unidirectional Data Flow• one direction of state change

• immutable state

• modified by pure functions

@EliSawic

Page 15: Time traveling with ReSwift

DevTools

@EliSawic

Page 16: Time traveling with ReSwift

Recording

@EliSawic

Page 17: Time traveling with ReSwift

Time travel

@EliSawic

Page 18: Time traveling with ReSwift

Fun to work with

@EliSawic

Page 19: Time traveling with ReSwift

Dan Abramov

@EliSawic

Page 20: Time traveling with ReSwift

ReSwift

@EliSawic

Page 21: Time traveling with ReSwift

How does it work?

@EliSawic

Page 22: Time traveling with ReSwift

Core Elements• State

• Actions

• Reducers

• Store

@EliSawic

Page 23: Time traveling with ReSwift

State

@EliSawic

Page 24: Time traveling with ReSwift

State

@EliSawic

Page 25: Time traveling with ReSwift

Statestruct AppState: StateType, HasNavigationState { var user: User var navigationState: NavigationState}

@EliSawic

Page 26: Time traveling with ReSwift

Actions

@EliSawic

Page 27: Time traveling with ReSwift

Actionsstruct UpdateUserName: Action { let name: String

init(_ name: String) { self.name = name }}

@EliSawic

Page 28: Time traveling with ReSwift

Action Creator

@EliSawic

Page 29: Time traveling with ReSwift

Reducer

@EliSawic

Page 30: Time traveling with ReSwift

Reducer(Action, State?) -> State

@EliSawic

Page 31: Time traveling with ReSwift

Update statefunc handleAction(action: Action, state: AppState?) -> AppState { return AppState( user: userReducer(action, user: state?.user), navState: navReducer(action, navState: state?.navState) )}

@EliSawic

Page 32: Time traveling with ReSwift

Reducerfunc userReducer(action: Action, user: User?) -> User {

var resultUser = user ?? User()

switch action { case let action as UpdateUserName: resultUser.name = action.name case let action as UpdateUserSurname: resultUser.surname = action.surname case let action as UpdateUserPresentationTitle: resultUser.presentationTitle = action.title default: break }

return resultUser}

@EliSawic

Page 33: Time traveling with ReSwift

Store

@EliSawic

Page 34: Time traveling with ReSwift

Receives our letters

@EliSawic

Page 35: Time traveling with ReSwift

Manage changes

@EliSawic

Page 36: Time traveling with ReSwift

Notify about changes

@EliSawic

Page 37: Time traveling with ReSwift

Storeprotocol Store { init(reducer: Reducer, state: State) func subscribe(subscriber: Subscriber) func dispatch(action: Action)}

@EliSawic

Page 38: Time traveling with ReSwift

@EliSawic

Page 39: Time traveling with ReSwift

Event

@EliSawic

Page 40: Time traveling with ReSwift

Send letter

@EliSawic

Page 41: Time traveling with ReSwift

Receive letters

@EliSawic

Page 42: Time traveling with ReSwift

Manage changes

@EliSawic

Page 43: Time traveling with ReSwift

Notify about changes

@EliSawic

Page 44: Time traveling with ReSwift

React to state changes

@EliSawic

Page 45: Time traveling with ReSwift

What are my thoughts?

@EliSawic

Page 46: Time traveling with ReSwift

DevTools

@EliSawic

Page 47: Time traveling with ReSwift

Remember

@EliSawic

Page 48: Time traveling with ReSwift

Keep reducers fast

@EliSawic

Page 49: Time traveling with ReSwift

No side effects in Reducers

@EliSawic

Page 50: Time traveling with ReSwift

Avoid heavy application state

@EliSawic

Page 51: Time traveling with ReSwift

One way of changing state

@EliSawic

Page 52: Time traveling with ReSwift

Why?

@EliSawic

Page 53: Time traveling with ReSwift

Easy to understand what is going on

@EliSawic

Page 54: Time traveling with ReSwift

Easy testing

@EliSawic

Page 55: Time traveling with ReSwift

DevTools - Time traveling, Hot

reloading

@EliSawic

Page 56: Time traveling with ReSwift

Fixing bugs with friends

@EliSawic

Page 57: Time traveling with ReSwift

Why not?

@EliSawic

Page 58: Time traveling with ReSwift

Overwhelming

@EliSawic

Page 59: Time traveling with ReSwift

Boilerplate

@EliSawic

Page 60: Time traveling with ReSwift

Many ReSwift components are in

POC state

@EliSawic

Page 61: Time traveling with ReSwift

Easy to get stuck

@EliSawic

Page 62: Time traveling with ReSwift

Against the framework

@EliSawic

Page 63: Time traveling with ReSwift

Check them out!• Karl Bowden - @karlbowden

• Benjamin Encz - @benjaminencz

• Aleksander Rendtslev - @ARendtslev

• Dan Abramov - @danAbramov

@EliSawic

Page 64: Time traveling with ReSwift

Check these out!• https://karlbowden.com/reswift-prezzo/

• https://realm.io/news/benji-encz-unidirectional-data-flow-swift/

• https://github.com/reactjs/redux

• https://github.com/ReSwift/ReSwift

@EliSawic

Page 65: Time traveling with ReSwift

Conclusion

@EliSawic

Page 66: Time traveling with ReSwift

Thank you for your attention

@EliSawic