前面写了两篇文章《React组件机能优化》《Redux机能优化》,离别针对React和Redux在运用上的机能优化给了一些发起。然则React和Redux一同运用还须要一个东西React-Redux,这一篇就说一下React-Redux在运用上的一些机能优化发起。
React-Redux是官方的React和Redux链接东西
Provider
一个很简单的React组件,它重要的作用是把store放到context中,connect就可以猎取store,运用store的要领,比方dispatch。实在没有被connect的组件经由过程声明contextTypes属性也是可以猎取store,运用store的要领的,然则这个时刻,假如运用dispatch修正了store的state,React-Redux并不能把修正后的state作为props给React组件,可能会致使UI和数据不同步,所以这个时刻肯定要清晰本身在做什么。
connect
一个柯里化函数,函数将被挪用两次。第一次是设置参数,第二次是组件与 Redux store 衔接。connect 函数不会修正传入的 React 组件,返回的是一个新的已与 Redux store 衔接的组件,而且你应当运用这个新组件。connect的运用体式格局是connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])(Component)
,第一次挪用的时刻4个参数都是可选。
mapStateToProps在store发作转变的时刻才会挪用,然后把返回的效果作为组件的props。
mapDispatchToProps重要作用是弱化Redux在React组件中存在感,让在组件内部转变store的操纵觉得就像是挪用一个经由过程props通报进来的函数一样。平常会合营Redux的bindActionCreators运用。假如不指定这个函数,dispatch会注入到你的组件props中。
mergeProps用来指定mapStateToProps、mapDispatchToProps、ownProps(组件本身属性)的兼并划定规矩,兼并的效果作为组件的props。假如要指定这个函数,发起不要太庞杂。
options内里重要关注pure,假如你的组件仅依靠props和Redux的state,pure肯定要为true,如许可以防止不必要的更新。
Component就是要被衔接的React组件,组件可所以恣意的,不肯定是AppRoot。平常会是须要更新store、或者是依靠store中state的最小组件。由于被衔接的组件在Redux的state转变后会更新,大局限的更新对机能不友好,而且个中有些组件多是没必要更新也会更新,所以要只管拆分、细化,connect仅仅要更新store或依靠store的state的最小组件。
Reselect
mapStateToProps也被叫做selector,在store发作变化的时刻就会被挪用,而不论是否是selector体贴的数据发作转变它都会被挪用,所以假如selector盘算量非常大,每次更新都从新盘算可能会带来机能题目。Reselect能帮你省去这些没必要的从新盘算。
Reselect 供应 createSelector 函数来建立可影象的 selector。createSelector 吸收一个 input-selectors 数组和一个转换函数作为参数。假如 state tree 的转变会引起 input-selector 值变化,那末 selector 会挪用转换函数,传入 input-selectors 作为参数,并返回效果。假如 input-selectors 的值和前一次的一样,它将会直接返回前一次盘算的数据,而不会再挪用一次转换函数。如许就可以防止不必要的盘算,为机能带来提拔。
总结
郑重运用context中的store
被connect组件更新的时刻影响局限只管小,防止不必要更新
运用Resselect防止不必要的selector盘算