Функции недопустимы как тип реакции и ошибка «уже прочитано» - PullRequest
0 голосов
/ 29 сентября 2019

Я работаю над кнопкой входа в Facebook, но у меня возникли некоторые проблемы при добавлении дополнительного renderUserInfo У меня появляется это предупреждение по этому Functions are not valid as a react type коду:

 render() {
    return (
<View style={styles.container}>
     {!this.state.userInfo ? (
              <Button
                title="Login with Facebook"
                onPress={this.loginWithFacebook.bind(this)}
                style={{ width: 300, marginTop: 30 }}
              />
            ) : (
              this._renderUserInfo
            )}
</View>
);
}

И моя вторая ошибка на этом Facebook Login Error:Already read

loginWithFacebook = async () => {
    try {
      const {
        type,
        token
      } = await Facebook.logInWithReadPermissionsAsync("CODE", {
        permissions: ["public_profile"]
      });
      if (type === "success") {
        // Get the user's name using Facebook's Graph API
        const response = await fetch(
          `https://graph.facebook.com/me?access_token=${token}&fields=id,name,picture.type(large)`
        );

Речь идет о await response.json (), который я там бываю 2 раза, думаю, но как мне это исправить?

        const userInfo = await response.json();
        this.setState({ userInfo });
        Alert.alert("Logged in!", `Hi ${(await response.json()).name}!`);
      } else {
        // type === 'cancel'
      }
    } catch ({ message }) {
      alert(`Facebook Login Error: ${message}`);
    }
  };


Hope that someone can help me with the two problems,

Thanks for your time

1 Ответ

0 голосов
/ 29 сентября 2019

Задача 1:

Вам необходимо вызвать функцию. Попробуйте это:

 render() {
    return (
<View style={styles.container}>
     {!this.state.userInfo ? (
              <Button
                title="Login with Facebook"
                onPress={this.loginWithFacebook.bind(this)}
                style={{ width: 300, marginTop: 30 }}
              />
            ) : (
              this._renderUserInfo()
            )}
</View>
);
}

Задача 2:

Вам не нужно снова использовать await response.json(). Используйте уже сохраненный ответ, userInfo.

Попробуйте это:

     const userInfo = await response.json();
    this.setState({ userInfo });
    Alert.alert("Logged in!", `Hi ${userInfo.name}`;
  } else {
    // type === 'cancel'
  }
} catch ({ message }) {
  alert(`Facebook Login Error: ${message}`);
}


};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...