重定向不适用于 componentWillMount() react-native-router-flux
Redirection not working on componentWillMount() react-native-router-flux
componentWillMount() {
var user = UserService.findAll();
if (user.length > 0) Actions.home();
}
其中 'home' 是我 router.js
中的 Scene
键。
另一方面
onButtonPress() {
var user = UserService.findAll();
if (user.length > 0) Actions.home();
}
工作得很好!
我的router.js
const RouterComponent = () => {
return (
<Router showNavigationBar={false}>
<Stack key="root">
<Scene key="auth" hideNavBar={true}>
<Scene key="login" component={Login} />
</Scene>
<Scene key="home" component={Home} hideNavBar={true}/>
<Scene key="pdf" component={Pdf} hideNavBar={true} />
</Stack>
</Router>
);
};
export default RouterComponent;
好的,据我所知,您正在尝试获取或检查 UserService 中用户数据的本地存储。我的建议是不要尝试使用生命周期挂钩 componentWillMount
停止渲染或 "mounting" 组件。相反,您可以在 UserService.findAll()
查找用户(由状态控制)时呈现 ActivityIndicator
,因为您不希望在 UserService 完成用户查找过程之前呈现组件。
类似的东西
在您的构造函数中分配一个值,该值将用于呈现 ActivityIndicator
或组件(我假设是 login
组件)。我们称它为 searching
例如:
// in your constructor
this.state = {
searching : true;
}
// assuming it is an async function
async componentWillMount(){
var user = await UserService.findAll();
if (user.length > 0) {
Actions.home({type : ActionConst.REPLACE}); // no need to update the state here as we will navigate to another screen resetting the navigation stack
}else {
this.setState({
searching : false
});
}
}
// other methods etc
render(){
return this.state.searching ? <ActivityIndicator /> : <Login />
}
当然这是渲染方法的抽象,但你明白了要点:)
on
道具对我有用
我需要条件导航,所以我使用 success
和 failure
属性以及要导航的场景名称
我在下面发布我的代码,希望它能帮助别人
<Scene
key="login"
component={Login}
on={() => UserService.findAll().length > 0}
success={()=>
Actions.replace("home")
}
failure="login"
/>
componentWillMount() {
var user = UserService.findAll();
if (user.length > 0) Actions.home();
}
其中 'home' 是我 router.js
中的 Scene
键。
另一方面
onButtonPress() {
var user = UserService.findAll();
if (user.length > 0) Actions.home();
}
工作得很好!
我的router.js
const RouterComponent = () => {
return (
<Router showNavigationBar={false}>
<Stack key="root">
<Scene key="auth" hideNavBar={true}>
<Scene key="login" component={Login} />
</Scene>
<Scene key="home" component={Home} hideNavBar={true}/>
<Scene key="pdf" component={Pdf} hideNavBar={true} />
</Stack>
</Router>
);
};
export default RouterComponent;
好的,据我所知,您正在尝试获取或检查 UserService 中用户数据的本地存储。我的建议是不要尝试使用生命周期挂钩 componentWillMount
停止渲染或 "mounting" 组件。相反,您可以在 UserService.findAll()
查找用户(由状态控制)时呈现 ActivityIndicator
,因为您不希望在 UserService 完成用户查找过程之前呈现组件。
类似的东西
在您的构造函数中分配一个值,该值将用于呈现 ActivityIndicator
或组件(我假设是 login
组件)。我们称它为 searching
例如:
// in your constructor
this.state = {
searching : true;
}
// assuming it is an async function
async componentWillMount(){
var user = await UserService.findAll();
if (user.length > 0) {
Actions.home({type : ActionConst.REPLACE}); // no need to update the state here as we will navigate to another screen resetting the navigation stack
}else {
this.setState({
searching : false
});
}
}
// other methods etc
render(){
return this.state.searching ? <ActivityIndicator /> : <Login />
}
当然这是渲染方法的抽象,但你明白了要点:)
on
道具对我有用
我需要条件导航,所以我使用 success
和 failure
属性以及要导航的场景名称
我在下面发布我的代码,希望它能帮助别人
<Scene
key="login"
component={Login}
on={() => UserService.findAll().length > 0}
success={()=>
Actions.replace("home")
}
failure="login"
/>