美好的一天,我正在使用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>);
}
答案 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且您的值不可能是期望的)