前言
对于非顶级的 Store
,我们测试的时候会发现一个有趣的现象,那就是 StoreConnector
构建的 Widget
在状态发生改变的时候,并不会重建整个子组件,而是只更新依赖于 converter
转换后对象的组件。这说明 StoreConnector
能够精准地定位到哪个子组件依赖状态变量,从而实现精准刷新,提高效率。这和 Provider
的 select
方法类似。
本篇我们就来分析一下 StoreConnector
的源码,看一下是如何实现精准刷新的。
验证
我们先看一个示例,来验证一下我们上面的说法,话不多说,先看测试代码。我们定义了两个按钮,一个点赞,一个收藏,每次点击调度对应的 Action 使得对应的数量加1。两个按钮的实现基本类似,只是依赖状态的数据不同。
class DynamicDetailWrapper extends StatelessWidget {
final store = Store<PartialRefreshState>(
partialRefreshReducer,
initialState: PartialRefreshState(favorCount: 0, praiseCount: 0),
);
DynamicDetailWrapper({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
print('build