Redux SwiftUI рдореЗрдВ рд░рд╛рдЬреНрдп рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рддрд░рд╣ рд╣реИрдВред рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ

рдЫрд╡рд┐

рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рд╣рдордиреЗ Redux рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА - рдЬреИрд╕реЗ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЗ рдХрдВрдЯреЗрдирд░ ред Redux рд╕рддреНрдп рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рдПрдХрд▓ рд╕реНрд░реЛрдд рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╣рдлреНрддреЗ рд╣рдо Redux- рдЖрдзрд╛рд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рджреНрдз рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рд╕рд░рд▓ рдФрд░ рддреНрд░реБрдЯрд┐ рдореБрдХреНрдд рд░рдЦреЗрдВрдЧреЗред

рд╕рд╛рдорд╛рдиреНрдп рд╣рд╛рд▓рдд


Redux рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ, рдПрдХ рд╕реНрдЯреЛрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рд╣рд┐рдд рд╣реИ рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рддреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЗ рдПрдХрд▓ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд░рд╛рдЬреНрдп рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

struct AppState { var allTasks: [Task] var favorited: [Task] } 

рдПрдХ AppState рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рд╕рд░рд▓ рдФрд░ рдЪрдпрдирд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИред рдпрд╣ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рджреЛрд╖ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдХрд╛рд░реНрдп рд╕рдВрдкрд╛рджрди рд╕реНрдХреНрд░реАрди рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЪрдпрдирд┐рдд рдХрд╛рд░реНрдп рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╣реЗрдЬреЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╕рднреА рдЯрд╛рд╕реНрдХ (рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ) рдХреА рд╕реВрдЪреА рдореЗрдВ, рдФрд░ рдкрд╕рдВрджреАрджрд╛ (рдЪрдпрдирд┐рдд) рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдлрд┐рд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ, рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдЪрд▓реЛ рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдХрд╛рд░реНрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреБрдВрдЬреА рд╣реИ, рдФрд░ рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдореВрд▓реНрдп рд╣реИред рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдордп (рдУ (1)) рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдпрд╣ рдЖрджреЗрд╢ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдСрд░реНрдбрд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рдЖрдЗрдП рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмрджрд▓реЗ рд╣реБрдП рд░рд╛рдЬреНрдп рдХреЛ рджреЗрдЦреЗрдВред

 struct AppState { var tasks: [Int: Task] var allTasks: [Int] var favorited: [Int] } 

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХрд╛рд░реНрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЖрдИрдбреА рдХреБрдВрдЬреА рд╣реИ, рдФрд░ рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдореВрд▓реНрдп рд╣реИред рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЪрдпрдирд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рд╛рд░рдгрд┐рдпрд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рд╣рдо рд╕реНрдерд┐рд░рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред

рд╕рдордЧреНрд░ рд░рд╛рдЬреНрдп


рдХрд┐рд╕реА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдЖрдк рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╡реИрд╕реЗ рд╣реА рд╡рд┐рд╕реНрдлреЛрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкреЛрдЬрд┐рдЯрд▓ рд╕реНрдЯреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

 struct AppState { var calendar: CalendarState var trends: TrendsState var settings: SettingState } 

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ AppState рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд░рдЪрдирд╛рдХрд╛рд░ Reducer


Redux рдЬреИрд╕реЗ рд░рд╛рдЬреНрдп рдХрдВрдЯреЗрдирд░ рдХрд╛ рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ Reducer рд╕реНрд╡рдпрдВ рд╣реИред рдЗрд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдФрд░ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдерд╛ред рдпрд╣ рд╣рдореЗрдВ рд╕рд┐рдВрдЧрд▓ рд░рд┐рд╕реНрдкреЙрдиреНрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рд░реАрдбреНрдпреВрд╕рд░ рдЬреИрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

 enum AppAction { case calendar(action: CalendarAction) case trends(action: TrendsAction) } let trendsReducer: Reducer<TrendsState, TrendsAction> = Reducer { state, action in // Implement your state changes here } let calendarReducer: Reducer<CalendarState, CalendarAction> = Reducer { state, action in // Implement your state changes here } let appReducer: Reducer<AppState, AppAction> = Reducer { state, action in switch action { case let .calendar(action): calendarReducer.reduce(&state.calendar, action) case let .trends(action): trendsReducer.reduce(&state.trends, action) } } 

рдирд┐рд╖реНрдХрд░реНрд╖


рдЖрдЬ рд╣рдордиреЗ рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдореЗрдВ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдореЗрдВ Redux рдЬреИрд╕реЗ рд░рд╛рдЬреНрдп рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдФрд░ рдПрдХреАрдХрд░рдг рджреЛрдиреЛрдВ рд╣реА рдирд┐рд░реНрдорд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд▓реЗрдЦ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рд╣реЛрдЧрд╛ред

рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХреЛ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП!

Source: https://habr.com/ru/post/hi476924/


All Articles