[英]How to access navigation prop in createStackNavigator component in react-native
我有一個簽名屏幕組件,我想在用戶未登錄時默認顯示該組件。登錄后我想重定向到主頁。 下面是createStackNavigator
設置:
const MainStack = createStackNavigator(
{
Home: { screen: TabStack },
User: { screen: UserProfile },
Login: {screen: SignIn },// Want to access navigation prop in this component
Post: { screen: Post },
},
{
initialRouteName: 'Login',
mode: 'modal',
headerMode: 'none'
}
)
我在主要組件App.tsx 中使用 Graphql 和 react-apollo
class App extends React.Component<any,any> {
render() {
return (<ApolloProvider client={client}>
<RootWithSession/>
</ApolloProvider>)
}
}
我想訪問SignIn
組件中的訪問導航道具怎么做?
簡短的回答,您無法在 createStackNavigator 中訪問導航道具。 有2種方式
您可以升級到react-navigation-v5,因為 api 更好,您可以在構建導航器時訪問 props 或 state。
在SignIn
組件中添加一些邏輯以導航到HomePage
或其他內容
我能夠通過創建兩個單獨的導航堆棧來訪問 Navigation 對象。 一個用於登錄路由,另一個用於登錄路由,如下所示:
const MainStack = createStackNavigator(
{
Home: { screen: TabStack },
User: { screen: UserProfile },
Comments: { screen: Comments },
Post: { screen: Post }
},
{
initialRouteName: 'Home',
mode: 'modal',
headerMode: 'none'
}
)
const LoginStack = createStackNavigator(
{
Auth: { screen: SignIn }
},
{
initialRouteName: 'Auth',
mode: 'modal',
headerMode: 'none'
}
)
const AppContainer = createAppContainer(MainStack);
const LoginContainer = createAppContainer(LoginStack);
在渲染方法中,我使用screenProps
來提供導航道具:
render() {
console.log(this.state.userId)
return (this.state.isLoggedIn?(<ApolloProvider client={client}>
<AppContainer screenProps={{client,onLogout:this.onLogOut,loginId:this.state.userId}}/>
</ApolloProvider>)
:(
<ApolloProvider client={client}>
<LoginContainer screenProps={{client,onLogin:this.onLogin,loginId:this.state.userId}} />
</ApolloProvider>
))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.