react-native中AsyncStorage存储为什么会失败?
My.js
`componentDidMount(){
AsyncStorage.getItem('Login',(value) => {
if(value != null){
console.log(value);
}else{
AsyncStorage.setItem('Login','false',()=>{
console.log('初始化未登录状态');
})
}
})
}`
login.js
`<
TextInput
onChangeText = {
(value)=>{
this.setState({
data:value
},()=>{
if(this.state.data == this.props.data){
AsyncStorage.setItem('Login','true',()=>{
console.log('更新成功');
this.props.onChangeLogin('true');
Actions.mylogin();
})
}
})
}}
placeholder = '在此输入'
style={{borderWidth:1,
borderColor:'black',
width:Dimensions.get('window').width * 0.3,
height:Dimensions.get('window').height * 0.05,
marginTop:20}}>
</TextInput>`
我想实现未登录my界面初始化存储Login为false,登陆后为true,但是不知道为什么存储不进去,每次都是null值
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
时机可能不对,
你是在 Login.js中 setState 的回调函数中调用
AsyncStorage.setItem()
存储Login
的。这会在login.js此次更新渲染完成后才会执行。按照一般的APP业务设计,初次进入应该是先加载 My.js,如果发现未登录,再跳转到 Login.js进行登录操作,登录完毕后再回到My.js。
如果你这里是这样设计的话,这涉及到路由导航堆栈的路由页面实例复用,你初次加载My.js的时候,在
componentDidMount()
中,Login
肯定是undefined
,后来跳转到Login.js中登录后重新跳转到My.js,此时路由考虑到性能,会卸载Login.js,然后复用一开始的My.js,这就造成了你在componentDidMount()
中永远取不到值,你应该在My.js中使用componentDidUpdate()
获取