не может получить доступ к этой функции в обратном вызове React - PullRequest
0 голосов
/ 19 июня 2019

У меня есть компонент React, в котором мне нужно изменить состояние после успешного вызова базы данных. Вызов базы данных использует функцию обратного вызова, которую я не могу изменить, однако я не могу найти способ доступа к функции перенаправления в том же компоненте из функции обратного вызова. Я просто получаю ошибку enableRedirect' of null

Я пытался изменить функцию обратного вызова на функцию стрелки, но тогда она вызывается неправильно. Я читал другие ответы на подобные проблемы, но не могу применить их к моей ситуации

    ...
    componentDidUpdate = (prevProps, prevState) => {
    if (prevState.braintreeToken !== this.state.braintreeToken) {

      dropin.create(
        {
          authorization: this.state.braintreeToken,
          container: "#dropin-container",
        },
//callback function happens here
        (createErr, instance) => {
          button.addEventListener("click", function() {
            instance.requestPaymentMethod(function(
              requestPaymentMethodErr,
              payload
            ) {
              api
                .submitPayload(payload, plan, id)
                .then(res => {
                  //this is where I'm trying to call my enable redirect function
                  this.enableRedirect();
                })
                .catch(err => {
                  //error handling
                });
            });
          });
        }
      );
    }
  };

    // the function I'm trying to call
    enableRedirect = () => {
      this.setState({
        redirect: true
      });
    };
 ...

Мне нужно, чтобы функция enableRedirect была вызвана в обратном вызове!

1 Ответ

1 голос
/ 19 июня 2019

Вместо этого

button.addEventListener("click", function() {

});

Используйте

button.addEventListener("click", () => {

});

Значение не одинаково для функции стрелки и нормальной функции. Для нормальной функции эта будет кнопкой, которую вы нажали.

Ссылка ссылка .

...