反应本机保存数据AsyncStorage

时间:2019-10-23 13:35:34

标签: react-native

美好的一天,我正在使用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>);
}

3 个答案:

答案 0 :(得分:0)

您将必须在componentDidMount中获得getRememberedUser()。

现在,您正在尝试在异步上下文之外执行异步函数。

类似的东西:

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

答案 1 :(得分:0)

您的rememberUser()方法可能在状态更新之前被调用。 setState()是异步操作。将rememberMe设置为您将其设置为以下值后,尝试更新asyncStore:

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

答案 2 :(得分:0)

我创建了一个sandbox,供您查看。基本上,将AsyncStorage移到componentDidMount并删除了一些东西(例如使用状态来设置AsyncStorage,这是必需的,因为setState是async且您的值不可能是期望的)