Одним из решений является сохранение этих данных в глобальном состоянии (например, React Hook или redux) или в хранилище (например, с использованием response-native-async-storage).На следующем экране потребуется доступ к общему ресурсу для извлечения данных.В следующем примере используется асинхронное хранилище для хранения данных:
import AsyncStorage from '@react-native-community/async-storage';
performTimeConsumingTask = async() => {
var result, user;
try {
result = await helper.getJwtToken();
console.log("App.js token result is : ", result);
if (result) {
await AsyncStorage.setItem('jwtToken', result);
console.log("App.js result is true. Retrieve user");
user = await helper._getUser(result.password, result.username);
console.log("User is : ", user.name);
await AsyncStorage.setItem('user', user);
} else {
console.log("App.js result is false");
};
console.log("I am out of App.js async without error");
} catch (err) {
console.log("Error in retrieving token : ", err);
return "";
};
}
Другое решение передает result
& user
в качестве параметров в методе navigation.navigate
.Для этого вашей функции performTimeConsumingTask
необходимо вернуть оба объекта.
class SplashScreen extends React.Component {
performTimeConsumingTask = async() => {
var result, user;
try {
result = await helper.getJwtToken();
console.log("App.js token result is : ", result);
if (result) {
console.log("App.js result is true. Retrieve user");
user = await helper._getUser(result.password, result.username);
console.log("User is : ", user.name);
return {
user,
result,
success: true
}
} else {
throw new Error("App.js result is false");
};
throw new Error("I am out of App.js async without error");
} catch (err) {
console.log("Error in retrieving token : ", err);
return {
success: false,
error: err.message
};
};
}
async componentDidMount() {
// Preload data from an external API
// Preload data using AsyncStorage
const data = await this.performTimeConsumingTask();
if (data !== null && data.success === true) {
this.props.navigation.navigate('App', data);
}
}