Redux createStore исходный код - риск бесконечного цикла в части обратного вызова рекурсивного энхансера? - PullRequest
0 голосов
/ 24 июня 2018

Я сейчас работаю над Redux.js.Любя читать исходные коды, я сразу же погрузился в исходный код Redux.

Чтение кода createStore . Я остановился на следующем коде:

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, и снова и снова ...

КакВы анализируете этот фрагмент?

Спасибо

1 Ответ

0 голосов
/ 24 июня 2018

Обратите внимание, что если typeof preloadedState !== 'function' && typeof enhancer === 'undefined', функция сделает все остальное.

Затем, когда мы вызываем enhancer(createStore)(reducer, preloadedState), extendedCreateStore получает enhancer === 'undefined'

Когда мы вызываем createStore(reducer, preloadedState) в том и только в том случае, если preloadedState === 'function, мы, наконец, будем вызывать extendedCreateStore (reducer, undefined, undefined)

Вот почему это не закончится как бесконечный цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...