Инвариантное нарушение: навигационный указатель отсутствует для этого навигатора
Я получаю это сообщение, когда пытаюсь начать свое собственное родное приложение. Обычно этот вид формата работает на другой многоэкранной навигации, но как-то не работает в этом случае.
Вот ошибка:
Invariant Violation: The navigation prop is missing for this navigator. In
react-navigation 3 you must set up your app container directly. More info:
https://reactnavigation.org/docs/en/app-containers.html
Вот мой формат приложения:
import React, {Component} from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { createStackNavigator } from 'react-navigation';
import Login from './view/login.js'
import SignUp from './view/signup.js'
const RootStack = createStackNavigator(
{
Home: {
screen: Login
},
Signup: {
screen: SignUp
}
},
{
initialRouteName: 'Home'
}
);
export default class App extends React.Component {
render() {
return <RootStack />;
}
}
Ответы
Ответ 1
React Navigation 3.0 содержит ряд критических изменений, включая явный контейнер приложения, необходимый для корневого навигатора.
В прошлом любой навигатор мог выступать в качестве контейнера навигации на верхнем уровне вашего приложения, поскольку все они были заключены в "контейнеры навигации". Контейнер навигации, теперь известный как контейнер приложения, является компонентом высшего порядка, который поддерживает состояние навигации вашего приложения и обрабатывает взаимодействие с внешним миром, чтобы превратить связывание событий в действия навигации и т.д.
В v2 и более ранних версиях контейнеры в React Navigation автоматически предоставляется функциями create * Navigator. Начиная с версии 3 Вы обязаны использовать контейнер напрямую. В v3 мы также переименованы createNavigationContainer для созданияAppContainer.
Также обратите внимание, что если вы сейчас используете v4, навигаторы были перенесены в отдельный репозиторий. Теперь вам нужно установить и импортировать из 'react-navigation-stack'
. Например import { createStackNavigator } from 'react-navigation-stack'
Решение ниже для v3.
import {
createStackNavigator,
createAppContainer
} from 'react-navigation';
const MainNavigator = createStackNavigator({...});
const App = createAppContainer(MainNavigator);
Более подробный пример кода:
import {
createStackNavigator,
createAppContainer
} from 'react-navigation';
import Login from './view/login.js'
import SignUp from './view/signup.js'
const RootStack = createStackNavigator({
Home: {
screen: Login
},
Signup: {
screen: SignUp
}
});
const App = createAppContainer(RootStack);
export default App;
Ответ 2
@Tom Dickson что-то вроде этого:
import React, { Component } from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import ScreenOne from './ScreenOne';
import ScreenTwo from './ScreenTwo';
const NavStack = createStackNavigator({
ScreenOne: {
screen: ScreenOne,
},
ScreenTwo: {
screen: ScreenTwo,
},
});
const App = createAppContainer(NavStack);
export default App;
Затем со ссылкой на
<App />
Ответ 3
Создайте новый файл ScreenContainer.js (вы можете выбрать имя). Затем в файле ScreenContainer добавьте:
import React, { Component } from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import MainScreen from './MainScreen';
import AboutScreen from './AboutScreen';
const NavigationStack = createStackNavigator({
Main: {
screen: MainScreen,
},
About: {
screen: AboutScreen,
},
});
const Container = createAppContainer(NavigationStack);
export default Container;
Затем в вашем файле App.js:
import Container from './ScreenContainer';
class App extends Component {
render() {
return (
<Container />
);
}
}
Ответ 4
Здесь другой способ
import React, {Component} from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { createStackNavigator,createAppContainer } from 'react-navigation';
import Login from './view/login.js'
import SignUp from './view/signup.js'
const RootStack = createStackNavigator(
{
Home: {
screen: Login
},
Signup: {
screen: SignUp
}
},
{
initialRouteName: 'Home'
}
);
class App extends React.Component {
render() {
return <RootStack />;
}
}
export default createAppContainer(RootStack);
Ответ 5
import React, { Component } from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import Home from './home';
import Details from './details';
const Root = createStackNavigator({
home: {
screen: Home,
},
details: {
screen: Details,
},
});
const container = createAppContainer(Root);
export default container;
Ответ 6
У меня был код внизу
export default class App extends React.Component {
render() {
return (
<View >
<SimpleApp style={{ width: Dimensions.get("window").width }} />
</View>
);
}
}
Я просто заменил его, и он работал как шарм. Определенно, это потому, что обновления в реагирующей навигационной библиотеке:
const App = createAppContainer(SimpleApp);
export default App;
Также я включил библиотеку createAppContainer в реагирующую навигацию вверху.
Ответ 7
const AppNavigator = createStackNavigator({
Home: { screen: Home },
Friends: { screen: Friends },
});
Просто я сделал
const App = createAppContainer(AppNavigator);
export default App;
Вместо
export default AppNavigator;
Ответ 8
это мой файл App.js для адаптивного приложения. где я могу включить createAppContainer (AppDrawerNavigator)? и как это должно выглядеть? я новичок в реагировании
import React from 'react';
import {
StyleSheet, View, Text,
SafeAreaView, ScrollView, Dimensions
} from 'react-native';
import { createDrawerNavigator, DrawerItems, createAppContainer } from 'react-
navigation';
import HomeScreen from './src/components/HomeScreen';
import Settings from './src/components/Settings';
import { Header, Left, Right, Icon } from 'native-base';
export default class App extends React.Component {
render() {
return (
<AppDrawerNavigator />
);
}
}
const CustomDrawerComponent = (props) => (
<SafeAreaView style={{ flex: 1 }}>
<ScrollView>
<DrawerItems {...props} />
</ScrollView>
</SafeAreaView>
)
const AppDrawerNavigator = createDrawerNavigator({
Home: HomeScreen,
Settings: Settings
}, {
contentComponent: CustomDrawerComponent
})
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
}
})
Ответ 9
Этот должен создать нижний навигатор с двумя вкладками:
import {createBottomTabNavigator, createAppContainer} from 'react-navigation';
export class Home extends Component{
//...
}
export class Settings extends Component{
//...
}
const navig = createBottomTabNavigator({
Home: Home,
Settings: Settings
});
const App = createAppContainer(navig);
export default App;
Ответ 10
Я боролся с прошлыми днями. Возможно, вы тоже пытались решить, если и если вы удалили реакционную навигацию из package.json и установили с помощью npm, проверьте ваш проект резервного копирования и посмотрите версию навигации и попробуйте добавить То же самое и удалите node-modules и выполните npm install.
Надеюсь, что это работает.
Удачи, ломая голову с React-Native :-)