mirror of
https://github.com/zhigang1992/react-navigation.git
synced 2026-02-09 22:51:57 +08:00
Add lazy requiring screens components (#115)
* Add lazy requiring screens components * Fix naming
This commit is contained in:
committed by
Krzysztof Magiera
parent
ed826d7b91
commit
b042571315
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user