如果用户未登录并且如果用户登录我正在尝试呈现Home组件,我正在尝试呈现Signin组件。在Signin组件上将 Storage 'isLIn'设置为'true' On Signout [from home component] 将 Storage 'isLIn'设置为'false'并且每次 React-Native App 打开时都会检查 Storage 并将 State 设置为 Storage 的值。
请看代码:
import React, { Component } from 'react';
import { AsyncStorage } from 'react-native';
import { Scene, Router } from 'react-native-router-flux';
import Login from './login_component';
import Home from './home_component';
var KEY = 'isLIn';
export default class main extends Component {
state = {
isLoggedIn: false
};
componentWillMount() {
this._loadInitialState().done();
}
_loadInitialState = async () => {
try {
let value = await AsyncStorage.getItem(KEY);
if (value !== null && value === 'true') {
this.setState({ isLoggedIn: true });
} else {
this.setState({ isLoggedIn: false });
}
} catch (error) {
console.error('Error:AsyncStorage:', error.message);
}
};
render() {
const _isIn = (this.state.isLoggedIn===true) ? true : false;
return (
<Router>
<Scene key="root" hideNavBar hideTabBar>
<Scene key="Signin" component={Login} title="Signin" initial={!_isIn} />
<Scene key="Home" component={Home} title="Home" initial={_isIn}/>
</Scene>
</Router>
);
}
}
我不知道为什么,但在 Storage 获得价值之前先查看渲染。根据React_Doc所说的 react-native render() 的生命周期,仅在componentWillMount()之后执行 。
我正在使用AsyncStorage来设置和删除存储,还使用React-Native-Router-Flux进行路由。
我已经尝试过解决方案: