用 autorun 或者 reaction 都可以添加反应,这里我们在创建这个类的实例的时候,执行了 initReactions 方法,它里面用 autorun 还有 reaction 添加了我们需要的反应。
这两个方法返回的东西是一个 ReactionDisposer ,执行它的时候可以取消这个反应。也就是我们添加了一些反应,如果不需要做这些反应的时候,需要执行它返回的这个 disposer 取消这个反应。
在 Store 里可以定义一个方法统一添加需要的反应,这里我们定义的这个方法就是 initReactions。这里我们可以添加一个新的属性,类型是 List
添加反应的时候,可以把返回的 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 这个方法,在这个方法里会注册一些反应。
打开编辑器的调试,重新启动一下。
点按测试的时候会在控制台上输出一些东西,这是我们注册的反应要做的事情。按一下取消,它会取消注册的反应,再按一下测试,因为取消了反应,所以这次在控制台上就不会再输出东西了。
再按一下 注册 这个按钮,它会重新注册一些反应,然后再点按测试按钮,这次又会在控制台上输出文字了。