react-native中AsyncStorage存储为什么会失败?

发布于 2022-09-12 23:12:38 字数 1370 浏览 20 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

相守太难 2022-09-19 23:12:38

时机可能不对,
你是在 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()获取

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文