Javascript: отправка функции обратного вызова в конструктор класса - PullRequest
0 голосов
/ 07 марта 2019

Возможно, это действительно простое решение, но я ищу способ отправить функцию обратного вызова в конструктор класса и использовать эту функцию обратного вызова для обновления состояния в исходном классе (в реакции-родной кстати).

Вот что у меня так далеко:

export class A extends Component {
  constructor(props) {
    super(props);
    this.state = {
      bluetooth: {
        isConnected: "false",
        preventAutoReconnect: false,
        connected: {
          id: "",
          name: "none",
          obj: {}
        }
      }
    };
    this.b = new Bluetooth(this.updateBleContext);
  }

  updateBleContext = bleInfo => {
    console.log("updating context");
    this.setState({
      bluetooth: bleInfo
    });
  };
}

Попытка использовать вот так:

export default class B {
  constructor(updateContext) {
    this.bluetooth = {
      isConnected: "false",
      preventAutoReconnect: false,
      connected: {
        id: "",
        name: "none",
        obj: {}
      }
    };
    this.updateContext = updateContext();
  }

  setDisconnected = () => {
    let bluetooth = this.bluetooth;
    bluetooth.connected.name = "";
    bluetooth.connected.obj = {};
    bluetooth.isConnected = "false";

    this.updateContext(bluetooth);
    this.bluetooth = bluetooth;
  };
}

любая помощь значительнооценили!

1 Ответ

0 голосов
/ 07 марта 2019

Вы правильно передаете функцию в класс B.

Внутри конструктора класса B у вас есть:

this.updateContext = updateContext();

Это присваивает this.updateContext возвращаемому значению вызова функции updateContext();, которое в этом случае будет undefined.

Если вы хотите вместо этого сохранить функцию внутри класса B, вы должны сделать:

this.updateContext = updateContext;

Тогда вы получите доступ к функции и сможете вызывать ее так, как вы ожидаете: this.updateContext(bluetooth);

export default class B {
  constructor(updateContext) {
    this.bluetooth = {
      isConnected: "false",
      preventAutoReconnect: false,
      connected: {
        id: "",
        name: "none",
        obj: {}
      }
    };
    this.updateContext = updateContext;
  }

  setDisconnected = () => {
    let bluetooth = this.bluetooth;
    bluetooth.connected.name = "";
    bluetooth.connected.obj = {};
    bluetooth.isConnected = "false";

    this.updateContext(bluetooth);
    this.bluetooth = bluetooth;
  };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...