我是React Native的新手,我在使用Switch时遇到问题,我想保存更改,暗模式和Switch,当我关闭应用程序并返回时,应该保存我的更改。当我关闭应用程序时,我的开关回到了第一位置,并且暗模式不起作用。我知道我做错了什么,但是我没有移动应用程序,这是我第一次,而且我不知道如何在此应用程序中使用AsyncStorage来解决此问题。有人可以帮我解决这个问题吗?
BeforeEnterEvent
和下一个组件:
import React, { createContext, useState, useEffect } from 'react';
import { AsyncStorage } from 'react-native';
export const DarkModeContext = createContext();
export default function DarkModeContextProvider(props) {
const [switchMode, setSwitchMode] = useState(false);
useEffect(() => {
let switch1 = switchMode;
AsyncStorage.setItem('switch1', JSON.stringify(switch1));
});
const SwitchThis = () => {
setSwitchMode(!switchMode);
};
return (
<DarkModeContext.Provider
value={{
switchMode,
SwitchThis
}}
>
{props.children}
</DarkModeContext.Provider>
);
}
答案 0 :(得分:0)
您正在从“ react-native”导入AsyncStorage,该版本已弃用
使用@react-native-community/react-native-async-storage
npm i @react-native-community/react-native-async-storage
在主屏幕上,您没有调用函数displayData(),因此应该如何在不调用函数的情况下显示数据。
并且我建议为异步存储中的读写操作提供单独的功能,这将帮助您减少代码和时间。
赞:
let storeData=(name, obj)=> {
return new Promise((resolve,reject)=>{
let jsonOfItem = JSON.stringify(obj)
AsyncStorage.setItem(name, jsonOfItem).then(r=>resolve(jsonOfItem))
.catch(e=>reject(e))
})
}
let readData=(name)=> {
return new Promise((resolve,reject)=>{
//we want to wait for the Promise returned by AsyncStorage.setItem()
//to be resolved to the actual value before returning the value
AsyncStorage.getItem(name).then(r=> resolve(JSON.parse(r)) )
.catch(e=>reject(e))
})
}
//Now you can just read write easily in async function like this:
let fetchedData = await readData("key")
//and for storing data.
storeData("key",object)