ionic-framework
ionic-framework copied to clipboard
Add first class support to @ionic/react for Next JS SSR + Partial page pre-rendering
Prerequisites
- [X] I have read the Contributing Guidelines.
- [X] I agree to follow the Code of Conduct.
- [X] I have searched for existing issues that already include this feature request, without success.
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 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
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.
It's also a good idea to keep track of this PR for progress.
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