Как динамически загрузить модуль в реагировать на родной?

В настоящее время я работаю над добавлением поддержки Sentry.io в моем приложении- реактиве. Я использую пакет Reaction-native-sentry, и существует одно требование: пакет следует импортировать, только если для определенной константы установлено значение true, например SHOULD_USE_SENTRY, Вся конфигурация часового хранилища хранится в отдельном файле, который также предоставляет 2 метода: setupSentry а также captureException которые используются в корне приложения в componentDidMount а также componentDidCatch соответственно. Как я могу динамически загрузить эти методы в корневой компонент, чтобы при значении SHOULD_USE_SENTRY является false Я не получу ошибки после вызова моих методов? Я надеюсь, что я описал свою проблему достаточно ясно.

1 ответ

Вы не можете импортировать при условии.

Но вы можете сделать нечто подобное, создав 2 точки входа: folderA/index.js и folderB/index.js

Папка A/index.js там вы импортируете свой модуль и передаете его в ваше приложение через реквизиты.

import {someModule} from 'someModule';
render(){
    return(<App module={someModule} />);
}

folderB/index.js - там вы не импортируете модуль, а вместо этого передаете null (или любое другое значение, которое хотите)

render(){
    return(<App module={null} />);
}

тогда в вашем компоненте приложения теперь вы можете иметь условие

App.js

if(this.props.module != null){
    this.props.module.someFunction(); 
}

Осталось только выбрать правильную точку входа при запуске вашего упаковщика. Используйте одну из команд ниже в зависимости от вашей версии rn:

Реактивный родной запуск - корневая папка

Реактивный запуск --проект корневая папка

Указывая --root или --projectRoot, вы указываете упаковщику найти файл index.js в нужной папке. Вы можете использовать этот трюк, если вы хотите другую конфигурацию для вашего проекта.

Другие вопросы по тегам