-
Notifications
You must be signed in to change notification settings - Fork 27.9k
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[NEXT-1550] App Router with output: export
does not support useParams()
on client
#54393
Comments
Perhaps there are dates when this is scheduled to be done? Or is it better to use Pages Router? FYI: Gatsby allows you to use dynamic routers in static exports without configuring server-side redirects. That's the only thing stopping us from moving our PWAs from Gatsby to Next.js |
I did not see this error on 13.4.13. I started seeing it when I upgraded to 13.5.3. |
Can confirm this is working on 13.4.13. I'm curious if the functionality is therefore a regression or a bug that's become a feature 😅 |
But does it output the static page? If it doesn't and there is no error, then it's definitely a regression. |
@petejodo What does "working" mean in this case? Previously there was no error message but it was failing silently. So in 13.5.0, a helpful error message was added explaining how to fix it. See #48022 (comment) for more details. However maybe there is a case when the error message shouldn't be printed? If you have code that was working with Please do NOT comment on this issue since it describes a new feature that needs to be implemented (not a regression). |
I can confirm that this issue persisted in version 13.4.13 as well. It failed silently as you said; there was no error during the build, but accessing the dynamic route resulted in a 404 error. |
yeah I didn't see that at first and thought that it was working in my testing but I guess I somehow messed something up in my testing where I thought it was working but it definitely was not. Sorry, my mistake! This put me in a bind because I misinterpreted the opening paragraphs to https://nextjs.org/docs/app/building-your-application/deploying/static-exports which made it seem I could port a SPA to nextjs and we just about finished porting it. That's my problem though, not yours' 😅 I think I can re-hack react-router back in even though that was giving me trouble at the start of the project |
This comment has been minimized.
This comment has been minimized.
Hi, is this related to the error encountered in @leerob SPA example? The error message seems surprising, and params are meant to be obtained via page props rather than the |
Hi, I just started learning Next.js and I want to deploy my app as static SPA on Amazon S3. Hence, I added
I'm stuck here. What am I supposed to do to get the dynamic routes working with the static export? Maybe, I'm don't fully understand |
@goerlitz starting step 3 and 4 I think you get confused:
The thing is that if you use a dummy static param, Next only knows the dummy "/datasets/foo" route. So "/datasets/bar" won't work. You could do an URL rewrite from "/datasets/bar" to "/datasets/foo", but then the route parameter is lost. You could opt for a query parameter instead. Sadly until Next.js supports exporting dynamic routes that are not statically rendered like it did in Next 12 |
Thanks @eric-burel for the guidance. Having worked on SPA with Api backends in the past, I thought I could make Next.js output a SPA bundle with separate api code. Actually, I think that the first paragraph in https://nextjs.org/docs/app/building-your-application/deploying/static-exports is quite misleading in that sense:
No, Next.js is not made for SPAs - it is a totally different paradigm with the goal to NOT do all rendering and routing in the browser but move more code to the server where computing is more efficient (SSR etc.). Hence, a typical Next.js app will never be an SPA (and should not be), because the application code is split up and runs on server and client likewise. IMHO, for most applications - that usually have dynamic routing - the static export does not make sense to me at all. |
Does exists on 13.5.5 as well, I have tried to build a view with this routing structure:
on production i had issues for previous versions, [id] was not found and it was navigating to home page, and now not even able to build to the this issue:
|
Can you please give an update, when this feature is planned? I mainly switchedto nextjs, because of the routing functionality. Now it forces me to host on a node server... As a workaround i try out useing pages router again. [https://nextjs.org/docs/pages/building-your-application/routing/pages-and-layouts] |
@andreasfrey, this is what I meant with "Next.js follows a different paradigm" than SPA. If you are trying to use Next.js to create a traditional SPA (with dynamic routes) that can be packaged for hosting on a CDN, then you are doing something (conceptually) wrong. This is not what Next.js was designed for. If you want to move from an SPA to Next.js (with all the nice features, like SSR etc.), you should
|
Maybe, I'm getting something wrong here. |
Maybe this is true. I really like to develop React applications, because they are fast to build and require not much of a server (running even on CDN...). Now react And now I wanted to implement a really basic use case - which is not possible anymore, because you insist on using a server component? And yes it is true, I do not need server components. And I am sure many other people do't need them as well. So, again I repeat the question: (I switched to Page Routes meanwhile ... maybe the next project is again simple React with react-router .....) |
@goerlitz with Pages Router you can use dynamic routes and As React itself suggests to use React-based frameworks, being NextJs its first option, one should expect to use it for a SPA without much conflicts, that's why I don't think you are doing something conceptually wrong when trying to do so... Next does create an html file for each defined route, but in any case it can be up to the developer to sacrifice bundle size/load speed and load what they think it is "unnecessary JavaScript" to fully support dynamic routing for cases where you don't have the full list of possible paths |
Totally agree with @ramirorinaldi. I landed in this situation because the official React docs recommended next.js and there were no (clear) warnings along the way for the use-case of statically-hosted SPAs using the app router paradigm. So as long as the issue exists it would be nice to put some warnings about this somewhere in the next.js docs, and maybe also urge the React doc maintainers to do the same, to avoid too many others arriving here. Apart from that it should be technically possible for next.js to support this if I'm not mistaken. So it would also be nice to see this on the roadmap down the line for later projects |
You can use the Pagesd Router meanwhile (https://nextjs.org/docs/pages/building-your-application/routing) |
I have this
And also getting:
|
No, unfortunately not. If you want to develop a fully dynamic SPA where the rendered pages depend on the user status and interactions, you should not use |
@goerlitz |
One additional thing I noticed is that when you try to "trick" the app router in returning a catch all route it still does not work because // app/posts/[id]/page.js
import PostDetailsPage from "./PostDetailsPage";
export async function generateStaticParams() {
return [{ id: "fallback" }];
}
export default function Page() {
return <PostDetailsPage />;
} // app/posts/[id]/PostDetailsPage
"use client";
import { useParams } from "next/navigation";
export default function PostDetailsPage() {
const { id } = useParams(); // always returns 'fallback' also when you navigate to /posts/1
return <div>Post: {id}</div>;
} {
"rewrites": [
{
"source": "posts/*",
"destination": "/posts/fallback.html"
}
]
} |
Here is a feature request and discussion outlining the issue and solutions more clearly: #55393 (comment) |
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
@leerob Are there any news rgarding this issue? Timeline for fix or something like that? |
This comment was marked as duplicate.
This comment was marked as duplicate.
Hello everyone! Just checking in to ask if this scenario is already supported by NextJS:
Any news about this? |
@cfv1984 It is not supported yet. Currently, the only way to achieve this is through the pages router. |
@leerob When do you plan to fix this? Our team is relying on the feature. |
So it means that an app using next-intl or similar cannot work with capacitor ? Since everything is wrapped with a [locale] folder ? Is there at least a work around ? |
You can use the pages router or you need to wait like all of use for an fix. |
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment has been minimized.
This comment has been minimized.
Another workaround is to switch from using params to search params to get the ID or whatever in the URL |
We finally need a fix for this, is there any new information yet? |
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
Verify canary release
Provide environment information
Operating System: Platform: darwin Arch: arm64 Version: Darwin Kernel Version 22.5.0 Binaries: Node: 18.17.1 pnpm: 8.6.12 Relevant Packages: next: 13.4.20-canary.2 react: 18.2.0 react-dom: 18.2.0 Next.js Config: output: export
Which area(s) of Next.js are affected? (leave empty if unsure)
App Router, Static HTML Export (output: "export")
Link to the code that reproduces this issue or a replay of the bug
https://github.com/curated-tests/next-issue-48022
To Reproduce
The page in question is /app/blog-app/[slug]/page.tsx
Describe the Bug
Fails with an error:
This is expected right now because its not implemented, but it would be nice to support this so that App Router can match Pages Router.
Expected Behavior
Ideally, the build should complete and navigation should work client side.
/blog-app/
)/blog-app/one
)Which browser are you using? (if relevant)
Chrome
How are you deploying your application? (if relevant)
python3 -m http.server 3000
NEXT-1550
The text was updated successfully, but these errors were encountered: