View
146
Download
4
Category
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