Как динамически загрузить модуль в реагировать на родной?
В настоящее время я работаю над добавлением поддержки 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 в нужной папке. Вы можете использовать этот трюк, если вы хотите другую конфигурацию для вашего проекта.