首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将props从根组件传递到AppNavigator

将props从根组件传递到AppNavigator
EN

Stack Overflow用户
提问于 2019-07-09 01:41:01
回答 1查看 228关注 0票数 0

我在App root组件中有一个AppNavigator。我需要根据根组件的属性来更改AppNavigator中的initialRouteName。在根组件中,当用户是signIn时,我将凭据保存在Keychain中。我需要这样做: userLoggedIn?HomeScreen : AuthScreen,你能告诉我怎样才能把userLoggedIn道具从根应用组件发送到AppNavigator吗?

App.js:

代码语言:javascript
复制
import React, { useState, useEffect } from 'react'
import { ApolloProvider } from 'react-apollo'
import { ApolloProvider as ApolloHooksProvider } from 'react-apollo-hooks'
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
import { setContext } from 'apollo-link-context'
import { InMemoryCache } from 'apollo-cache-inmemory'
import * as Keychain from 'react-native-keychain'
import AppNavigator from './AppNavigator'

const httpLink = createHttpLink({
  uri: 'http://localhost:4000'
})

const authLink = setContext(async (_, { headers }) => {
  const tokens = await Keychain.getGenericPassword()
  const accessToken = tokens.accessToken
  return {
    headers: {
      ...headers,
      authorization: accessToken ? `Bearer ${accessToken}` : ''
    }
  }
})

const client = new ApolloClient({
  link: authLink.concat(httpLink),
  cache: new InMemoryCache(),
  connectToDevTools: true
})

const App = () => {
  const [loggedIn, setLoggedIn] = useState(false)
  useEffect(async () => {
    const tokens = await Keychain.getGenericPassword()
    const accessToken = tokens.accessToken
    if (accessToken) {
      setLoggedIn(true)
    }
  })
  return (
    <ApolloProvider client={client}>
      <ApolloHooksProvider client={client}>
        <AppNavigator userLoggedIn={loggedIn} />
      </ApolloHooksProvider>
    </ApolloProvider>
  )
}

export default App

AppNavigator.js:

代码语言:javascript
复制
import { createStackNavigator, createAppContainer } from 'react-navigation'
import { HomeScreen, AuthScreen } from './screens'

const AppNavigator = createStackNavigator(
  {
    AUTH_SCREEN: AuthScreen,
    HOME: HomeScreen
  },
  {
    initialRouteName: 'AUTH_SCREEN',
    headerMode: 'none'
  }
)

export default createAppContainer(AppNavigator)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-09 02:35:18

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56940056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档