【问题标题】:Redux createStore source code - infinite loop risk on the enhancer recursive's callback part ?Redux createStore 源代码 - 增强器递归回调部分的无限循环风险?
【发布时间】:2018-12-03 01:17:43
【问题描述】:

我目前正在研究 Redux.js。喜欢阅读源代码,我立即深入研究了 Redux 源代码。

阅读the createStore code,我陷入了以下代码:

export default function createStore(reducer, preloadedState, enhancer) {
  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
    enhancer = preloadedState
    preloadedState = undefined
  }

  if (typeof enhancer !== 'undefined') {
    if (typeof enhancer !== 'function') {
      throw new Error('Expected the enhancer to be a function.')
    }

    return enhancer(createStore)(reducer, preloadedState)
  }

createStore 代码的这个循环是否应该以无限循环结束?因为递归地,增强器调用自己的 createStore 函数。所以我在这个样板中看到了两种情况: - 要么是因为未定义增强器,因此函数以错误结束 - 或者一切都很好,函数再次返回 createStore,一次又一次......

你如何分析这个 sn-p ?

谢谢

【问题讨论】:

    标签: javascript reactjs recursion redux callback


    【解决方案1】:

    请注意,如果typeof preloadedState !== 'function' && typeof enhancer === 'undefined',该函数将完成其余的工作。

    然后,当我们调用enhancer(createStore)(reducer, preloadedState) 时,enhancedCreateStore 得到enhancer === 'undefined'

    当我们调用createStore(reducer, preloadedState)当且仅当preloadedState === 'function,我们最终会调用enhancedCreateStore(reducer, undefined, undefined)

    这就是它不会以无限循环结束的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2016-10-06
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      相关资源
      最近更新 更多