myFunction не является функцией

Вам нужно также установить высоту на элементах и ; в противном случае они будут достаточно большими, чтобы соответствовать содержимому. Например, :


Example of 100% width and height

0
задан Me_Will 17 January 2019 в 11:38
поделиться

4 ответа

Вы должны связать эту функцию в конструкторе. Я надеюсь, что следующий код поможет,

var _receivedNb = 0

export default class App extends Component {
  constructor(props){
    super(props)
    this.testFunc = this.testFunc.bind(this);
  }

  testFunc() {
    var r = 2;
    return r;
  }
  componentDidMount() {

    BleManager.start({showAlert: false});

    this.handlerUpdate = bleManagerEmitter.addListener('BleManagerDidUpdateValueForCharacteristic', this.handleUpdateValueForCharacteristic );
  }


  handleUpdateValueForCharacteristic(data) {
      _receivedNb = this.testFunc();
  }
0
ответ дан Selvarani 17 January 2019 в 11:38
поделиться

Это потому, что this ссылка внутри handleUpdateValueForCharacteristic не то, что вы думаете. Вы можете узнать об этом подробно из You Dont Know Js

Придя к решению, существует множество подходов для решения этой проблемы, вам нужно исправить ссылку this внутри handleUpdateValueForCharacteristic [ 1114]

Одним из простых подходов является использование ARROW FUNCTION => . Функции стрелок сохраняют this из того места, где определена функция.

var _receivedNb = 0

export default class App extends Component {
    constructor(){
        super()
    }

componentDidMount() {

    BleManager.start({showAlert: false});

    this.handlerUpdate = bleManagerEmitter.addListener('BleManagerDidUpdateValueForCharacteristic', this.handleUpdateValueForCharacteristic );
}


handleUpdateValueForCharacteristic = (data) => {
    _receivedNb = this.testFunc();
}

testFunc = () => {
  var r = 2;
  return r;
}

Второй подход использует .call, .bind или .apply . Вы можете прочитать о них позже, в Short Bind принимает this в параметрах и возвращает жестко привязанную функцию, всегда ссылаясь на то, что было предоставлено внутри .bind. Вы можете просто использовать handleUpdateValueForCharacteristic.bind(this) и вызвать его. Лучший способ сделать это внутри constructor.

var _receivedNb = 0

export default class App extends Component {
    constructor(){
        super()  
        this.newHandleUpdateValueForCharacteristic = handleUpdateValueForCharacteristic.bind(this)

    }

componentDidMount() {

    BleManager.start({showAlert: false});

    this.handlerUpdate = bleManagerEmitter.addListener('BleManagerDidUpdateValueForCharacteristic', this.handleUpdateValueForCharacteristic );
}


handleUpdateValueForCharacteristic = (data) => {
    _receivedNb = this.testFunc();
}

testFunc = () => {
  var r = 2;
  return r;
}

и используйте newHandleUpdateValueForCharacteristic где угодно.

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

0
ответ дан Ashish 17 January 2019 в 11:38
поделиться

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

handleUpdateValueForCharacteristic = data => {
  _receivedNb = this.testFunc();
}
0
ответ дан Karim 17 January 2019 в 11:38
поделиться

Вы должны привязать свой обработчик событий

constructor(){
  super()
  this.handleUpdateValueForCharacteristic = this.handleUpdateValueForCharacteristic.bind(this)
}
.
0
ответ дан Dinesh Pandiyan 17 January 2019 в 11:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: