получение undefined не является функцией (оценка "(0, _reactNavigation.stacknavigator)") в навигации ящика
В моем приложении мне нужна навигация по ящикам, для этого я использую пример кода из этого. Я интегрировал все в свое приложение, но получаю следующую ошибку
undefined не является функцией (оценивает '(0, _reactNavigation.stacknavigator)')
И установил этот тоже.
npm установить реагировать-навигация --save
Но не знаю, почему возникает эта ошибка, поэтому, пожалуйста, объясните мне, как ее устранить.
Это мой app.js
import React, { Component } from 'react';
import { StyleSheet , Platform , View , Text , Image ,
TouchableOpacity , YellowBox } from 'react-native';
import { DrawerNavigator, StackNavigator } from 'react-navigation';
class NavigationDrawerStructure extends Component {
//Structure for the navigatin Drawer
toggleDrawer = () => {
//Props to open/close the drawer
this.props.navigationProps.toggleDrawer();
};
render() {
return (
<View style={{ flexDirection: 'row' }}>
<TouchableOpacity onPress={this.toggleDrawer.bind(this)}>
{/*Donute Button Image */}
<Image
source={require('./image/drawer.png')}
style={{ width: 25, height: 25, marginLeft: 5 }}
/>
</TouchableOpacity>
</View>
);
}
}
class Screen1 extends Component {
//Screen1 Component
render() {
return (
<View style={styles.MainContainer}>
<Text style={{ fontSize: 23 }}> Screen 1 </Text>
</View>
);
}
}
class Screen2 extends Component {
//Screen2 Component
render() {
return (
<View style={styles.MainContainer}>
<Text style={{ fontSize: 23 }}> Screen 2 </Text>
</View>
);
}
}
class Screen3 extends Component {
//Screen3 Component
render() {
return (
<View style={styles.MainContainer}>
<Text style={{ fontSize: 23 }}> Screen 3 </Text>
</View>
);
}
}
const FirstActivity_StackNavigator = StackNavigator({
//All the screen from the Screen1 will be indexed here
First: {
screen: Screen1,
navigationOptions: ({ navigation }) => ({
title: 'Screen1',
headerLeft: <NavigationDrawerStructure navigationProps={navigation} />,
headerStyle: {
backgroundColor: '#FF9800',
},
headerTintColor: '#fff',
}),
},
});
const Screen2_StackNavigator = StackNavigator({
//All the screen from the Screen2 will be indexed here
Second: {
screen: Screen2,
navigationOptions: ({ navigation }) => ({
title: 'Screen2',
headerLeft: <NavigationDrawerStructure navigationProps={navigation} />,
headerStyle: {
backgroundColor: '#FF9800',
},
headerTintColor: '#fff',
}),
},
});
const Screen3_StackNavigator = StackNavigator({
//All the screen from the Screen3 will be indexed here
Third: {
screen: Screen3,
navigationOptions: ({ navigation }) => ({
title: 'Screen3',
headerLeft: <NavigationDrawerStructure navigationProps={navigation} />,
headerStyle: {
backgroundColor: '#FF9800',
},
headerTintColor: '#fff',
}),
},
});
const DrawerNavigatorExample = DrawerNavigator({
//Drawer Optons and indexing
Screen1: { //Title
screen: FirstActivity_StackNavigator,
},
Screen2: {//Title
screen: Screen2_StackNavigator,
},
Screen3: {//Title
screen: Screen3_StackNavigator,
},
});
export default DrawerNavigatorExample;
const styles = StyleSheet.create({
MainContainer: {
flex: 1,
paddingTop: 20,
alignItems: 'center',
marginTop: 50,
justifyContent: 'center',
},
});
И это package.json
{
"name": "DrawerNavigation",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.6.1",
"react-native": "0.57.5",
"react-native-vector-icons": "^6.1.0",
"react-navigation": "^3.0.0"
},
"devDependencies": {
"babel-jest": "23.6.0",
"jest": "23.6.0",
"metro-react-native-babel-preset": "0.49.2",
"react-test-renderer": "16.6.1"
},
"jest": {
"preset": "react-native"
}
}
Если я буду следовать приведенному ниже образцу, тоже получаю ту же ошибку.
https://medium.com/@mehulmistri/drawer-navigation-with-custom-side-menu-react-native-fbd5680060ba
Кто-нибудь может помочь, пожалуйста
Ответы
Ответ 1
Я надеюсь, что этот поможет вам, он помог мне!
App.js
import { createStackNavigator, createAppContainer } from 'react-navigation';
import HomeScreen from './yourScreenPath';
const AppNavigator = createStackNavigator({
Home: { screen: HomeScreen }
});
export default createAppContainer(AppNavigator);
Проверьте ссылку: Реагируйте с навигацией
Редактирование:
Более новые версии не имеют createStackNavigator
, теперь функцию можно найти в React Navigation Stack.
Ответ 2
Используйте createStackNavigator вместо stackNavigator.
Ответ 3
Я наткнулся на это, потому что я получаю то же сообщение об ошибке. Помимо createStackNavigator
в отличие от StackNavigator
. Проблема заключалась в том, что я обновился до 3.x, а новым в 3 является createAppContainer
.
Теперь вместо
export default DrawerNavigatorExample;
тебе нужно иметь
export default createAppContainer(DrawerNavigatorExample)
Надеюсь, это сэкономит кому-то еще час, который я потратил на изучение этого:/
ссылка на документы
Ответ 4
# Use of react-navigation (3.x) version ^3.0.0 #
import {
createDrawerNavigator,
createStackNavigator,
createBottomTabNavigator,
createAppContainer,
} from 'react-navigation';
const AppNavigator = createStackNavigator({
Home: { screen: HomeScreen }
});
export default createAppContainer(AppNavigator);
Ответ 5
Обратитесь к шагам реакции-навигации, тогда это легко.
Посетите https://reactnavigation.org/docs/en/hello-react-navigation.html
import React from 'react';
import { View, Text, Button } from 'react-native';
import { createAppContainer } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
class HomeScreen extends React.Component {
render() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Home Screen</Text>
<Button
title="Go to Profile... again"
onPress={() => this.props.navigation.push('Profile')}
/>
</View>
);
}
}
class ProfileScreen extends React.Component {
render() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Profile Screen</Text>
<Button
title="Go to Home"
onPress={() => this.props.navigation.navigate('Home')}
/>
<Button
title="Go back"
onPress={() => this.props.navigation.goBack()}
/>
</View>
);
}
}
const AppNavigator = createStackNavigator(
{
Home: HomeScreen,
Profile: ProfileScreen
},
{
initialRouteName: 'Home',
}
);
const AppContainer = createAppContainer(AppNavigator);
export default class App extends React.Component {
render() {
return <AppContainer />;
}
}
Ответ 6
Заменить этот код:
import { createDrawerNavigator, createStackNavigator } from 'react-navigation';
С этим импортом вашего проекта:
import { DrawerNavigator, StackNavigator } from 'react-navigation';
Я надеюсь, что это поможет вам!
Ответ 7
Эта проблема может быть связана с тем, что не установлена платформа Android SDK 25. Сделайте следующее:
- Открыть Android Studio
- Открыть диспетчер SDK
- Перейдите на вкладку "Платформы SDK"
- Выберите уровень API для Android версии 7.1.1 (нуга) - 25
- Применять
После установки нажмите OK и повторите попытку для создания проекта.
Ответ 8
вы можете посмотреть здесь пример кода: https://snack.expo.io/@eriveltonelias/stack-actions
Я думаю, проблема заключается в следующем:
- с помощью stackNavigator вы должны использовать createStackNavigator (https://reactnavigation.org/docs/en/stack-navigator.html) и
- вместо drawerNavigator используйте createDrawerNavigator (https://reactnavigation.org/docs/en/drawer-navigator.html)
Ответ 9
в package.json отредактируйте реагирующую навигацию на '^ 2.17.0' СЛЕДУЮЩИЙ перезагрузите ваш компьютер
Ответ 10
Вы должны использовать React.Component вместо Component для всех классов. Я тоже столкнулся с той же проблемой, и теперь она работает с этим небольшим исправлением.
class Screen2 extends React.Component {
//Screen2 Component
render() {
return (
<View style={styles.MainContainer}>
<Text style={{ fontSize: 23 }}> Screen 2 </Text>
</View>
);
}
}
Ответ 11
Попробуй с
Npm я реагировать-навигация@1.0.0- бета .23