当前支持以下 effect:
需要 ReSwift (~> 6.1.0)。
从 Xcode 进行设置,或者编辑 Package.swift 的 dependencies。
dependencies: [
.Package(url: "https://github.com/mitsuharu/ReSwift-Saga.git", upToNextMajor: "x.y.z")
]
暂未支持
createSagaMiddleware 生成的 middleware。func makeAppStore() -> Store<AppState> {
// Saga 用の middleware を生成する
let sagaMiddleware: Middleware<AppState> = createSagaMiddleware()
let store = Store<AppState>(
reducer: appReducer,
state: AppState.initialState(),
middleware: [sagaMiddleware]
)
return store
}
import ReSwift
protocol UserAction: Action {}
struct RequestUser: UserAction {
let userID: String
}
struct StoreUserName: UserAction {
let name: String
}
let userSaga: Saga = { _ in
await takeEvery(RequestUser.self, saga: requestUserSaga)
}
let requestUserSaga: Saga = { action async in
guard let action = action as? RequestUser else {
return
}
try? await Task.sleep(nanoseconds: 1_000_000_000)
let name = "dummy-user-" + String( Int.random(in: 0..<100))
try? await put(StoreUserName(name: name))
}
import Foundation
import ReSwift
final class UserViewModel: ObservableObject, StoreSubscriber {
@Published private(set) var name: String = ""
init() {
appStore.subscribe(self) {
$0.select { selectUserName(store: $0) }
}
}
deinit {
appStore.unsubscribe(self)
}
internal func newState(state: String) {
self.name = state
}
public func requestUser() {
appStore.dispatch(RequestUser(userID: "1234"))
}
}