如果使用redux
1.把reducer/状态按照模块进行划分和管理;把所有模块的reducer合并为一个即可! !
2.每一次任务派发,都会把所有模块的reducer,依次去执行,派发时候传递的行为对象(行为标识)是统一的!! 所以我们要保证各个模块之间,派发的行为标识的唯一性!!>派发行为标识的统一管理! !
3.需要派发的组件
- store.dispatch(actionCreator)
如果使用react-redux(react-redux就是帮助我们简化redux在组件中的应用)
1.提供的Provider组件,可以自己在内部创建上下文对象,把store放在根组件的上下文中!
2.提供的connect函数,在函数内部,可以获取到上下文中的store,然后快速的把公共状态以及需要派发的操作,基于属性传递给组件!!connect(mapStateloProps,mapDispatchToProps)(渲染的组件)
3.派发
此阶段讲课中,我们涉及的原理和源码redux
- createStore
- combineReducers bindActionCreators +..
- redux在设计上,是存在一些不好的地方的
①我们基于getState获取的公共状态,是直接和redux中的公共状态,共用相同的堆地址,这样导致,是可以直接修改公共状态信息的!!
②我们会把让组件更新的办法,放在事件池中,当公共状态改变.,会通知事件池中的所有方法执行!!此操作:放置方法的时候,没有办法设置状态的依赖,这样,后期不论哪个状态被修改,事件池中所有的方法都要执行(相关的组件都要进行更新)
如果要优化,我们在向事件池中加入方法的时候,把依赖的信息也设置了!!在每一次执行reducer修改状态之前,把之前的状态存储一份 prev] ,修改后的最新状态也获取到 TnextJ ! !
通知事件池中方法执行的时候,拿出来的某个方法是否会执行,就可以prev和next中,此方法依赖的状态是否改变!!
真实项目中,如果都这样去优化这个操作,每一次事件池中方法执行,也会有一套计算的逻辑(多多少少消耗一点点性能) ;
而往往,我们配合react-router操作的时候,虽然按照原有的操作逻辑,不论啥状态改变,事件池中的方法都会触发执行,但是react-router会让很多组件释放掉,只展示当前模块的组件TSPAJ ,这样即便组件更新的方法执行,但是因为组件都释放了,所以也不会产生太大的影响!! 而且我们还可以在组件释放的时候,把对应更新的方法,从事件池中移除掉! !
③所有reducer的合并,其实不是代码的合并,而是创建一个总的reducer出来,每一次派发,都是让总的reducer执行,而在这里,会把每个模块的reducer都完完整整执行一遍,即便中间已经发现匹配的逻辑了,也会继续把其它模块中的reducer执行!!
优化思路: 在某个模块的reducer中,如果派发的行为标识有匹配了【因为行为标识是统一管理的,所以遇到匹配的,说明后面不可能再匹配了】,则停止执行后面的reducer! !
标签:状态,执行,派发,31,reducer,react,组件,redux From: https://blog.51cto.com/u_12207234/6524048