Je suis débutant en réaction, ma question peut sembler idiote à tous les experts.
mais je me bats avec une fonctionnalité de base que je veux implémenter, je veux démarrer mon application avec un écran de démarrage et après quelques secondes, je veux afficher l'écran de connexion ou l'écran principal.
J'ai vérifié certains exemples, mais je n'ai trouvé aucun exemple avec du code complet, donc je ne sais pas comment utiliser ces extraits de code dans mon application.
J'ai essayé d'appliquer du code selon la documentation, mais mon code donne une erreur, jetez un coup d'œil et aidez-moi.
Ci-dessous mon code:
Index.Android.js
/** * Exemple React Application native * Https://github.com/facebook/react-native * @flow */ importer Réagir, {Composant} de 'réagir'; importer { AppRegistry, Feuille de style, Texte, Afficher, Navigateur } À partir de 'react-native'; Importer Splash à partir de './Splash '; import Connectez-vous à partir de' ./Login ';;. ________.____._rev , classe d'exportation par défaut DigitalReceipt étend Component { render () { return ( { if (route.sceneConfig) { renvoie route.sceneConfig; } renvoie Navigator.SceneConfigs.FloatFromRight; }} /> ); } renderScene (route, navigateur) { var routeId = route.id; if (routeId = == 'Splash') { Return ([.___ _.] ); } if (routeId === 'Login') { return ( ) ; } renvoie this.noRoute (navigateur); } } const styles = StyleSheet.create ({ Conteneur: { Flex: 1, RequireContent: 'center', AlignItems: 'center', BackgroundColor : '# F5FCFF', }, Bienvenue: { Font Taille: 20, TextAlign: 'centre', Marge: 10, }, instructions: { textAlign: 'center', couleur: '# 333333', marginBottom: 5, }, }); AppRegistry.registerComponent ('DigitalReceipt', () => DigitalReceipt);
Splash.js
importer Réagir, {Composant} de 'réagir'; importer { AppRegistry, Afficher, Texte, StyleSheet, Image } De 'react-native'; Import {StackNavigator} de 'react-navigation'; Import Connexion à partir de ' ./Login'; Classe Splash étend Component { ComposantWillMount () { Var navigator = this.props.navigator; SetTimeout ( () => { naviguer ('Login') }, 1000); } render () { const {naviguer} = this.props.navigation; return ( Reçu numérique Propulsé par React Native ); } } const SplashApp = StackNavigator ({ Login: {screen: Login}, Splash: {screen: Splash}, }); Const styles = StyleSheet.create ({ Wrapper: { backgroundColor: '#FFFFFF', flex: 1, justifierContenu: 'center', alignItems: 'center' }, titre : { color: '# 2ea9d3', fontSize: 32, fontWeight: 'bold' }, sous-titre: { couleur: '# 2ea9d3', fontWeight: '200', paddingBottom: 20 }, titleWrapper: { flex : 1, JustifierContenu: 'center', AlignItems: 'center' }, Logo: { largeur: 96, hauteur: 96 } }); AppRegistry.registerComponent ('SplashApp', () => SplashApp);
Login.js
importer Réagir, {Composant} de 'réagir'; importer { AppRegistry, Afficher, Texte, StyleSheet, Image } De 'react-native'; Import {StackNavigator} de 'react-navigation'; Import Splash from ' ./Splash'; Class Login composant Component { Static navigationOptions = { Titre: 'Bienvenue', }; render () { const {naviguer} = this.props.navigation; return ( Écran de connexion ); } } const LoginApp = StackNavigator ({ Connexion: {screen : Login}, Splash: {screen: Splash}, }); Const styles = Feuille de style. create ({ wrapper: { backgroundColor: '#FFFFFF', flex: 1, justifierContenu: 'center', alignItems: 'center' }, titre: { couleur: '# 2ea9d3', fontSize: 32, fontWeight: 'bold' } }); AppRegistry.registerComponent ('LoginApp', () => LoginApp);
S'il vous plaît aidez-moi, désolé pour les erreurs stupides dans le code si vous en trouvez.
Merci
Vous pouvez essayer cet exemple. Il n’est pas nécessaire d’empiler stacknavigator dans l’écran de démarrage.
constructor(props){
super(props);
this.state = {
timePassed: false,
};
}
componentDidMount() {
setTimeout( () => {
this.setTimePassed();
},1000);
}
setTimePassed() {
this.setState({timePassed: true});
}
render() {
if (!this.state.timePassed) {
return <SplashScreen/>;
} else {
return <Login/>;
}
}
La bonne façon de créer un écran de démarrage consiste à modifier les itinéraires racines ..___. Vous devez d’abord créer l’image pour votre application. Vous pouvez le faire très rapidement en téléchargeant votre image sur le site https://apetools.webprofusion.com/app/#/ où il créera un fichier de paquet contenant toutes les images pour iOs, windows & Android et mettre les dans des dossiers pour chaque appareil. Vous devez copier ces dossiers sur l’itinéraire de chaque périphérique. Si vous avez déjà créé un dossier, remplacez-le . Route {device}/app/src/main/res/{folder-name}
Dans le dossier pouvant être dessiné dans route {device}/app/src/main/res/drawable
, vous aurez icon.png
& screen.png
et vous créerez un fichier nommé
splash_background.xml
dans ce fichier, ajoutez le texte suivant
`<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<bitmap
Android:gravity="fill"
Android:src="@drawable/screen"
/>
</item>
</selector>`
Dans la route {device}/app/src/main/Java/com/{name-of-project}
ajouter un fichier nommé SplashActivity.Java
Dans ce fichier SplashActivity.Java
ajouter le suivant:
package com.prework;
import Android.content.Intent;
import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
Dans la route {device}/app/src/main/res/values/styles.xml
changez-le comme suit:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="Android:windowBackground">@drawable/splash_background</item>
</style>
</resources>
Et dans la route {device}/app/src/main/res/AndroidManifest.xml
changez-le comme suit
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.prework">
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW"/>
<application
Android:name=".MainApplication"
Android:label="@string/app_name"
Android:icon="@drawable/icon"
Android:allowBackup="false"
Android:theme="@style/AppTheme">
<activity
Android:name=".SplashActivity"
Android:label="@string/app_name"
Android:theme="@style/SplashTheme"
Android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name=".MainActivity"
Android:label="@string/app_name"
Android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
Android:windowSoftInputMode="adjustResize">
</activity>
<activity Android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
Reconstruisez maintenant votre application en exécutant la ligne de commande react-native run-Android
Vous pouvez toujours le faire de manière native:
Il vous faut tout d’abord des images pour afficher votre écran de démarrage sur différents appareils:
Ils doivent être au format png
, puis les mettre sur Android/app/src/main/res/drawable
et créer un dossier nommé avec la résolution de chaque image. Ex: drawable/drawable-hdpi
.
Ensuite, dans le dossier que vous pouvez dessiner, vous devez créer un fichier nommé background_splash.xml
et mettre quelque chose comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<bitmap
Android:gravity="fill"
Android:src="@drawable/screen"/>
</item>
</selector>
Après cela, vous devez ajouter un nouveau style dans Android/app/res/values/styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="Android:windowBackground">@drawable/background_splash</item>
</style>
</resources>
Mettez à jour votre fichier AndroidManifest.xml
en ajoutant une nouvelle activité appelée SplashActivity
et ajoutez Android:theme="@style/SplashTheme"
. Créez maintenant une activité vide avec le nom MainActibity
. Votre AndroidManifest.xml
devrait ressembler à ceci:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.exampleapp"
Android:versionCode="1"
Android:versionName="1.0">
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-sdk
Android:minSdkVersion="23"
Android:targetSdkVersion="26" />
<application
Android:name=".MainApplication"
Android:allowBackup="true"
Android:label="@string/app_name"
Android:icon="@mipmap/ic_launcher"
Android:theme="@style/AppTheme">
<activity
Android:name=".SplashActivity"
Android:label="@string/app_name"
Android:theme="@style/SplashTheme">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name=".MainActivity"
Android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
Android:windowSoftInputMode="adjustResize"
Android:exported=”true”
/>
<activity Android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
Nous devons maintenant dire à SplashActivity d’aller à MainActivity, qui représente notre application réelle. Pour ce faire, vous devez créer une nouvelle classe Java nommée SplashActivity
.
package com.exampleapp; // change to the name of your app.
import Android.content.Intent;
import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
Et maintenant, vous devriez voir un écran de démarrage.
Suivez simplement ce code simple.
App.js
import { createStackNavigator,createAppContainer } from "react-
navigation";
import Splash from "./Controller/Splash";
import Login from "./Controller/Login";
import Register from "./Controller/Register";
const Navigator = createStackNavigator ({
main: { screen: Splash },
LoginScreen: { screen : Login },
});
const AppNavigator = createAppContainer(Navigator);
export default class App extends Component {
render() {
return <AppNavigator />;
}
}
Splash.js
import React, { Component } from "react";
import {View, Text } from "react-native";
export class Splash extends Component {
componentDidMount() {
setTimeout(() => {
this.load();
}, 4000);
}
load = () => {
this.props.navigation.Push("LoginScreen");
};
render() {
return (
<View >
<Text style={styles.myText}>Splash Screen</Text>
</View>
);
}
}
export default Splash;
J'espère que cela t'aides :)