我使用的是react-native-code-push插件。它提供了客户端集成CodePush服务的功能,让你可以轻松地为React Native应用添加动态更新体验。
但是,在一些原生导航的实现中(例如react-native-navigation),并没有根组件。应用程序将开始调用类似于以下函数的方法:
但是,在一些原生导航的实现中(例如react-native-navigation),并没有根组件。应用程序将开始调用类似于以下函数的方法:
// index.js
import { Navigation } from 'react-native-navigation';
Navigation.startTabBasedApp({
tabs: [
{
label: 'One',
screen: 'example.FirstTabScreen', // this is a registered name for a screen
icon: require('../img/one.png'),
selectedIcon: require('../img/one_selected.png'), // iOS only
title: 'Screen One'
},
{
label: 'Two',
screen: 'example.SecondTabScreen',
icon: require('../img/two.png'),
selectedIcon: require('../img/two_selected.png'), // iOS only
title: 'Screen Two'
}
]
});
// or a single screen app like:
Navigation.registerComponent('example.MainApplication', () => MainComponent);
Navigation.startSingleScreenApp({
screen: {
screen: 'example.MainApplication',
navigatorButtons: {},
navigatorStyle: {
navBarHidden: true
}
},
})
因为没有根组件,所以不清楚在哪里调用CodePush
,通常我应该像高阶组件一样将整个根组件包装在CodePush中。
我曾经做的是:
// index.js
class MyRootComponent extends Component {
render () {
return <MainNavigator/> // a navigator using react-navigation
}
}
let codePushOptions = {
checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME,
installMode: CodePush.InstallMode.ON_NEXT_RESUME
}
export default CodePush(codePushOptions)(MyRootComponent)
有没有正确的方法来解决这个问题!?
我知道我可以这样做:
Navigation.registerComponent('example.MainApplication', () => CodePush(codePushOptions)(RootComponent));
Navigation.startSingleScreenApp({
screen: {
screen: 'example.MainApplication',
navigatorButtons: {},
navigatorStyle: {
navBarHidden: true
}
},
})
但是我应该仅使用导航器来投影我的根组件,这似乎不是一个好主意。我认为这个问题可能有一个最佳实践,我正在寻找。
更新
我认为在react-native-navigation
中注册选项卡导航器存在一些复杂性,至少我无法解决这个问题。例如,在react-native-navigation
中使用react-native-code-push
的tabBasedApp
就是我所需要的。
registerScreens();
保存了我的项目。 - Luat Vu Dinh