AsyncStorage 在发布时不工作,但在调试时工作(React Native)
AsyncStorage not working on release but working on debug (React Native)
"@react-native-async-storage/async-storage": "1.15.5",
"react": "17.0.1",
"react-native": "0.64.2",
下面是我如何使用 Async
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');
});
});
然后这就是我获取异步存储的方式
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
为空,而且它应该可以工作,因为我正在重新渲染组件。 Fetch 工作正常,因为我可以登录。我遇到的主要问题是 AsyncStorage
。有人遇到过这种问题吗?
您有一个竞争条件,其中 initializeData 和 getUserData 都将在装载时调用,而 getData 尚未设置。
你可以这样解决比赛。
useEffect(() => {
if (getData) getUserData();
,[navigation,isFocused,getData]);
我在我的 adb 上看到它 logcat 它不能存储太多数据
所以我所做的是切碎我的数据并只存储需要的数据。我就是这么做的。
AsyncStorage 大小默认设置为 6MB,但当它带有大量数据时,您必须增加大小。
如果您想存储所有数据,您可以更新如下所示的 属性。
文件:android/gradle.properties
AsyncStorage_db_size_in_MB=10
或
AsyncStorage_db_size_in_MB=15
取决于您要存储多少数据。
"@react-native-async-storage/async-storage": "1.15.5",
"react": "17.0.1",
"react-native": "0.64.2",
下面是我如何使用 Async
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');
});
});
然后这就是我获取异步存储的方式
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
为空,而且它应该可以工作,因为我正在重新渲染组件。 Fetch 工作正常,因为我可以登录。我遇到的主要问题是 AsyncStorage
。有人遇到过这种问题吗?
您有一个竞争条件,其中 initializeData 和 getUserData 都将在装载时调用,而 getData 尚未设置。
你可以这样解决比赛。
useEffect(() => {
if (getData) getUserData();
,[navigation,isFocused,getData]);
我在我的 adb 上看到它 logcat 它不能存储太多数据
所以我所做的是切碎我的数据并只存储需要的数据。我就是这么做的。
AsyncStorage 大小默认设置为 6MB,但当它带有大量数据时,您必须增加大小。
如果您想存储所有数据,您可以更新如下所示的 属性。
文件:android/gradle.properties
AsyncStorage_db_size_in_MB=10
或
AsyncStorage_db_size_in_MB=15
取决于您要存储多少数据。