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值

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