React native 响应本机存储数据异步存储

React native 响应本机存储数据异步存储,react-native,React Native,你好,我用的是react native。我想将开关按钮保存为true或false,但它没有。当我打开和关闭应用程序时,不会加载记录的数据。问题在哪里。它不保存真或假 class LoginForm extends Component { toggleRememberMe = value => { this.setState({ rememberMe: value }) if (value === true) { this.rememberUser(); } e

你好,我用的是react native。我想将开关按钮保存为true或false,但它没有。当我打开和关闭应用程序时,不会加载记录的数据。问题在哪里。它不保存真或假

class LoginForm extends Component {

  toggleRememberMe = value => {
  this.setState({ rememberMe: value })
    if (value === true) {
    this.rememberUser();
  } else {
    this.forgetUser();
  }
}

rememberUser = async () => {
try {
  await AsyncStorage.setItem('123123', this.state.remem);
} catch (error) {
  // Error saving data
}
};
getRememberedUser = async () => {
try {
  const username = await AsyncStorage.getItem('123123');
  if (username !== null) {
    return username;
  }
} catch (error) {
}
};
forgetUser = async () => {
  try {
    await AsyncStorage.removeItem('123123');
  } catch (error) {
  }
};

constructor(props) {
        super(props)
        const remem = this.getRememberedUser();
     this.state = {
      remem: remem || "", 
      rememberMe: remem ? true : false 
        }
    }
   render() {
        return (<Switch
  value={this.state.rememberMe}
  onValueChange={(value) => this.toggleRememberMe(value)}
  /><Text>Remember Me</Text>);
}
类LoginForm扩展组件{
ToggleMemberme=值=>{
this.setState({rememberMe:value})
如果(值===true){
这个;
}否则{
这个。伪造者();
}
}
rememberUser=async()=>{
试一试{
等待AsyncStorage.setItem('123123',this.state.remem);
}捕获(错误){
//保存数据时出错
}
};
GetMemberedUser=async()=>{
试一试{
const username=await AsyncStorage.getItem('123123');
如果(用户名!==null){
返回用户名;
}
}捕获(错误){
}
};
forgetUser=async()=>{
试一试{
等待AsyncStorage.removeItem('123123');
}捕获(错误){
}
};
建造师(道具){
超级(道具)
const remem=this.getMemberedUser();
此.state={
remem:remem | |“,
记住:记住?对:错
}
}
render(){
返回(this.togglememberme(value)}
/>记住我);
}

您必须在
componentDidMount
中获取MemberedUser()

现在您有一个异步函数,您正试图在异步上下文之外执行该函数

比如:

async componentDidMount() {
  const remem = await this.getRememberedUser();
  if (remem) {
    this.setState({rememberMe: remem})
  }
}

您必须在
componentDidMount
中获取membereduser()

现在您有一个异步函数,您正试图在异步上下文之外执行该函数

比如:

async componentDidMount() {
  const remem = await this.getRememberedUser();
  if (remem) {
    this.setState({rememberMe: remem})
  }
}
您的
rememberUser()
方法可能在状态更新之前被调用<代码>设置状态()是一种异步操作。在
rememberMe
设置为您要设置的值后,尝试更新asyncStore:

    toggleRememberMe = value => {
     this.setState({ rememberMe: value }, ()=>{
     if (value === true) {
     this.rememberUser();
    } else {
    this.forgetUser();
  }
})
}
您的
rememberUser()
方法可能在状态更新之前被调用<代码>设置状态()是一种异步操作。在
rememberMe
设置为您要设置的值后,尝试更新asyncStore:

    toggleRememberMe = value => {
     this.setState({ rememberMe: value }, ()=>{
     if (value === true) {
     this.rememberUser();
    } else {
    this.forgetUser();
  }
})
}

我已经创建了一个供您查看的。基本上,将AsyncStorage移动到componentDidMount并删除了一些内容(例如使用状态设置AsyncStorage,这是必需的,因为setState是异步的,并且您的值不是预期值)

我创建了一个示例供您查看。基本上,将AsyncStorage移动到componentDidMount并删除了一些内容(例如使用状态设置AsyncStorage,这是必需的,因为setState是异步的,并且您的值不能达到预期值)

它确实有效。这就是你所有的密码吗?也许还有别的办法可以用。这就是你所有的密码吗?也许还有别的事