Сначала вы пытаетесь использовать this
внутри функции, которая будет вызываться другим компонентом / функцией (Button
).
Что Button
не знает this
, потому что это не в том же контексте.
Вам необходимо привязать метод к текущему объекту.
Для этого я рекомендую связать его в конструкторе.
class HomeScreen extends React.Component {
constructor(props, context) {
super(props, context);
this._login = this._login.bind(this);
}
render() {
return (
<View style={styles.container}>
{/* MORE CODE */}
<Button raised onPress={this._login} title="Sign in" />
</View>
);
}
// * MORE CODE *
}
Во-вторых, это должно быть сделано в конструкторе вместо встроенного.
Если это сделано в строке, то функция NEW назначается на onPress
, и реакция будет повторно визуализировать эту часть без необходимости.
То же самое происходит со встроенными функциями стрелок.
EDIT
Эта вторая часть применяется только тогда, когда:
- Использование
PureComponent
- Использование
shouldComponentUpdate
для сопоставления реквизита
Тем не менее, встроенный вы создаете новую функцию каждый раз, когда реагирует рендеринг компонента. Все еще плохая практика.
РЕДАКТИРОВАТЬ 2 (ES6)
Чтобы предотвратить использование constructor
, вы можете использовать функции стрелок, но другим способом. Как это .
class MyComponent extends React.PureComponent {
doWork = () => {
// doing some work here.
}
render() {
return <Text onPress={this.doWork}>Do Some Work</Text>
}
}
Таким образом, вы создаете функцию только один раз за всю жизнь.