ionic-team / ionic-framework

A powerful cross-platform UI toolkit for building native-quality iOS, Android, and Progressive Web Apps with HTML, CSS, and JavaScript.
https://ionicframework.com
MIT License
50.96k stars 13.51k forks source link

Add first class support to @ionic/react for Next JS SSR + Partial page pre-rendering #29690

Open laurencefass opened 3 months ago

laurencefass commented 3 months ago

Prerequisites

Describe the Feature Request

Im a Next JS developer and recently started using capacitor. NextJS Capacitor integration is flawless and "just works". Now I need a decent mobile theme.

I have been able to wrap my root layout with a client IonAppProvider, but it appears all pages need to be client rendered because of content. This wont work without 'use client'.

import { IonButtons, IonContent, IonHeader, IonMenuButton, IonPage, IonTitle, IonToolbar } from "@ionic/react";

export default function Page() {
    return <IonPage id="main-content">
        <IonHeader>
            <IonToolbar>
                <IonButtons slot="start">
                    <IonMenuButton></IonMenuButton>
                </IonButtons>
                <IonTitle>Menu</IonTitle>
            </IonToolbar>
        </IonHeader>
        <IonContent className="ion-padding">
            <h1>Server Component</h1>
            Ionic renders on the server
        </IonContent>
    </IonPage>
}

Given the existing prevalence and the growing importannce of SSR and in particular partial page pre-rendering techniques across different frameworks are there any plans to make Ionic more isomorphic so it "just works" on server and client? Is that even possible?

Could it also be made more router agnostic so it works with next and doesnt require a <RouterOutlet />?

Describe the Use Case

Server side rendering and Partial Page pre-rendering.

Describe Preferred Solution

Next JS (14+) and Ionic integration without reliance on the React Router integration.

Describe Alternatives

No response

Related Code

No response

Additional Information

No response

christian-bromann commented 3 months ago

@laurencefass thanks for raising this issue.

We are currently actively working on supporting Next.js SSR + Partial re-rendering support on Stencil which will enable this feature for the Ionic framework. I recommend to follow these issues to get updates on the developments:

laurencefass commented 3 months ago

thanks!

worth mention:

I also asked: "Could it also be made more router agnostic so it works with next and doesnt require a <RouterOutlet />?_"

It doesnt.

Navigation with IonMenu works without having installed React Router. Next JS routing from IonMenu <Link> anchors appears to just work i.e. Im able to navigate my entire Next 14 app router site with no React Router nor RouterOutlet, and the history works too. Only additional work needed is to include callbacks to close the IonMenu via an event where this seems automatic using ReactRouter.