这一段不难美化,主要是react-reudx的核心部分,其实包括了redux,也就是Provider、connect、and等几个常用API的实现绑定动作创作者。直接导入核心代码importReact,{useLayoutEffect,useReducer,useCallback,useContext}from'react';constuseForceUpdata=()=>{const[_,forceUpdata]=useReducer(x=>x+1,0,);constupDate=useCallback(()=>forceUpdata(),[])returnupDate};constCunsumer=({store},mapStateToProps,mapDispatchToProps,WarppedComponent,props)=>{//stateProps实际上是将所有状态作为参数,mapStateProps执行的结果constforceUpdata=useForceUpdata()conststateProps=mapStateToProps(store.getStore());//dispatchProps需要麻烦,因为会有两种情况//第一种mapDispatchProps是函数//第二种mapDispatchProps是对象letdispatchProps={dispatch:store.dispacth};//这里是判断数据类型最准确的方法:Object.prototype.toString.call(mapDispatchProps)if(typeofmapDispatchToProps==="function"){dispatchProps=mapDispatchToProps(store.dispach)}elseif(typeofmapDispatchToProps==="object"){dispatchProps=bindActionCreators(mapDispatchToProps,store.dispach)}//*这里的重点是你必须写一个订阅否则我们的代码不会报错但是不会刷新页面,//*redux只是一个状态存储库,没有自动刷新页面的功能,需要我们自己写订阅代码//*这里使用useLayoutEffect而不是useEffect,因为useLayoutEffect是在dom发生变化后才开始同步执行的,useEffect是有延迟的=>{unsubscribe()};},[store])return
