Dados persistentes entre os lançamentos de aplicativos com Expo & React Native

Narfanator

Aqui está App.js, todo o resto é tão padrão / simples quanto posso conseguir.

import React from 'react';
import { AsyncStorage, Text, View } from 'react-native';

export default class App extends React.Component {
  render() {

    console.log("Fetching data")
    AsyncStorage.getItem('@MySuperStore:key', (value) => {
      console.log("Fetched data: ", value)
      if(value == null) {
        console.log("Writing data!")
        AsyncStorage.setItem('@MySuperStore:key', 'data', () => {
          console.log("Wrote data!")
        })
      }
    })

    return(
    <View>
      <Text>Hello, ReplIt</Text>
    </View>
    );
  }
}

O buscado valueé sempre null.

Tentei fazer isso tanto localmente quanto no ReplIt. Em todos os casos, os dados não persistem durante os carregamentos do aplicativo; Eu sempre vejo:

Fetching data
Fetched data:  null
Writing data!
Wrote data!

O que estou fazendo de errado? Eu tenho uma suposição incorreta sobre como o Expo interage com o armazenamento persistente? AFAIK, AsyncStoragedeve salvar coisas no dispositivo; para que eu possa fechar e reabrir o aplicativo e fazer com que os dados persistam.

Vlad

UPD: acabei de perceber que seu código funcionou conforme o esperado ... provavelmente é um problema de substituição, conforme mencionado no comentário.

Evite quaisquer solicitações e chamadas assíncronas no rendermétodo, porque ele pode ser chamado várias vezes, dependendo de como os adereços ou o estado mudam. É melhor colocar todo o código relacionado, componentDidMountconforme recomendado na documentação . Ele será chamado apenas uma vez quando o componente for montado.

Não sei por que seu código não funcionou para você, retornos de chamada são permitidos AsyncStorage, no entanto, esperar funciona bem para mim:

import React from "react";
import { AsyncStorage, Text, View } from "react-native";

export default class App extends React.Component {
  constructor() {
    super();
    this.state = {
      storedValue: null
    };
  }
  async componentDidMount() {
    let storedValue = await AsyncStorage.getItem("@MySuperStore:key");
    console.log("Fetched data: ", storedValue);
    if (storedValue == null) {
      console.log("Writing data!");
      storedValue = await AsyncStorage.setItem("@MySuperStore:key", "data");
    }
    this.setState({
      storedValue
    });
  }

  render() {
    const { storedValue } = this.state;
    return (
      <View>
        <Text>Hello, ReplIt</Text>
        <Text>This is Stored Value, '{storedValue}'</Text>
      </View>
    );
  }
}

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como manter os dados da caixa de texto entre os lançamentos de aplicativos?

Dados persistentes sem atraso entre reinicializações de aplicativos

Loop do / while sem contar o número de lançamentos ou alinhado com os dados

Comunicar e manter dados entre aplicativos com grupos de aplicativos

Problema de lançamentos de aplicativos Android

Como direcionar os lançamentos de aplicativos em faixas fechadas para as organizações?

Login do Facebook: persistindo em todos os lançamentos de aplicativos

Lidar com vários lançamentos de aplicativos JavaFX dentro de um loop

Mostrar caixa de diálogo de boas-vindas do Google Play Games em todos os lançamentos de aplicativos

O que acontece com um banco de dados Realm quando você atualiza aplicativos iOS e Android desenvolvidos com React Native?

Como calculo o total e a média de todos os lançamentos de dados?

Por que os lançamentos de cudaMemcpyAsync e kernel bloqueiam mesmo com um fluxo assíncrono?

Como manter os dados de adereços persistentes no Vue?

É realmente possível fazer os testes de Detox / Jest passarem com um aplicativo React Native rodando com Expo?

Asp.Net Como compartilhar os dados armazenados no cache entre os aplicativos em execução no mesmo pool de aplicativos

Como defino os tipos de argumento no React-Native Expo

Tornando os aplicativos Java Swing persistentes

Dados persistentes entre chamadas sucessivas de cron job

Dados persistentes entre chamadas sucessivas de cron job

As solicitações de rede falharam com React Native Expo no iOS

Integração de APIs do Google com React Native / Expo

Resolvendo conflitos de dependência com Expo e React Native

Rastreamento de localização ao vivo no React Native com Expo

Diferença entre os tipos de aplicativos de insights de aplicativos

Maneiras de transferir dados entre 2 aplicativos?

Realm - Compartilhar banco de dados entre aplicativos

Função Python que simula o lançamento de dados com base nos parâmetros de entrada 1) número de dados 2) Número de lançamentos

Função Python que simula o lançamento de dados com base nos parâmetros de entrada 1) número de dados 2) Número de lançamentos

Dados persistentes de um formulário Symfony 4 com AJAX