Optimize heavy screens in React Native to prevent lags with React Navigation's stack.
This isn't actually specific to React Navigation, but I find myself using it there often.
Especially useful for screens that set up listeners, make network requests, etc.
🥳 New component-based API! Use this if you only want to optimize certain content on your screen.
import React from 'react'
import { OptimizedHeavyScreen } from 'react-navigation-heavy-screen'
const Screen = () => (
<>
<NonExpensiveComponentHere />
<OptimizedHeavyScreen>
<MyHeavyComponentHere />
</OptimizedHeavyScreen>
</>
)You can also use the normal export usage. Use this if you want to optimize your whole screen.
import { optimizeHeavyScreen } from 'react-navigation-heavy-screen'
const Screen = () => ...
export default optimizeHeavyScreen(Screen, OptionalPlaceHolderScreen)Or you can require your heavy screen inline:
import { optimizeHeavyScreen } from 'react-navigation-heavy-screen'
export default optimizeHeavyScreen(
require('path/to/HeavyScreen'),
OptionalPlaceHolderScreen
)Thanks to @Sebastien Lorber for this recommendation ^
yarn add react-navigation-heavy-screenInstall peer dependencies:
expo install react-native-reanimatedDelay rendering a component until interactions are complete, using InteractionManager. Then it fades in your screen.
placeholder(optional) Non-heavy React component that renders in the meantime.- Extends
Animated.Viewprops docs. So you can pass any props you need to customize the animation. eg:{ entering: { FadeIn } }
import React from 'react'
import { OptimizedHeavyScreen } from 'react-navigation-heavy-screen'
const Screen () => (
<OptimizedHeavyScreen>
<YourHeavyComponent />
</OptimizedHeavyScreen>
)
export default Screenimport { optimizeHeavyScreen } from 'react-navigation-heavy-screen'
export default optimizeHeavyScreen(Screen, OptionalPlaceHolderScreen, {
// default values
disableHoistStatics: false,
})Screenrequired Any React component whose render should be delayed until interactions are complete.Placeholder(optional) Non-heavy React component that renders in the meantime.options(optional) Dictionary with the following options:disableHoistStatics: (optional) Iftrue, theScreen's statics (likenavigationOptions, etc.) will not be passed on. Default:false.- Extends
Animated.Viewprops docs. So you can pass any props you need to customize the animation. eg:{ entering: { FadeIn } }
MIT