“在使用全局state状态时,我们其实可以用到connect下的mapStateToProps方法,也可以使用hooks钩子useSelector;在公司开发项目时,使用的是hooks钩子函数useSelector,然后出现了性能上的问题,导致页面出现了多次渲染,带着这个疑问去看useSelector源码发现了其中的蹊跷。”
01
—
这两种写法是否是等价的
首先先来思考一下connect下的mapStateToProps方法以及useSelector方法,这两种写法是否是等价的,代码如下所示:
conststate={return{App:state.App}//这里假设App是一个对象,它的值假设为{a:1,b:2}}//写法一,使用mapStateToProps方法functionTest({App}){}connect(state)(Test)//写法二,使用useSelector方法functionTest(){const{App}=useSelector(state)}
首先给出答案:这两种写法并不等价。我们使用方法二useSelector会导致redux的整个store的任何值变化,都会触发Test的渲染。这时候你是不是会发出很大的疑问,为什么会出现这种情况呢?让我们带着疑问继续往下探索。
02
—
connect解析
其实connect它默认使用的是shallowEqual浅比较,在我最前面的文章中是仔细的介绍了这个方法的,在这篇文章中我就不讲了,感兴趣的小伙伴可以看看我这篇文章。PureComponent和Component的区别---涉及源码
daipi,