ClassyFlux
简单但功能齐全的 Swift 实施 Flux 模式
简要说明
您可以在此处了解更多关于 Flux 模式的信息:这里
FluxAction
FluxAction 通常是一个简单的对象,携带描述特定用户操作或系统事件上下文的信息。通过 FluxDispatcher 实现分发的操作广播到所有在调度器中注册的工作者。FluxStore 可以在响应操作时修改其状态。FluxMiddleware 可以开始异步工作并通过广播另一个操作进行汇报。
示例声明
enum Action {
struct UpdateName: FluxAction {
let name: String
}
}
在主线程上使用默认调度器发送操作示例
Action.UpdateName(name: "Great Name").dispatch()
FluxDispatcher
FluxDispatcher 将操作分发给混合工作者,这些工作者可以是存储、中间件甚至是其他调度器。操作可以从一个工作者分发给另一个工作者,并可以被工作者修改和/或替换。注意工作者的顺序,它很重要,如果配置不正确,可能会导致行为异常。
使用示例
let dispatcher = FluxDispatcher()
dispatcher.register(workers: [SomeStore(), SomeMiddleware(dispatcher: dispatcher), AnalyticsLogger()])
SomeAction(value: Value()).dispatch(with: dispatcher)
FluxStore
FluxStore是一个管理底层状态、广播状态变更通知的容器。FluxStore是ObservableObject,可以直接在SwiftUI视图中使用来渲染状态。可以通过向派发器发送相关动作来修改状态。
示例声明
class SomeStore: FluxStore<SomeState> {
init() {
super.init(initialState: SomeState())
registerReducer(for: SomeAction.self) { (state, action) in
state.value = action.value
return [\SomeState.value] // Reports which part of the state did change
}
}
}
FluxMiddleware
FluxMiddleware用于运行异步任务并通过向派发器发送适当的动作来更新其他组件。
示例声明
class SomeMiddleware: FluxMiddleware {
private weak var dispatcher: FluxDispatcher?
init(dispatcher: FluxDispatcher) {
self.dispatcher = dispatcher
super.init()
registerHandler(for: SomeAction.self) { [unowned self] (action) in
self.performWork(value: action.value) // Start async work
// Handler passes the same action to subsequent workers by default
}
registerComposer(for: OtherAction.self) { (action) in
return .next(ThirdAction()) // Pass another action to subsequent workers
}
registerComposer(for: IgnoredAction.self) { (action) in
return .stop() // Do not pass the action to subsequent workers
}
}
private func performWork(value: Value) {
RemoteAPI.sendRequest(value: value) { [weak self] in
SomeOtherAction(outcome: $0).dispatch(with: self?.dispatcher)
}
}
}
作者
Natan Zalkin [email protected]
许可证
ClassyFlux遵循MIT许可证。更多信息请参阅LICENSE文件。