通过Expo& amp;存储应用程序之间的数据保持不变React Native

时间:2017-10-17 20:15:07

标签: react-native expo asyncstorage

这是我的App.js,其他一切都是标准/简单,我可以得到它。

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>
    );
  }
}

提取的value始终为null

我已经在本地和ReplIt尝试了这个。在所有情况下,数据不会在应用程序加载中持续存在;我总是看到:

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

我做错了什么?关于Expo如何与持久存储进行交互,我是否有错误的假设? AFAIK,AsyncStorage应该将东西保存到设备中;所以我可以关闭并重新打开应用程序并保持数据。

2 个答案:

答案 0 :(得分:3)

UPD:我刚刚意识到您的代码按预期工作...可能是评论中提到的重复问题。

避免render方法中的任何请求和异步调用,因为它可能会被调用,具体取决于道具或状态变化的方式。最好将所有相关代码放入componentDidMount AsyncStorage中。安装组件时只会调用一次。

不确定为什么你的代码dodnt为你工作,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> ); } } 允许回调,但等待对我来说没问题:

 <div style="overflow:auto;height:200px">
  <div (scroll)="scrollHandler($event)">Hello {{name}}</div>

.... Other content elements.

答案 1 :(得分:0)

尝试一下。 AsyncStorage是一种基于Javascript Promise的方法。

AsyncStorage.getItem('@MySuperStore:key')
.then(value => console.log(value))

value = await AsyncStorage.getItem('@MySuperStore:key');
console.log(value);