ionic-framework icon indicating copy to clipboard operation
ionic-framework copied to clipboard

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

Open laurencefass opened this issue 1 year ago • 4 comments
trafficstars

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 <Link> 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

laurencefass avatar Jul 05 '24 09:07 laurencefass

@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:

  • https://github.com/ionic-team/stencil/issues/5831
  • https://github.com/ionic-team/stencil-ds-output-targets/pull/445

christian-bromann avatar Jul 06 '24 15:07 christian-bromann

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.

laurencefass avatar Jul 07 '24 08:07 laurencefass

It's also a good idea to keep track of this PR for progress.

thetaPC avatar Apr 11 '25 17:04 thetaPC

This PR mentioned has been merged into the feature 8.6 branch and should be out before too long, hopefully that helps with this issue

ShaneK avatar May 07 '25 20:05 ShaneK