React Native: Invariant Violation: для этого навигатора отсутствует навигационная опора - PullRequest
0 голосов
/ 04 декабря 2018

Мой код выглядит следующим образом:

import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View} from 'react-native';
import {LoginNavigator} from './src/components/login/LoginNavigator'
import {MainNavigator} from './src/components/main/MainNavigator'
import FBSDK from 'react-native-fbsdk'
import {createSwitchNavigator} from 'react-navigation'

const { AccessToken } = FBSDK

export default class App extends Component {
  constructor(props) {
    super(props)

    this.state = {
      accessToken: null
    }
  }

  componentDidMount() {
    AccessToken.getCurrentAccessToken()
    .then((data) => {
      this.setState({
        accessToken: data.accessToken
      })
    })
    .catch(error => {
      console.log(error)
    })
  }

  render() {
    const Navigator = makeRootNavigator(this.state.accessToken)
    return <Navigator />
  }
}

const makeRootNavigator = (isLoggedIn) => {
  return createSwitchNavigator(
    {
      LoginNavigator: {
        screen: LoginNavigator
      },
      MainNavigator: {
        screen: MainNavigator
      }
    },
    {
      initialRouteName: isLoggedIn ? "MainNavigator" : "LoginNavigator"
    }
  )
}

, и я получаю сообщение об ошибке выше.Так как мои навигаторы зависят от переменных, созданных в construtor, мне нужно было сделать это через render ().Следующая реагирующая нативная документация для контейнеров приложений не помогла.

1 Ответ

0 голосов
/ 04 декабря 2018

В реакции-навигации v3 вы должны заключить makeRootNavigator в createAppContainer.Измените свой код на:

render() {
   const Navigator = createAppContainer(makeRootNavigator(this.state.accessToken));
   return <Navigator />
}

и не забудьте импортировать createAppContainer поверх файла

import {createSwitchNavigator, createAppContainer} from 'react-navigation'
...