React-redux源码解析--Provider.js

总结:react-redux必须使用Provider在最外层包裹组建。因为通过connect方法加强的组建在生成过程中使用到store,且是通过useContext来获取,那么就需要它必须被Provider包裹才能通过useContext来获取store。

//TODO subscription逻辑还没搞懂

Provider.js返回Provider,Provider被当作一个顶层组件使用,例如:

接受三个Props

store:通过createStore生产的对象,对象内部属性

context:通过React.createContext生存的上下问,如果传入使用自定义的,否则使用默认值

ReactRedux

children:子组件,组件层级的根组件。

代码解析

const subscription = createSubscription(store)= {
  addNestedSub,

  notifyNestedSubs,

  handleChangeWrapper,

  isSubscribed,

  trySubscribe,

  tryUnsubscribe,

  getListeners: () => listeners,

}
const contextValue={
  store,
  subscription,
}

previousState等于当前state树对象。

Provider.js是优先于connect.js执行的,但是又因为useIsomorphicLayoutEffect=useLayoutEffect,导致useIsomorphicLayoutEffect内部代码是在connect.js之后执行。

通过断点发现在执行connect(mapStateToProps, mapDispatchToProps)(App)时候,

就已经提前执行了一次createSubscription方法,

在生产包装组件Connect时候执行ConnectFunction方法会执行一个

执行subscribeUpdates方法,在subscribeUpdates方法中有一行执行

subscription.onStateChange = checkForUpdates

subscription.trySubscribe()

执行subscription.trySubscribe()

 第一次执行unsubscribe为空

TODO//待续

推广一下自己开发的微信小程序,有兴趣的朋友可以玩一玩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值