gpt4 book ai didi

Swift - ReSwift 订阅多个子状态

转载 作者:行者123 更新时间:2023-11-28 05:57:57 25 4
gpt4 key购买 nike

我在我的项目中使用 ReSwift 来获得一个漂亮干净的 redux 架构。

因为我对整个状态不感兴趣,所以我只为我的 View Controller 订阅了两个子状态:

extension ViewController: StoreSubscriber {

override func viewWillAppear(_ animated: Bool) {
store.subscribe(self) {
$0.select {
($0.subStateA, $0.subStateB)
}
}
}

override func viewWillDisappear(_ animated: Bool) {
store.unsubscribe(self)
}

func newState(state: (subStateA: SubStateA, subStateB: SubStateB)) {
print("test")
}

}

发生了什么:

每当商店发生任何更新时,我的 newState 方法都会被调用。

例如,如果我更新 subStateC 它仍然会触发

func newState(state: (subStateA: SubStateA, subStateB: SubStateB)) {}

谁能解释为什么会这样?

谢谢和问候!

最佳答案

您可以在 select 调用后使用 skipRepeats。

这个问题是当你只需要在子状态改变时更新状态,使用 skipRepeats 你可以检查如果这是真的你将跳过更新,看看这段代码来尝试理解。

示例代码

这是一个关于带有导航状态的状态的简单代码,我们希望在导航状态改变时更新状态。

    store.subscribe(self) { (subscriber:Subscription<State>) -> Subscription<RoutingState> in
subscriber.select({ (state:State) -> RoutingState in
return state.routing;
}).skipRepeats({ (oldRoutingState, newRoutingState) -> Bool in
return oldRoutingState.navigationState == newRoutingState.navigationState
})
}

如果您的过滤器没有任何变化,此代码将阻止调用 newState

希望对你有帮助

关于Swift - ReSwift 订阅多个子状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50859750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com