Я интегрирую логин Facebook в приложение React Native, которое я создаю. У меня есть следующий код:
class FacebookButton extends Component {
constructor(props) {
super(props);
this.fetchAccessToken = this.fetchAccessToken.bind(this);
}
facebookButtonPressed() {
LoginManager.logInWithReadPermissions(['public_profile']).then((result) => {
if (result.isCancelled) {
console.log('Login Cancelled');
} else {
this.fetchAccessToken();
}
})
.catch((error) => {
console.log('Login fail with error: ' + error);
});
}
fetchAccessToken() {
AccessToken.getCurrentAccessToken().then((data) => {
const { accessToken } = data
console.log(accessToken);
})
.catch(() => {
console('Error getting access token');
});
}
render() {
return (
<Button
onPress={this.facebookButtonPressed}
title="Sign In with Facebook"
color="#000000"
/>
);
}
}
Однако я продолжаю получать сообщение об ошибке, что метод fetchAccessToken
не является функцией. По первому инстинкту я подумал, что проблема в ключевом слове this
. Поэтому я начал с добавления вышеупомянутой конструкции и привязки к ней this
. Я предположил, что this
означает FacebookButton
. то есть я предполагал, что всякий раз, когда я вызываю this.fetchAccessToken()
, он вызывает метод. Однако это не сработало.
Затем я продолжил чтение, и было несколько ссылок на то, что я должен использовать Arrow functions
, поскольку функции стрелок не имеют this
, ассоциированного с этой функцией, и у этого this.fetchAccessToken()
будет только один контекст, т.е. FacebookButton
. Тем не менее, это все еще не работает.
Итак, у меня есть вопросы:
- Какие именно проблемы приводят к тому, что приведенный выше код не работает. Интуиция деталей была бы оценена. Я впервые беру React Native за спин.
- Каким будет исправление?
Обновление
Ответ на вопрос 2 заключается в добавлении .bind(this)
к кнопке следующим образом:
<Button
onPress={this.facebookButtonPressed.bind(this)}
title="Sign In with Facebook"
color="#000000"
/>