Необработанная ошибка: Компонент ‘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 не зарегистрирован корректно, что может происходить по следующим причинам:

  1. Неправильная работа Metro Bundler:
    Metro — это локальный сервер разработки, который должен быть запущен в корневой директории вашего проекта. Если он запущен в другой директории, приложение не сможет найти необходимые компоненты.

  2. Ошибка в загрузке модуля:
    Если происходит сбой в загрузке какого-либо модуля, это может привести к тому, что вызов 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];
}

Решения

  1. Перезапустите Metro:
    Убедитесь, что Metro запущен в правильной директории. Остановите его и снова запустите.

    cd path/to/your/project
    npm start
  2. Проверьте реестр компонентов:
    Убедитесь, что AppRegistry.registerComponent вызывается для вашего основного компонента. Во избежание ошибок используйте AppWrapper, который содержит провайдеры.

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

  4. Обновление зависимостей:
    Убедитесь, что все ваши зависимости актуальны. Используйте npm outdated и npm update, чтобы обновить устаревшие пакеты.

  5. Документация:
    Если проблема сохраняется, просмотрите официальную документацию React Native на предмет изменений в API или получения более детальной информации о AppRegistry.

Заключение

Следуя предложенным шагам, вы сможете устранить ошибку "Uncaught Error: Component ‘Privont’ has not been registered in React Native App". Если ошибка продолжает проявляться, рекомендуется проверить код на наличие других возможных проблем и обеспечить чистоту проекта, а также обновить все зависимости.

Оцените материал
Добавить комментарий

Капча загружается...