我一直在关注React Native上的文档构建我的应用程序。
我正在尝试登录用户并能够检查用户是否已登录或用户数据是否存在。
这是我到目前为止所尝试的,但我真的看不出我做错了什么。
var starterApp = React.createClass(
{
user:{},
getInitialState()
{
console.log('initial state');
return {isLoggedIn:this.isLoggedIn ? this.isLoggedIn : 0};
},
componentWillMount()
{
console.log('will mount');
console.log(this.state.isLoggedIn);
//this.state.isLoggedIn = 1;
//this.setState({isLoggedIn:1});
//this.user= {name:'john', lastName:'doe'};
},
observe(){
console.log('observe');
},
componentDidMount()
{
console.log('mounted');
},
render()
{
console.log('rendered');
return (
<View style={styles.container}>
<Text>
{'YOOOO'}
</Text>
<Text>
{this.state.isLoggedIn}
</Text>
</View>
);
}
});
在 componentWillMount 函数中,我设置状态然后将其注释掉。之后,当我刷新时,它会回到初始状态。我如何保留用户的数据以供下次刷新,直到我将其注销。需要坚持。
提前致谢。
最佳答案
AsyncStorage这是要走的路。
您可以使用 get/set 方法根据您的 session 信息设置存储 key 。我开始尝试使用 localStorage 来存储状态,但是虽然这适用于调试 session (如果您使用 chrome/safari 进行调试),但当您在实际设备上运行应用程序时它不起作用。
一个简单的方法是使用类似 -
AsyncStorage.setItem('userSession', JSON.stringify(sessionData));
当您想要保存 session 时 -
AsyncStorage.getItem('userSession',
(rawData) => {
this.setState({session: JSON.parse(rawData)});
},
(error) => {
// whatever you want to do here.
}
);`
当您想要恢复它时。
我目前在我的应用程序中使用 Fluxxor,因此我可以通过使用 AsyncStorage.multiSet
循环浏览它们来选择要保存的存储。我还可以在应用程序初始化时使用 AsyncStorage.multiGet
恢复所有这些内容。
我要提醒您的唯一一件事是存储是异步的,因此如果您遇到错误,可能是因为您在 AsyncStorage 给您响应之前已经初始化了应用程序的一部分。对于您正在处理的上述应用程序代码,您可能会在没有数据的情况下呈现应用程序的短暂时间,因此您可能需要某种占位符来表示该加载时间,或延迟呈现。
关于ios - 检查用户是否登录/保留用户信息 react native ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31796414/