Форум для тех, кто программирует под Android
Anonymous
React Navigation: ошибка «Вложенный навигационный контейнер» и приложение зависает на экране загрузки
Сообщение
Anonymous » 25 ноя 2025, 09:59
Окружающая среда
React Native: 0,69
@react-navigation/native: 5.9.8
@react-navigation/stack: 5.14.9
@react-navigation/bottom-tabs: 5.11.15
Проблема
Мое приложение зависает на экране загрузки. Я получаю ошибки о вложенных NavigationContainer и ViewPropTypes.
Сообщения об ошибках
Ошибка вложенного NavigationContainer:
Код: Выделить всё
Error: Looks like you have nested a 'NavigationContainer' inside another.
Normally you need only one container at the root of the app.
Код: Выделить всё
Invariant Violation: ViewPropTypes has been removed from React Native.
Migrate to ViewPropTypes exported from 'deprecated-react-native-prop-types'
Моя структура кода
App.tsx:
Код: Выделить всё
import React from 'react';
import { NavigationContainer, useLinking } from '@react-navigation/native';
import MainScreen from './screens/MainScreen';
export default function App() {
const ref = React.useRef(null);
const [isReady, setIsReady] = React.useState(false);
const [initialState, setInitialState] = React.useState();
const { getInitialState } = useLinking(ref, {
prefixes: ['myapp://'],
config: {
screens: {
Home: 'home',
},
},
});
React.useEffect(() => {
getInitialState()
.then(state => {
if (state !== undefined) {
setInitialState(state);
}
})
.finally(() => {
setIsReady(true);
});
}, [getInitialState]);
if (!isReady) {
return Loading...;
}
return (
);
}
MainScreen.tsx:
Код: Выделить всё
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();
export default function MainScreen() {
return (
);
}
HomeScreen.tsx:
Код: Выделить всё
import React from 'react';
import { View, Text } from 'react-native';
export default function HomeScreen() {
return (
Home Screen
);
}
Что я пробовал
Удаление NavigationContainer из MainScreen — возникла ошибка «Не удалось зарегистрировать навигатор»
Использование ссылки вместо useLinking — все равно зависает при загрузке
Установка устаревших-реагирующих-native-prop-types — ошибка ViewPropTypes сохраняется
Вопросы
Как мне структурировать навигацию с помощью React Navigation 5.9.8?
Следует ли использовать useLinking или ссылку?
Где должен находиться NavigationContainer?
Как исправить ошибку ViewPropTypes?
Дополнительный контекст
Приложение работало над более старая версия React Native (0.63)
Недавно обновлена до RN 0.69
На данный момент необходимо поддерживать React Navigation 5.x (невозможно обновить до v6)
Подробнее здесь:
https://stackoverflow.com/questions/798 ... loading-sc
1764053998
Anonymous
Окружающая среда [list] [*]React Native: 0,69 [*]@react-navigation/native: 5.9.8 [*]@react-navigation/stack: 5.14.9 [*]@react-navigation/bottom-tabs: 5.11.15 [/list] Проблема Мое приложение зависает на экране загрузки. Я получаю ошибки о вложенных NavigationContainer и ViewPropTypes. Сообщения об ошибках [list] [*][b]Ошибка вложенного NavigationContainer:[/b] [/list] [code]Error: Looks like you have nested a 'NavigationContainer' inside another. Normally you need only one container at the root of the app. [/code] [list] [*][b]Ошибка ViewPropTypes:[/b] [/list] [code]Invariant Violation: ViewPropTypes has been removed from React Native. Migrate to ViewPropTypes exported from 'deprecated-react-native-prop-types' [/code] [list] [*][b]Ошибка свойства:[/b] [/list] [code]Property 'getInitialState' doesn't exist [/code] Моя структура кода [b]App.tsx:[/b] [code]import React from 'react'; import { NavigationContainer, useLinking } from '@react-navigation/native'; import MainScreen from './screens/MainScreen'; export default function App() { const ref = React.useRef(null); const [isReady, setIsReady] = React.useState(false); const [initialState, setInitialState] = React.useState(); const { getInitialState } = useLinking(ref, { prefixes: ['myapp://'], config: { screens: { Home: 'home', }, }, }); React.useEffect(() => { getInitialState() .then(state => { if (state !== undefined) { setInitialState(state); } }) .finally(() => { setIsReady(true); }); }, [getInitialState]); if (!isReady) { return Loading...; } return ( ); } [/code] [b]MainScreen.tsx:[/b] [code]import React from 'react'; import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; const Stack = createStackNavigator(); export default function MainScreen() { return ( ); } [/code] [b]HomeScreen.tsx:[/b] [code]import React from 'react'; import { View, Text } from 'react-native'; export default function HomeScreen() { return ( Home Screen ); } [/code] Что я пробовал [list] [*]Удаление NavigationContainer из MainScreen — возникла ошибка «Не удалось зарегистрировать навигатор» [*]Использование ссылки вместо useLinking — все равно зависает при загрузке [*]Установка устаревших-реагирующих-native-prop-types — ошибка ViewPropTypes сохраняется [/list] Вопросы [list] [*]Как мне структурировать навигацию с помощью React Navigation 5.9.8? [*]Следует ли использовать useLinking или ссылку? [*]Где должен находиться NavigationContainer? [*]Как исправить ошибку ViewPropTypes? [/list] Дополнительный контекст [list] [*]Приложение работало над более старая версия React Native (0.63) [*]Недавно обновлена до RN 0.69 [*]На данный момент необходимо поддерживать React Navigation 5.x (невозможно обновить до v6) [/list] Подробнее здесь: [url]https://stackoverflow.com/questions/79829373/react-navigation-nested-navigationcontainer-error-and-app-stuck-on-loading-sc[/url]