0
votes

Comment stocker les données lors de la récupération de l'API

Je crée une application qui récupère des données d'une URL et l'affiche. Je suis un débutant et donc je n'utilise pas Redux ou autre pour le moment.

J'ai réussi à récupérer les données et à l'afficher sur ma demande, mais j'aimerais utiliser le stockage local du téléphone. J'ai vu les exemples d'asyncstorage sur la documentation du site Web de l'Expo, mais je ne sais pas comment les adapter à mon code. De plus, dois-je afficher des données de stockage locales uniquement lorsqu'il n'y a pas de connexion Internet? Ou dois-je toujours avoir toujours à les afficher? P>

import React, {Component} from 'react';
import {ScrollView, View, FlatList, Image, ActivityIndicator, AsyncStorage} from 'react-native';
import axios from "axios";
import {ListItem} from "react-native-elements";
import {createAppContainer, createStackNavigator} from "react-navigation";
import AppConfig from "../../AppConfig";
import Keys from "../../data/Constants/Storage";
import PronosticsDetailsScreen from "../../screens/PronosticsDetailsScreen";

class MontanteTab extends Component {

    state = {
        errors: null,
        isLoading: true,
        pronostics: [],
    };

    async componentDidMount() {
        const isConnected = true;

        if (isConnected) {
            await this.loadPronostics();
        }

        try {
            this.setState({pronostics: JSON.parse(await AsyncStorage.getItem(Keys.pronosticsMontante))});
        } catch (error) {
            console.log(error);
        }
    }

    loadPronostics() {
        this.setState({isLoading: true, error: null});

        return axios.get(AppConfig.apiUrl + 'montante').then(async response => {
            await AsyncStorage.setItem(Keys.pronosticsMontante, JSON.stringify(this.state.pronostics));
            this.setState({isLoading: false});
        }).catch(error => {
            this.setState({isLoading: false, error: error.response});
            console.log(error);
        });
    }

    render() {
        if (this.state.isLoading === true) {
            return (
                <View style={{flex: 1, padding: 20}}>
                    <ActivityIndicator/>
                </View>
            )
        }

        return (
            <View>
                <ScrollView>
                    <View>
                        <FlatList
                            data={this.state.pronostics}
                            keyExtractor={(item, index) => index.toString()}
                            renderItem={({item}) => (
                                <ListItem
                                    key={item.id}
                                    roundAvatar
                                    badge={{
                                        value: item.statut,
                                        textStyle: {color: '#fff'},
                                        containerStyle: {marginRight: 0, backgroundColor: item.couleur}
                                    }}
                                    avatar={<Image
                                        source={{uri: AppConfig.imagesPronosticsUrl + item.image}}
                                        style={{borderRadius: 50, height: 50, width: 50}}/>}
                                    title={item.competition}
                                    subtitle={item.equipe_domicile + ' - ' + item.equipe_exterieur}
                                    onPress={() => this.props.navigation.navigate('PronosticsDetails', {
                                        item,
                                    })}
                                />
                            )}
                        />
                    </View>
                </ScrollView>
            </View>
        );
    }
}


0 commentaires

3 Réponses :


0
votes

Son dépend de la fréquence de vos données de liste,

Si la liste des données est constante, vous pouvez stocker la réponse de l'API dans le stockage local. puis afficher les données de la liste de stockage local.

Si la liste des données change de fréquences, vous pouvez toujours utiliser le stockage local. Stockez les données dans le stockage local sur la réponse de l'API. Sur la page TIME prochaine, chargez les données du stockage local et faites également appel à API pour obtenir les dernières données et sur les données d'affichage de la réponse de l'API à la liste et à la mise à jour de la mise à jour du stockage local. L'utilisation de cette façon, l'utilisateur n'aura pas à attendre la réponse de l'API.

Pour stocker les données Utiliser peut utiliser la syntaxe JavaScript localstorage.settiem ('Key', 'apireponse') et localstorage.gettim ('Key')

ou

peut créer une classe de service qui stockera la réponse de l'API dans l'objet, qui peut également être utilisée dans d'autres fichiers.


1 commentaires

Merci pour votre réponse, mais je vais utiliser l'asyncstorage. J'ai édité mon post :)



1
votes

Comme il s'agit d'un projet natif de réagisme, je pense que asyncstorage est ce que vous recherchez. Vous pouvez définir la valeur dans votre «CODE> SETState Rappel dans ComponentDidMount . Si vous n'avez besoin que de stocker les données à la fin d'une session, vous pouvez utiliser appstate et définir la valeur lorsque le Stateau NextState est en arrière-plan ou inactif. Utilisez asyncstorage.getem () lorsque appstate ou NEXTATE est actif. https://facebook.github.io/react-native/docs/appstate https://facebook.github.io/react-native/docs/asyncstorage.com/a >


0 commentaires

2
votes

Vous pouvez utiliser réagissant ASYNCStorage de NativeNCStorage pour stocker des données sur le stockage local du périphérique.

const KEY = 'USER_DATA'

let keyValue = { name: yogi }

AsyncStorage.setItem(KEY,keyValue);

AsyncStorage.getItem(KEY).then(asyncStorageRes => {
    console.log(JSON.parse(asyncStorageRes))
});


3 commentaires

Merci beaucoup! Quand dois-je placer ce code dans mon code? Je récupère un tableau d'objets, puis-je analyser chaque objet dans Json pour la stocker dans l'asyncstorage?


stockez tout l'objet ou la touche et récupérez-le.


Je dois mettre votre code après cette ligne: .Chen ((ResponsibleJson) => {?