Передайте реквизиты из корневого компонента в AppNavigator

У меня есть AppNavigator внутри корневого компонента приложения. Мне нужно изменить initialRouteName в AppNavigator в зависимости от реквизита корневого компонента. В корневом компоненте, когда пользователь входит в систему, я сохраняю учетные данные в связке ключей. И мне нужно сделать так: пользовательВошел в систему ? Домашний экран: AuthScreen Подскажите, пожалуйста, как я могу отправить реквизиты userLoggedIn из корневого компонента приложения в AppNavigator?

App.js:

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:

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)

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
0
232
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны использовать навигатор переключателей. https://reactnavigation.org/docs/en/switch-navigator.html#docsNav.

Другие вопросы по теме