Фабрика native.createnavigator не является функцией - PullRequest
10 голосов
/ 06 февраля 2020

Я собираюсь разработать навигацию по ящикам в моем проекте.

Я установил это с помощью этой команды:

npm install @react-navigation/drawer

Затем импортировал это в App.js

import { createDrawerNavigator } from '@react-navigation/drawer';
import { NavigationContainer } from '@react-navigation/native';

Это мой package.json контент:

"@react-native-community/masked-view": "^0.1.6",
"@react-navigation/drawer": "^5.0.0",
"react": "16.9.0",
"react-native": "0.61.5",
"react-native-gesture-handler": "^1.5.6",
"react-native-reanimated": "^1.7.0",
"react-native-screens": "^2.0.0-beta.1",
"react-native-view-shot": "^3.0.2",
"react-navigation": "^4.1.1",
"react-navigation-stack": "^2.1.0",

Это мой App.js контент:

const App = () => {
  const Drawer = createDrawerNavigator();
  return (
    <View style={styles.container}>
      <NavigationContainer>
        <Drawer.Navigator initialRouteName="login">
          <Drawer.Screen name="login" component={Login} />
          <Drawer.Screen name="second" component={SecondPage} />
        </Drawer.Navigator>
      </NavigationContainer>
    </View>
  )
};

Я должен сказать, что я уже создали Login и SecondPage компоненты и объявили их в файле с именем root.js

import { createAppContainer } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
import { Login, Header, SecondPage, Footer, ThirdPage } from './components/index';

const AppNavigator = createStackNavigator({
  login: { screen: Login },
  header: { screen: Header },
  second: { screen: SecondPage },
  footer: { screen: Footer },
  third: { screen: ThirdPage }
}, {
  initialRouteName: 'login',
  headerMode: 'none',
  mode: 'modal',
}, {});

export default createAppContainer(AppNavigator);

Но я получаю сообщение об ошибке (следующий экран).

Как я могу исправить это?

enter image description here

index. js

export * from './login';
export * from './header';
export * from './secondpage';
export * from './footer';
export * from './thirdpage';

Ответы [ 4 ]

16 голосов
/ 06 февраля 2020

Вы объединяете React Navigation 4 и React Navigation 5 в своем проекте. Это недопустимо.

Пакеты React Navigation 4: react-navigation, react-navigation-stack, react-navigation-drawer et c.

Пакеты React Navigation 5: @react-navigation/native, @react-navigation/stack, @react-navigation/drawer et c.

Следуйте официальным документам и используйте правильную версию и синтаксис пакетов https://reactnavigation.org/docs/en/getting-started.html

В основном удалите ваш код в root.js и создайте стековый навигатор, как здесь https://reactnavigation.org/docs/en/stack-navigator.html

0 голосов
/ 07 марта 2020

попробуйте установить: пряжа добавить реактив-навигация-стек

и зависимости: пряжа добавить реактив-родной-жест-обработчик реагировать-родной-реанимировать реагировать-родной-экраны реагировать-родной-безопасный-контекст-области-контекста @ response-native-community / masked-view

в ваших маршрутах: импортировать {createStackNavigator} из 'response-navigation-stack';

0 голосов
/ 06 февраля 2020

Индекс. js содержание

export * from './login';
export * from './header';
export * from './secondpage';
export * from './footer';
export * from './thirdpage';
0 голосов
/ 06 февраля 2020

Я не понимаю, что вы пытаетесь сделать сейчас. Я думаю, что вы хотите добавить ящик Navigator.

Ваша проблема в том, что вы должны использовать один контейнер, но у вас есть два, а createStackNavigator имеет два параметра, но у вас есть три.

createStackNavigator (RouteConfigs, StackNavigatorConfig);

Мне кажется, ваша структура навигатора должна выглядеть следующим образом.

Drawers. js

export default const Drawers = () => {
  const Drawer = createDrawerNavigator();
  return (
        <Drawer.Navigator initialRouteName="login">
          <Drawer.Screen name="login" component={Login} />
          <Drawer.Screen name="second" component={SecondPage} />
        </Drawer.Navigator>
  )
};

Приложение. js

import Drawers from "./Drawers"
...

const AppNavigator = createStackNavigator({
  login: { screen: Drawers },
  header: { screen: Header },
  second: { screen: SecondPage },
  footer: { screen: Footer },
  third: { screen: ThirdPage }
}, {
  initialRouteName: 'login',
  headerMode: 'none',
  mode: 'modal',
});

export default createAppContainer(AppNavigator)

index. js

import Login from './login';
import Header from './header';
import SecondPage from './secondpage';
import Footer from './footer';
import ThirdPage from './thirdpage';

export { Login, Header, SecondPage, Footer, ThirdPage}

ИЛИ

Эта проблема может быть проблемой совместимости с версией. Версии React-Navigation и StackNavigator должны быть обновлены.

...