在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ react-redux 代碼有一段很奇怪的代碼

react-redux 代碼有一段很奇怪的代碼

export function wrapMapToPropsFunc(mapToProps, methodName) {
  return function initProxySelector(dispatch, { displayName }) {
    const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {
      return proxy.dependsOnOwnProps
        ? proxy.mapToProps(stateOrDispatch, ownProps)
        : proxy.mapToProps(stateOrDispatch)
    }

    // allow detectFactoryAndVerify to get ownProps
    proxy.dependsOnOwnProps = true

    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {
      proxy.mapToProps = mapToProps
      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps)
      let props = proxy(stateOrDispatch, ownProps)

      if (typeof props === 'function') {
        proxy.mapToProps = props
        proxy.dependsOnOwnProps = getDependsOnOwnProps(props)
        props = proxy(stateOrDispatch, ownProps)
      }

      if (process.env.NODE_ENV !== 'production') 
        verifyPlainObject(props, displayName, methodName)

      return props
    }

    return proxy
  }
}

其中的

const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {
      return proxy.dependsOnOwnProps
        ? proxy.mapToProps(stateOrDispatch, ownProps)
        : proxy.mapToProps(stateOrDispatch)
    }

proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {
    // ...
    let props = proxy(stateOrDispatch, ownProps) 
}

理論上是會(huì)死循環(huán)才對(duì)呀?

有大神出來(lái)解釋一下嗎?

回答
編輯回答
空白格

你省略的那個(gè)地方是關(guān)鍵

 proxy.mapToProps = mapToProps
 proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps)

這里改變了proxy.mapToProps,因此在let props = proxy(stateOrDispatch, ownProps) 中調(diào)用的proxy.mapToProps是另外一個(gè)函數(shù)了

2017年6月19日 16:21