Я хотите перепрофилировать для этого компонент App, не возвращая JSX. Для компонентов пользовательского интерфейса я использую RNN 7.35.2. Я предположил, что это не обязательно должен быть Headless JS или Headless задача, поскольку функции всего приложения также должны выполняться на переднем плане (и React, похоже, все равно отходит от Headless JS)
Цель и запрос
#1 Цель — реализовать безголовый компонент (т. е. централизовать функции, привязанные к Жизненный цикл React на уровне выше существующего корня компоненты пользовательского интерфейса) и смонтировать его в сборке приложения в контексте RNN.
- Как зарегистрировать и смонтировать компонент приложения, не полагаясь на .setRoot?
- Как структурировать .setRoot для размещения безголовый компонент, в котором существующий корень имеет нижние вкладки?
- Как сохранить зависимости от корня более высокого уровня для компонента приложения в существующем корне?
Метод проб и ошибок для #1
- Я попробовал использовать AppRegistry для компонента приложения ниже и Navigation для регистрации других компонентов пользовательского интерфейса, но журналы не возвращаются.
- прекращает монтирование компонента приложения, когда RNN установлен и связан. Вероятно, это связано с тем, что методы mainapplication и mainactivity переопределяются RNN.
Код: Выделить всё
AppRegistry - Я пытался изменить порядок регистрации компонентов приложения и пользовательского интерфейса, модульно разбивая их на отдельные файлы, но ни одно из этих приложений не смонтировалось. как безголовый компонент
Код: Выделить всё
//App.js
const App = () => {
//log from someFunction_A
useEffect(() => {
//log from someFunction_B
return () => //stop someFunction_B
}, []);
return null;
};
export default App;
//index.js
AppRegistry.registerComponent(appName, () => App);
Navigation.registerComponent('existingComponent', () => existingComponent);
Navigation.setRoot({
//existingComponent in bottomTabs
})
- Я мог бы смонтировать компонент приложения, либо отделив корни, как показано ниже, либо добавив его в виде стека или нижней вкладки в корень существующего компонента
- Но ни один из шаблонов, похоже, не сохраняет зависимости от someComponent_C после корня переключатель.
Я пробовал импортировать someComponent_C как функцию в index.js, зарегистрировать и установить его непосредственно в корень, но зависимости по-прежнему не сохраняются.
Код: Выделить всё
//App.js
const App = () => {
//switch root from the App's to the existingComponent's
return ; //encaps functions like A & B above
};
export default App;
//index.js
Navigation.registerComponent('App', () => App);
Navigation.setRoot({
//App
})
Navigation.registerComponent('existingComponent ', () => existingComponent );
Navigation.setRoot({
//existingComponent in bottomTabs
})
Для большей ясности функция всего приложения, которую я хочу смонтировать, выглядит примерно так .
Код: Выделить всё
const HeadlessCastManager = () => {
//define states and cast client, state
...
// CAST AUTOPLAY LOCAL FILES
useEffect(() => {
//return if dependencies are not loaded
//start server and set origin
//fetch and set playlist
// switch to the next track when a track duration runs out
return () => {
client.stop();
stopServer();
setOrigin('');
};
}, [castState]);
// CAST QUEUE & CONTROL LOAD
useEffect(() => {
//return if dependencies are not loaded
//load cast queue with playlist
GoogleCast.showExpandedControls();
}, [castState, origin, playlist]);
return null;
};
export default HeadlessCastManager;
Тестовое устройство: Android 12
Операционная система для разработчиков: macOS 11.7.10
Homebrew: 4.4.8
Оболочка: версия "5.8"
Узел: версия 20.18.0
Пряжа: 1.22.22
npm: версия 10.8.2
Watchman: не найден
CocoaPods: не найден
SDK: macOS 12.1
Android SDK: 34, установленный через Android Studio
Android Studio : 2023.2 AI-232.10300.40.2321.11567975
Xcode: версия 13.2.1/13C100
Java: версия 11.0.25
Ruby: версия 2.6.10
"@react-native-community/cli": не найдена
реакция: установлена : 18.2.0
реагировать-родной: установлено: 0.72.15
Android:
hermesEnabled: true
newArchEnabled: false
iOS:
hermesEnabled: не найдено
newArchEnabled: не найдено
Подробнее здесь: https://stackoverflow.com/questions/792 ... -installed
Мобильная версия