Time traveling with ReSwift
-
Upload
eliasz-sawicki -
Category
Mobile
-
view
144 -
download
4
Transcript of Time traveling with ReSwift
![Page 1: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/1.jpg)
Time traveling with ReSwift
@EliSawic
![Page 2: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/2.jpg)
About me
Eliasz SawickiBlog: www.eliaszsawicki.comTwitter: @EliSawic
@EliSawic
![Page 3: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/3.jpg)
ReSwift
@EliSawic
![Page 4: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/4.jpg)
ReSwift is a Redux-like implementation of the unidirectional data flow
architecture in Swift.@EliSawic
![Page 5: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/5.jpg)
Plan• How did it all start?
@EliSawic
![Page 6: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/6.jpg)
Plan• How did it all start?
• How does it work?
@EliSawic
![Page 7: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/7.jpg)
Plan• How did it all start?
• How does it work?
• What are my thoughts?
@EliSawic
![Page 8: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/8.jpg)
How did it all start?
@EliSawic
![Page 9: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/9.jpg)
What do we use?
@EliSawic
![Page 10: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/10.jpg)
React
@EliSawic
![Page 11: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/11.jpg)
Flux
@EliSawic
![Page 12: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/12.jpg)
Redux
@EliSawic
![Page 13: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/13.jpg)
Unidirectional Data Flow
@EliSawic
![Page 14: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/14.jpg)
Unidirectional Data Flow• one direction of state change
• immutable state
• modified by pure functions
@EliSawic
![Page 15: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/15.jpg)
DevTools
@EliSawic
![Page 16: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/16.jpg)
Recording
@EliSawic
![Page 17: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/17.jpg)
Time travel
@EliSawic
![Page 18: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/18.jpg)
Fun to work with
@EliSawic
![Page 19: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/19.jpg)
Dan Abramov
@EliSawic
![Page 20: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/20.jpg)
ReSwift
@EliSawic
![Page 21: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/21.jpg)
How does it work?
@EliSawic
![Page 22: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/22.jpg)
Core Elements• State
• Actions
• Reducers
• Store
@EliSawic
![Page 23: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/23.jpg)
State
@EliSawic
![Page 24: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/24.jpg)
State
@EliSawic
![Page 25: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/25.jpg)
Statestruct AppState: StateType, HasNavigationState { var user: User var navigationState: NavigationState}
@EliSawic
![Page 26: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/26.jpg)
Actions
@EliSawic
![Page 27: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/27.jpg)
Actionsstruct UpdateUserName: Action { let name: String
init(_ name: String) { self.name = name }}
@EliSawic
![Page 28: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/28.jpg)
Action Creator
@EliSawic
![Page 29: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/29.jpg)
Reducer
@EliSawic
![Page 30: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/30.jpg)
Reducer(Action, State?) -> State
@EliSawic
![Page 31: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/31.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/32.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/33.jpg)
Store
@EliSawic
![Page 34: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/34.jpg)
Receives our letters
@EliSawic
![Page 35: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/35.jpg)
Manage changes
@EliSawic
![Page 36: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/36.jpg)
Notify about changes
@EliSawic
![Page 37: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/37.jpg)
Storeprotocol Store { init(reducer: Reducer, state: State) func subscribe(subscriber: Subscriber) func dispatch(action: Action)}
@EliSawic
![Page 38: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/38.jpg)
@EliSawic
![Page 39: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/39.jpg)
Event
@EliSawic
![Page 40: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/40.jpg)
Send letter
@EliSawic
![Page 41: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/41.jpg)
Receive letters
@EliSawic
![Page 42: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/42.jpg)
Manage changes
@EliSawic
![Page 43: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/43.jpg)
Notify about changes
@EliSawic
![Page 44: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/44.jpg)
React to state changes
@EliSawic
![Page 45: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/45.jpg)
What are my thoughts?
@EliSawic
![Page 46: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/46.jpg)
DevTools
@EliSawic
![Page 47: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/47.jpg)
Remember
@EliSawic
![Page 48: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/48.jpg)
Keep reducers fast
@EliSawic
![Page 49: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/49.jpg)
No side effects in Reducers
@EliSawic
![Page 50: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/50.jpg)
Avoid heavy application state
@EliSawic
![Page 51: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/51.jpg)
One way of changing state
@EliSawic
![Page 52: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/52.jpg)
Why?
@EliSawic
![Page 53: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/53.jpg)
Easy to understand what is going on
@EliSawic
![Page 54: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/54.jpg)
Easy testing
@EliSawic
![Page 55: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/55.jpg)
DevTools - Time traveling, Hot
reloading
@EliSawic
![Page 56: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/56.jpg)
Fixing bugs with friends
@EliSawic
![Page 57: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/57.jpg)
Why not?
@EliSawic
![Page 58: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/58.jpg)
Overwhelming
@EliSawic
![Page 59: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/59.jpg)
Boilerplate
@EliSawic
![Page 60: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/60.jpg)
Many ReSwift components are in
POC state
@EliSawic
![Page 61: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/61.jpg)
Easy to get stuck
@EliSawic
![Page 62: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/62.jpg)
Against the framework
@EliSawic
![Page 63: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/63.jpg)
Check them out!• Karl Bowden - @karlbowden
• Benjamin Encz - @benjaminencz
• Aleksander Rendtslev - @ARendtslev
• Dan Abramov - @danAbramov
@EliSawic
![Page 64: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/64.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/65.jpg)
Conclusion
@EliSawic
![Page 66: Time traveling with ReSwift](https://reader033.fdocuments.in/reader033/viewer/2022042723/58729ecc1a28ab07208b5471/html5/thumbnails/66.jpg)
Thank you for your attention
@EliSawic