1
 "@react-native-async-storage/async-storage": "1.15.5",
 "react": "17.0.1",
 "react-native": "0.64.2",

这是我使用异步的方式

fetch('',{
... //codes here
.then((response) => response.json())
      .then((responseJson) => {

     AsyncStorage.setItem('user_token', JSON.stringify(responseJson.token));
     AsyncStorage.setItem('user_id', JSON.stringify(responseJson.data));
     AsyncStorage.setItem('login_type', 'LocalLogin');
     
   });
});

然后这就是我如何获得我的 asyncstorage

const [getData, setGetData] = useState();

const initializeData = async() => {
    const userToken = await AsyncStorage.getItem('user_id');
    if(userToken)
    {
      setGetData(JSON.parse(userToken));
    }
  }

  useEffect(() => {
    initializeData();
  },[]);

useEffect(() => {
    getUserData();
,[navigation,isFocused]);

const getUserData = async() => {
 var formBody = JSON.stringify({email:`${getData.email}`});
 fetch('',{ ... //more codes here
}

我应该从我的 API 获取更新的数据,但它似乎getData是 null 并且它应该可以工作,因为我正在重新渲染组件。Fetch 工作正常,因为我可以登录。我遇到的主要问题是AsyncStorage。有人遇到过这种问题吗?

4

3 回答 3

0

我在我的 adb logcat 上看到它不能存储太多数据

所以我所做的是我砍掉了我的数据并只存储了需要的​​数据。这就是我所做的。

于 2021-09-23T15:57:42.663 回答
0

您有一个竞争条件,其中 initializeData 和 getUserData 都将在挂载时调用,而 getData 尚未设置。

你可以像这样修复比赛。

useEffect(() => {
    if (getData) getUserData();
,[navigation,isFocused,getData]);
于 2021-09-23T03:56:05.540 回答
0

AsyncStorage大小默认设置为6MB,但是当它带有大量数据时,您必须增加大小。

如果您想存储所有数据,您可以更新下面看到的属性。

文件:android/gradle.properties

AsyncStorage_db_size_in_MB=10

或者

AsyncStorage_db_size_in_MB=15

取决于您要存储多少数据。

于 2021-10-28T08:18:32.097 回答