- Вопрос или проблема
- Необработанная ошибка: Компонент ‘Privont’ не зарегистрирован в приложении React Native
- 1. index.js
- 2. app.json
- 3. AppDelegate.mm
- Ответ или решение
- Ошибка Uncaught Error: ‘Privont’ не зарегистрирован в приложении React Native
- Причины возникновения ошибки
- Проверка кода
- Полный анализ ваших файлов
- Решения
- Заключение
Вопрос или проблема
Необработанная ошибка: Компонент ‘Privont’ не зарегистрирован в приложении React Native
Я получаю следующую ошибку в моем приложении React Native:
“Необработанная ошибка: ‘Privont’ не зарегистрирован. Это может произойти, если:
- Metro (локальный сервер разработки) запущен из неправильной папки. Проверьте, работает ли Metro, остановите его и перезапустите в текущем проекте.
- Модуль не удалось загрузить из-за ошибки, и
AppRegistry.registerComponent
не был вызван.”
Я проверил свой код, и похоже, что "Privont"
не зарегистрирован. Вот что я попробовал до сих пор:
- Перезапустил сборщик Metro.
- Проверил, что я запускаю Metro в правильной директории проекта.
- Проверил вызов
AppRegistry.registerComponent
в своем коде.
Ошибка указывает на AppRegistry.js
на строке 205.
Вот мой код:
1. index.js
import * as React from 'react';
import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
import './Core/translations/i18next';
import {Provider} from 'react-redux';
import {PersistGate} from 'reduxjs-toolkit-persist/integration/react';
import {persistedStore, store} from './src/redux/store';
const AppWrapper = () => (
<Provider store={store}>
<PersistGate loading={null} persistor={persistedStore}>
<App />
</PersistGate>
</Provider>
);
AppRegistry.registerComponent(appName, () => App);
2. app.json
{
"name": "Privont",
"displayName": "Privont"
}
3. AppDelegate.mm
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[FIRApp configure];
// Добавьте эту строку, чтобы вызвать вышеуказанную функцию
ClearKeychainIfNecessary();
self.moduleName = @"Privont";
// Вы можете добавить ваши пользовательские начальные свойства в словаре ниже.
// Они будут переданы в контроллер представления, используемый React Native.
self.initialProps = @{};
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
Вот изображение ошибки: Смотреть изображение
Ответ или решение
Ошибка Uncaught Error: ‘Privont’ не зарегистрирован в приложении React Native
Ваша проблема, заключающаяся в ошибке "Uncaught Error: Component ‘Privont’ has not been registered in React Native App", является распространённой среди разработчиков приложений на React Native. Давайте детально разберём возможные причины этой ошибки и пути её решения.
Причины возникновения ошибки
Ошибка возникает из-за того, что компонент Privont
не зарегистрирован корректно, что может происходить по следующим причинам:
-
Неправильная работа Metro Bundler:
Metro — это локальный сервер разработки, который должен быть запущен в корневой директории вашего проекта. Если он запущен в другой директории, приложение не сможет найти необходимые компоненты. -
Ошибка в загрузке модуля:
Если происходит сбой в загрузке какого-либо модуля, это может привести к тому, что вызовAppRegistry.registerComponent
не будет выполнен.
Проверка кода
Ваш код в файле index.js
выглядит практически правильно, однако в вызове AppRegistry.registerComponent
вы предоставили в качестве второго аргумента App
, вместо AppWrapper
. Это может быть причиной ошибки, поскольку компонент, который вы хотите отобразить, не зарегистрирован должным образом. Вот как можно изменить данный вызов:
AppRegistry.registerComponent(appName, () => AppWrapper);
Полный анализ ваших файлов
1. index.js:
import * as React from 'react';
import { AppRegistry } from 'react-native';
import App from './App'; // Основной компонент вашего приложения
import { name as appName } from './app.json';
import './Core/translations/i18next'; // Инициализация локализации
import { Provider } from 'react-redux';
import { PersistGate } from 'reduxjs-toolkit-persist/integration/react';
import { persistedStore, store } from './src/redux/store';
// Обёртка для хранения Redux
const AppWrapper = () => (
<Provider store={store}>
<PersistGate loading={null} persistor={persistedStore}>
<App />
</PersistGate>
</Provider>
);
// Регистрация компонента приложения
AppRegistry.registerComponent(appName, () => AppWrapper); // Исправлено здесь
2. app.json:
{
"name": "Privont",
"displayName": "Privont"
}
3. AppDelegate.mm:
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[FIRApp configure];
ClearKeychainIfNecessary(); // Ваша функция
self.moduleName = @"Privont"; // Имя модуля
self.initialProps = @{}; // Начальные параметры
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
Решения
-
Перезапустите Metro:
Убедитесь, что Metro запущен в правильной директории. Остановите его и снова запустите.cd path/to/your/project npm start
-
Проверьте реестр компонентов:
Убедитесь, чтоAppRegistry.registerComponent
вызывается для вашего основного компонента. Во избежание ошибок используйтеAppWrapper
, который содержит провайдеры. -
Проверка на другие ошибки:
Проверьте консоль на любые другие ошибки или предупреждения, которые могут указывать на проблемы с зависимостями или модулями. -
Обновление зависимостей:
Убедитесь, что все ваши зависимости актуальны. Используйтеnpm outdated
иnpm update
, чтобы обновить устаревшие пакеты. -
Документация:
Если проблема сохраняется, просмотрите официальную документацию React Native на предмет изменений в API или получения более детальной информации оAppRegistry
.
Заключение
Следуя предложенным шагам, вы сможете устранить ошибку "Uncaught Error: Component ‘Privont’ has not been registered in React Native App". Если ошибка продолжает проявляться, рекомендуется проверить код на наличие других возможных проблем и обеспечить чистоту проекта, а также обновить все зависимости.