Fix tab navigator render loop

This commit is contained in:
Arnaud Vergnet 2021-05-19 09:47:36 +02:00
parent 94a0ca33a4
commit 9e6fee467f
5 changed files with 30 additions and 19 deletions

View file

@ -53,9 +53,9 @@ type StateType = {
export default class App extends React.Component<{}, StateType> {
navigatorRef: { current: null | NavigationContainerRef };
defaultHomeRoute: string | null;
defaultHomeRoute: string | undefined;
defaultHomeData: { [key: string]: string };
defaultHomeData: { [key: string]: string } | undefined;
urlHandler: URLHandler;
@ -67,8 +67,8 @@ export default class App extends React.Component<{}, StateType> {
};
initLocales();
this.navigatorRef = React.createRef();
this.defaultHomeRoute = null;
this.defaultHomeData = {};
this.defaultHomeRoute = undefined;
this.defaultHomeData = undefined;
this.urlHandler = new URLHandler(this.onInitialURLParsed, this.onDetectURL);
this.urlHandler.listen();
setSafeBounceHeight(Platform.OS === 'ios' ? 100 : 20);

View file

@ -313,18 +313,25 @@ function MainStackComponent(props: {
}
type PropsType = {
defaultHomeRoute: string | null;
defaultHomeData: { [key: string]: string };
defaultHomeRoute?: string;
defaultHomeData?: { [key: string]: string };
};
export default function MainNavigator(props: PropsType) {
function MainNavigator(props: PropsType) {
const { preferences } = usePreferences();
const showIntro = getPreferenceBool(PreferenceKeys.showIntro, preferences);
const createTabNavigator = () => <TabNavigator {...props} />;
return (
<MainStackComponent
showIntro={showIntro !== false}
createTabNavigator={() => <TabNavigator {...props} />}
createTabNavigator={createTabNavigator}
/>
);
}
export default React.memo(
MainNavigator,
(pp: PropsType, np: PropsType) =>
pp.defaultHomeRoute === np.defaultHomeRoute &&
pp.defaultHomeData === np.defaultHomeData
);

View file

@ -136,8 +136,8 @@ function PlanningStackComponent() {
const HomeStack = createStackNavigator();
function HomeStackComponent(
initialRoute: string | null,
defaultData: { [key: string]: string }
initialRoute?: string,
defaultData?: { [key: string]: string }
) {
let params;
if (initialRoute) {
@ -232,8 +232,8 @@ function PlanexStackComponent() {
const Tab = createBottomTabNavigator<TabStackParamsList>();
type PropsType = {
defaultHomeRoute: string | null;
defaultHomeData: { [key: string]: string };
defaultHomeRoute?: string;
defaultHomeData?: { [key: string]: string };
};
const ICONS: {
@ -264,7 +264,7 @@ const ICONS: {
},
};
export default function TabNavigator(props: PropsType) {
function TabNavigator(props: PropsType) {
const { preferences } = usePreferences();
let defaultRoute = getPreferenceString(
PreferenceKeys.defaultStartScreen,
@ -324,6 +324,13 @@ export default function TabNavigator(props: PropsType) {
);
}
export default React.memo(
TabNavigator,
(pp: PropsType, np: PropsType) =>
pp.defaultHomeRoute === np.defaultHomeRoute &&
pp.defaultHomeData === np.defaultHomeData
);
export enum TabRoutes {
Services = 'services',
Proxiwash = 'proxiwash',

View file

@ -139,9 +139,6 @@ const generateNewsFeed = (rawFeed: RawNewsFeedType): Array<FeedItemType> => {
return finalFeed;
};
/**
* Class defining the app's home screen
*/
function HomeScreen(props: Props) {
const theme = useTheme();
const navigation = useNavigation();

View file

@ -15,8 +15,8 @@ import { CustomDarkTheme, CustomWhiteTheme } from '../utils/Themes';
import { setupStatusBar } from '../utils/Utils';
type Props = {
defaultHomeRoute: string | null;
defaultHomeData: { [key: string]: string };
defaultHomeRoute?: string;
defaultHomeData?: { [key: string]: string };
};
function MainApp(props: Props, ref?: Ref<NavigationContainerRef>) {