Add lazy requiring screens components (#115)

* Add lazy requiring screens components

* Fix naming
This commit is contained in:
Michał Osadnik
2019-07-04 11:41:01 +01:00
committed by Krzysztof Magiera
parent ed826d7b91
commit b042571315

View File

@@ -17,7 +17,7 @@ const getViewManagerConfigCompat = name =>
? UIManager.getViewManagerConfig(name)
: UIManager[name];
export function useScreens(shouldUseScreens = true) {
function useScreens(shouldUseScreens = true) {
USE_SCREENS = shouldUseScreens;
if (USE_SCREENS && !getViewManagerConfigCompat('RNSScreen')) {
console.error(
@@ -26,20 +26,33 @@ export function useScreens(shouldUseScreens = true) {
}
}
export function screensEnabled() {
function screensEnabled() {
return USE_SCREENS;
}
export const NativeScreen = requireNativeComponent('RNSScreen', null);
let NativeScreenValue;
let NativeScreenContainerValue;
const AnimatedNativeScreen = Animated.createAnimatedComponent(NativeScreen);
const ScreensNativeModules = {
get NativeScreen() {
NativeScreenValue =
NativeScreenValue || requireNativeComponent('RNSScreen', null);
return NativeScreenValue;
},
export const NativeScreenContainer = requireNativeComponent(
'RNSScreenContainer',
null
get NativeScreenContainer() {
NativeScreenContainerValue =
NativeScreenContainerValue ||
requireNativeComponent('RNSScreenContainer', null);
return NativeScreenContainerValue;
},
};
const AnimatedNativeScreen = Animated.createAnimatedComponent(
ScreensNativeModules.NativeScreen
);
export class Screen extends React.Component {
class Screen extends React.Component {
setNativeProps(props) {
this._ref.setNativeProps(props);
}
@@ -77,12 +90,26 @@ export class Screen extends React.Component {
}
}
export class ScreenContainer extends React.Component {
class ScreenContainer extends React.Component {
render() {
if (!USE_SCREENS) {
return <View {...this.props} />;
} else {
return <NativeScreenContainer {...this.props} />;
return <ScreensNativeModules.NativeScreenContainer {...this.props} />;
}
}
}
module.exports = {
ScreenContainer,
Screen,
get NativeScreen() {
return ScreensNativeModules.NativeScreen;
},
get NativeScreenContainer() {
return ScreensNativeModules.NativeScreenContainer;
},
useScreens,
screensEnabled,
};