问题:Redux 符合 SwiftUI 2.0 的 Bindable

我已经在我的 SwiftUI 项目中成功地实现了 Redux,但是在正确处理绑定方面遇到了困难。我想使用 SwiftUI 的绑定功能,同时将信息存储在 Redux 状态中。

正如您所看到的,这种情况自相矛盾,因为状态不能被双向约束。这是我当前的代码

@State var tab: Tab = .tab1
TabView(selection: $tab) { ... }

理想情况下,如果可能的话,它应该像这样舒适地使用。我也对其他想法持开放态度,这正是我最初想出的——它远非完美。

@State var store = ReduxStore(...)
TabView(selection: $store.state.tab) { ... }

解答

我想出了如何处理这种情况。对我来说,解决方案是一个像这样的绑定:

let tabBinding = Binding<Tab> (
    get: { self.store.state.currentTab }, // return the value from the state
    set: { self.store.dispatch(action: NavigationAction.updateTab(tab: $0)) } // send the action here
)

尽管这可能可以被美化,但它可以工作,非常简单,并且解决了在 Redux 中使用 Bindings 的问题。

Logo

React社区为您提供最前沿的新闻资讯和知识内容

更多推荐