使用异步存储来响应本机保存更改开关

时间:2020-01-22 18:58:59

标签: reactjs react-native switch-statement asyncstorage

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

1 个答案:

答案 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)