React Native onPress вызывается автоматически
У меня возникают проблемы с функцией onPress. OnPress должен работать только тогда, когда он фактически был вызван сенсорным событием (я полагаю), то есть когда я нажимаю кнопку на экране. Но кажется, что onPress запускается сам при вызове функции render. Когда я пытаюсь нажать вручную, это не сработает.
import React, { Component } from 'react';
import { PropTypes, Text, View ,Alert } from 'react-native';
import { Button } from 'react-native-material-design';
export default class Home extends Component {
render() {
return (
<View style={{flex:1}}>
<Button value="Contacts" raised={true} onPress={this.handleRoute('x')} />
<Button value="Contacts" raised={true} onPress={this.handleRoute('y')} />
<Button value="Contacts" raised={true} onPress={this.handleRoute('z')} />
</View>
);
}
handleRoute(route){
alert(route) // >> x , y, z
}
}
module.exports = Home;
Что мне не хватает? Что-то не так с тем, как я назначил, или это какая-то ошибка?
Любое предложение высоко ценится.
Видео
Ответы
Ответ 1
попытайтесь изменить
onPress = {this.handleRoute('x')}//в этом случае функция handleRoute вызывается, как только выполняется рендеринг
to
onPress = {() = > this.handleRoute.bind('x')}//в этом случае handleRoute не вызывается, как только выполняется рендеринг
Ответ 2
Вы можете изменить это:
onPress={this.handleRoute.bind(this, 'x')}
или это:
onPress={() => this.handleRoute('x')}
Причина в том, что onPress принимает функцию в качестве аргумента. В вашем коде вы вызываете функцию и сразу же возвращаете результат (когда вызывается render), а не ссылаетесь на функцию, которую React вызывает позже в событии press.
Причина, по которой вам нужно связывание (this), заключается в том, что функция теряет привязанный экземпляр, когда вы просто делаете (this.handleRoute), и вы должны указать ему, какой это использовать. Функция bind принимает другие аргументы для последующего вызова функции. См. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind для получения более подробной информации о связывании.
Есть еще один способ привязки в конструкторе. Вы можете прочитать о способах решения этой проблемы в React здесь: https://facebook.github.io/react/docs/handling-events.html
Ответ 3
На самом деле я объявил свою функцию выше render, а затем из этой функции я вызывал функцию, которая была объявлена внутри функции render(), и она показала, что функции внутри render не существует... Может кто-нибудь помочь мне