Вам нужно также установить высоту на элементах и
; в противном случае они будут достаточно большими, чтобы соответствовать содержимому. Например, :
Example of 100% width and height
Вы должны связать эту функцию в конструкторе. Я надеюсь, что следующий код поможет,
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();
}
Это потому, что 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
где угодно.
Вызов и применение аналогичны привязке с той лишь разницей, что она немедленно вызывает функцию с этой ссылкой и другими обязательными параметрами, передаваемыми в вызове и применении.
объявите функцию handleUpdateValueForCharacteristic
как функцию стрелки, чтобы позволить ей наследовать внешнюю область видимости (то есть область видимости класса), и у вас все будет хорошо.
handleUpdateValueForCharacteristic = data => {
_receivedNb = this.testFunc();
}
Вы должны привязать свой обработчик событий
constructor(){
super()
this.handleUpdateValueForCharacteristic = this.handleUpdateValueForCharacteristic.bind(this)
}
.