Time traveling with ReSwift

  • View
    146

  • Download
    4

  • Category

    Mobile

Preview:

Citation preview

Time traveling with ReSwift

@EliSawic

About me

Eliasz SawickiBlog: www.eliaszsawicki.comTwitter: @EliSawic

@EliSawic

ReSwift

@EliSawic

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

architecture in Swift.@EliSawic

Plan• How did it all start?

@EliSawic

Plan• How did it all start?

• How does it work?

@EliSawic

Plan• How did it all start?

• How does it work?

• What are my thoughts?

@EliSawic

How did it all start?

@EliSawic

What do we use?

@EliSawic

React

@EliSawic

Flux

@EliSawic

Redux

@EliSawic

Unidirectional Data Flow

@EliSawic

Unidirectional Data Flow• one direction of state change

• immutable state

• modified by pure functions

@EliSawic

DevTools

@EliSawic

Recording

@EliSawic

Time travel

@EliSawic

Fun to work with

@EliSawic

Dan Abramov

@EliSawic

ReSwift

@EliSawic

How does it work?

@EliSawic

Core Elements• State

• Actions

• Reducers

• Store

@EliSawic

State

@EliSawic

State

@EliSawic

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

@EliSawic

Actions

@EliSawic

Actionsstruct UpdateUserName: Action { let name: String

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

@EliSawic

Action Creator

@EliSawic

Reducer

@EliSawic

Reducer(Action, State?) -> State

@EliSawic

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

@EliSawic

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

Store

@EliSawic

Receives our letters

@EliSawic

Manage changes

@EliSawic

Notify about changes

@EliSawic

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

@EliSawic

@EliSawic

Event

@EliSawic

Send letter

@EliSawic

Receive letters

@EliSawic

Manage changes

@EliSawic

Notify about changes

@EliSawic

React to state changes

@EliSawic

What are my thoughts?

@EliSawic

DevTools

@EliSawic

Remember

@EliSawic

Keep reducers fast

@EliSawic

No side effects in Reducers

@EliSawic

Avoid heavy application state

@EliSawic

One way of changing state

@EliSawic

Why?

@EliSawic

Easy to understand what is going on

@EliSawic

Easy testing

@EliSawic

DevTools - Time traveling, Hot

reloading

@EliSawic

Fixing bugs with friends

@EliSawic

Why not?

@EliSawic

Overwhelming

@EliSawic

Boilerplate

@EliSawic

Many ReSwift components are in

POC state

@EliSawic

Easy to get stuck

@EliSawic

Against the framework

@EliSawic

Check them out!• Karl Bowden - @karlbowden

• Benjamin Encz - @benjaminencz

• Aleksander Rendtslev - @ARendtslev

• Dan Abramov - @danAbramov

@EliSawic

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

Conclusion

@EliSawic

Thank you for your attention

@EliSawic

Recommended