用户登录

用 autorun 或者 reaction 都可以添加反应,这里我们在创建这个类的实例的时候,执行了 initReactions 方法,它里面用 autorun 还有 reaction 添加了我们需要的反应。

这两个方法返回的东西是一个 ReactionDisposer ,执行它的时候可以取消这个反应。也就是我们添加了一些反应,如果不需要做这些反应的时候,需要执行它返回的这个 disposer 取消这个反应。

在 Store 里可以定义一个方法统一添加需要的反应,这里我们定义的这个方法就是 initReactions。这里我们可以添加一个新的属性,类型是 List ,名字是 reactionDisposers ,默认值是一个空白的列表。

添加反应的时候,可以把返回的 ReactionDisposer 添加到这个 reactionDisposers 列表里。 在这个 initReactions 里面,用一下 reactionDisposers ,add 这个方法,往这个列表里添加一个新的东西, 这里就是执行这个 autorun 返回的 ReactionDisposer。

下面同样执行一下 reactionDisposers.add ,添加的东西就是执行这个 reaction 方法返回的 ReactionDisposer 。

我们可以再定义一个方法,统一取消添加的这些反应,方法的名字可以是 disposeReactions ,在这个方法里用一下 reactionDisposers.forEach,当前项目叫 disposer,然后执行一下这个 disposer() 取消添加的这个反应。

这样在应用里如果我们需要取消在这个 Store 里添加的反应,就可以执行一下它里面这个 disposerReactions 取消添加的反应。

测试

打开 post_index_latest ,复制一份这个按钮小部件,按钮文件设置成取消,点按它的时候执行 appStore 里的 disposeReactions ,它可以取消添加的所有的反应。

再复制一份这个按钮,按钮文字是 注册,点按它的时候执行 appStore 里的 initReactions 这个方法,在这个方法里会注册一些反应。

打开编辑器的调试,重新启动一下。

点按测试的时候会在控制台上输出一些东西,这是我们注册的反应要做的事情。按一下取消,它会取消注册的反应,再按一下测试,因为取消了反应,所以这次在控制台上就不会再输出东西了。

再按一下 注册 这个按钮,它会重新注册一些反应,然后再点按测试按钮,这次又会在控制台上输出文字了。

使用 MobX 管理应用状态:取消反应(Reaction)《 Flutter 移动端实例:状态管理 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点