Вы не можете использовать какие-либо асинхронные функции или делать какие-либо побочные эффекты (например, навигацию) при рендеринге. Это прямо противоречит принципам React. Рендеринг должен быть только рендерингом элементов из реквизита и состояния. Кроме того, ошибка, которую вы получаете, заключается в том, что вы отображаете результат асинхронной функции, которая всегда является Promise . Кроме того, получение токена из AsyncStorage для каждого рендера не имеет смысла, так как рендеринг будет происходить часто, вплоть до нескольких раз в секунду
Поместите свою логику в методы жизненного цикла например componentDidMount
, затемиспользуйте this.setState
для изменения состояния так, как вы хотите, и используйте this.state
для визуализации вашего компонента в render()
class SomeComponent extends Component {
constructor(props) {
super(props)
this.state = {
message: ''
}
}
async componentDidMount() {
const token = await AsyncStorage.getItem('myToken')
if (token !== null) {
this.props.navigation.navigate('My Screen', { token: token })
} else {
this.setState({ message: 'token is missing' })
}
}
render() {
return (
<View style={styles.content_container}>
<Text>{this.state.message}</Text>
</View>
)
}
}