react-native - 使用 Redux 成功登录后如何导航到 App stack?
问题描述
我有一个切换导航器
// Add switch navigator
export default createAppContainer(
Config.Login.RequiredLogin
? createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
App: DrawerNavigator, // App Stack
Auth: AuthNavigator, // Auth Stack
},
{
initialRouteName: "AuthLoading",
}
)
: DrawerNavigator
);
在首次应用启动期间,它会显示“Auth”堆栈的登录屏幕。按下登录按钮后,它将通过 fetch 调用登录 API 并更新 redux 用户。当有用户时,我应该如何导航到“应用程序”堆栈?
我试图将它放在 getDerivedStateFromProps 中,但它给出了错误
TypeError: undefined is not an object (评估 'this.props.navigation')
static getDerivedStateFromProps(nextProps, prevState) {
if (prevState.userToken !== nextProps.userToken) {
this.props.navigation.navigate("App");
return {
userToken: nextProps.userToken
};
}
// Return null to indicate no change to state.
return null;
}
我应该在 render() 中放置一个标志并在那里导航吗?抱歉,我是本地反应新手。
render() {
const { userToken } = this.props
if(userToken){
this.props.navigation.navigate("App");
}
... other code for rendering login view
}
getDerivedStateFromProps 的主要目的是什么?
解决方案
getDerivedStateFromProps 应该用于更新关于 newprops 的状态。它不应该用于重定向目的。您应该使用componentdidupdate
尝试这个
componentDidUpdate() {
const { userToken } = this.props
if(userToken){
this.props.navigation.navigate("App");
}
}
推荐阅读
- macos - Mac:执行 Vagrant 使用的 CLI `VBoxManage` 时出错
- ms-access - Access 应用程序在常规 Access 2016 中完美运行,但在运行时 Access 中出现错误
- c# - 将带有 linq 的表加入到类中的对象列表中
- ssl - 我在 Google Cloud 托管上的 SSL 证书在哪里?
- ruby-on-rails - Rails has_one:检查是否有新关联
- cocoa - NSCalendarUnitEra 一般情况下我应该关心吗?
- php - 如何在 PHP/Laravel 中删除多个值为 0 的数组
- mongodb - 无法从 Ubuntu 安装/删除任何东西
- android - 如何通过 URL 将图像下载到内部存储器?
- sql - 从 dt=2018-12-01T18:23:59.000Z 到 dt 的 Hive 日期转换 - 5 小时,格式为 12/1/2018 13:23(即 'MM/dd/yyyy hh:mm' )