Antd onFieldsChange не определен и не вызывается - PullRequest
0 голосов
/ 01 сентября 2018

У меня странная проблема с antd, когда я использую Form.Create (onFieldsChange, mapPropsToFields. OnFieldsChange никогда не вызывается. Поэтому я отладил, чтобы решить ее, и у меня возникло много вопросов о лексической области видимости JavaScript и о это указатель. Структура кода в antd похожа на следующую:

init()
  var onFieldsChange = options.onFieldsChange;

  return decorator(function {
      function1() {
        // onFieldsChange is valid and points to the function object
      },
      function2() {
         // onFieldsChange is valid and points to the same function
      },
      function3() {
         // onFieldsChange is invalid
      }
  });
}

Порядок, в котором функции вызываются во время выполнения,

function1()
function3()
function2()

function1 и function2 вызываются с указателем, указывающим на завернутую форму, в то время как function3 вызывается с указателем , указывающим на форму. Таким образом, существуют различия в указателе this . Но я понимаю javascript и его лексическую область видимости, что доступ к onFieldsChange доступен для всех функций, потому что они наследуют лексическую область видимости, а лексическая область видимости не зависит от области выполнения, которая является стеком времени выполнения и что это указатель на стек выполнения.

Теперь из-за того, что onFieldsChange недействителен, он не вызывает обратный вызов и приводит к каскадному нарушению функциональности.

Теперь, поскольку это является частью документации antd, я предполагаю, что это работает для них, но это как-то не работает для меня.

Любое понимание было бы замечательно. Я могу поставить консоль. логи, чтобы отлаживать это свободно, так что я могу исследовать поток так подробно, как мне нужно. По-видимому, в javascript нет способа проверить в точке функции, какие все переменные присутствуют в текущей лексической области видимости. Если бы там было, у меня был бы более полезный материал.

Какие-нибудь подсказки, почему эта лексическая область перепутана?

...