Skip to content

createStore使用规范? #11

Closed Answered by junerver
danatechgithub4 asked this question in Q&A
Discussion options

You must be logged in to vote

有些项目已经使用单Activity作为compose开发基础,但是当又有原生又有compose的时候就不方便了,请问多个Activity,需要为每个Activity创建配置多个createStore和ReduxProvider吗?

假如我已经这样做了,会有什么问题吗?如内存泄漏,Activity已被经销毁了,但是Store还残留在内存中。

  1. 是的,你需要在多个 Act 中配置多个 Store 与 ReduxProvider,他们只在自己的作用域(或者说组件树)下生效,你无法在多个 Act 下共享同一个 Store 中的状态;
  2. 这样做不会带来内存泄漏问题,Store 实例最终是通过 ProvidableCompositionLocal 持有从而实现向下暴露的,当 ReduxProvider 从组件树移除后,其中的内存释放。

补充:通过 createStore 创建的 store 实例对象是可以被复用的, store 实例只是一个持有 reducer 函数与初始状态的简单的 data class。如果你像示例代码一样申明成top-level object,那么它具有全局生命周期,是可以被你在任意的 Provider下复用的,甚至你可以使用 + (plus重载运算符) 随意的组合他们 。

当然你也可以在 Act 的 onCreate 中创建,这样它在 act 销毁后就被释放。

当然这一切的前提都是,reducer 函数是纯函数,它和初始状态,都没有隐藏的副作用,那么你可以放心的使用他们,他们不会带来内存泄漏问题。

Replies: 2 comments

Comment options

You must be logged in to vote
0 replies
Answer selected by junerver
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants