J'ai créé prefsManager.js - Utilisé pour stocker et récupérer des données d'AsyncStorage mais j'ai rencontré un problème comme lorsque le journal d'impression, il retourne toujours non défini car il est Async mais je veux imprimer la valeur réelle dans un journal par le appel de la fonction.
_handlePress() { await prefsManager.setValue(prefskey.username, this.state.username) console.log("username =>>", await prefsManager.getValue(prefskey.username)); }
J'ai utilisé ceci dans mon Home.js lorsque j'appuie sur le bouton J'appelle cette méthode.
import { AsyncStorage } from 'react-native'; import prefskey from '../utils/constants/prefskeys'; const setValue = async (key, value) => { await AsyncStorage.setItem(key, value); } const getValue = async (key) => { let value = ''; try { value = await AsyncStorage.getItem(key) || 'none'; } catch (error) { // Error retrieving data console.log(error.message); } return value; }; const prefsmanager = { setValue, getValue } export default prefsmanager;
p >
3 Réponses :
Vous devez utiliser le mot-clé async sur votre fonction comme ceci.
_handlePress = () => { prefsManager.setValue(prefskey.username, this.state.username) console.log("username =>>" , prefsManager.getValue(prefskey.username)); }
fonction d'appel
import { AsyncStorage } from 'react-native'; import prefskey from '../utils/constants/prefskeys'; const prefsnamager = { setValue: function (key, value) { AsyncStorage.setItem(key, value) }, getValue: async (key) => { let value = ''; try { value = await AsyncStorage.getItem(key) || 'none'; } catch (error) { // Error retrieving data console.log(error.message); } return value; } } export default prefsnamager;
Je ne veux pas écrire dans chaque écran, j'appelle simplement la fonction de la classe prefsmanager et renvoie la valeur que j'ai passée la clé comme argument.
Vous pouvez utiliser cette fonction dans la classe prefsmanager, ajoutez simplement la clé d'argument dans la fonction et appelez-la n'importe où. J'ai mis à jour ma réponse précédente Veuillez jeter un œil
Cela me donne une erreur de syntaxe, il n'y a pas de mot clé de fonction.
J'ai essayé mais il imprime comme 'username = >>', {_40: 0, _65: 0, _55: null, _72: null} dans le journal.
Vous n'avez pas besoin du mot-clé "function" lorsque vous utilisez la fonction de grosse flèche dans la fonction getValue et vous devez passer un argument "key" dans la fonction getValue comme getValue = async (key) =>
et vous avez besoin pour modifier et mettre à jour cette ligne avec cette valeur = attendre AsyncStorage.getItem (clé) || 'aucun';
continuons cette discussion dans le chat .
constructor(props) { super(props) this.state = {}; let self=this; //this function is called everytime , when you visit this screen. this.__didFocusSubscription = this.props.navigation.addListener('didFocus',payload => { AsyncStorage.getItem('data').then((value)=>{ if(value==null){ self.setState({count:'no data found'}) } else{ self.setState({count:value}) } }) }); }
AsyncStorage.setItem('data','Read Data')
Je veux cela dans un fichier séparé et je veux appeler à partir de là plutôt que de définir dans chaque écran.
J'ai créé prefsnamager.js et dans ce fichier, j'ai défini les méthodes Getter et Setter of AsyncStorage et je veux appeler la fonction à partir de là en important prefsnamager.js dans mon home.js et appeler la fonction de prefsnamager.js pour définir et obtenir la valeur de préférence.
En fait, c'est comme localStorage
sur le Web, mais avec une petite différence. en obtenant l'élément, il agit de manière asynchrone. faites attention à ci-dessous:
AsyncStorage.getItem('key') .then( value => console.log(value) );
Mais pour l'obtenir, c'est comme ci-dessous:
AsyncStorage.setItem('key', value);
Pouvons-nous prendre le rappel à partir de là et le mettre dans notre écran?
Cher @VishalPatoliya ツ, qu'est-ce que cela signifie prendre le rappel ? dans puis
, vous pouvez passer une fonction de rappel et faire tout ce que vous voulez. et à l'intérieur de catch
, vous pouvez passer la fonction de secours, puis tout ce que vous voulez.