diff --git a/packages/next/next-server/server/next-server.ts b/packages/next/next-server/server/next-server.ts
index 307ba5a6d5..7a0eb6dd95 100644
--- a/packages/next/next-server/server/next-server.ts
+++ b/packages/next/next-server/server/next-server.ts
@@ -774,9 +774,8 @@ export default class Server {
// Toggle whether or not this is an SPR Data request
const isSprData = isSpr && query._nextSprData
- if (isSprData) {
- delete query._nextSprData
- }
+ delete query._nextSprData
+
// Compute the SPR cache key
const sprCacheKey = parseUrl(req.url || '').pathname!
@@ -890,7 +889,9 @@ export default class Server {
req,
res,
pathname,
- query,
+ result.unstable_getStaticProps
+ ? { _nextSprData: query._nextSprData }
+ : query,
result,
{ ...this.renderOpts, amphtml, hasAmp, dataOnly }
)
diff --git a/packages/next/server/next-dev-server.ts b/packages/next/server/next-dev-server.ts
index 2fc0d8a974..fa7cf15917 100644
--- a/packages/next/server/next-dev-server.ts
+++ b/packages/next/server/next-dev-server.ts
@@ -414,13 +414,8 @@ export default class DevServer extends Server {
continue
}
- // eslint-disable-next-line no-loop-func
- return this.hotReloader!.ensurePage(dynamicRoute.page).then(() => {
- pathname = dynamicRoute.page
- query = Object.assign({}, query, params)
- })
+ return this.hotReloader!.ensurePage(dynamicRoute.page)
}
-
throw err
})
} catch (err) {
diff --git a/test/integration/prerender/pages/blog/[post]/index.js b/test/integration/prerender/pages/blog/[post]/index.js
index cb11f7ae32..7d44195d3b 100644
--- a/test/integration/prerender/pages/blog/[post]/index.js
+++ b/test/integration/prerender/pages/blog/[post]/index.js
@@ -27,6 +27,7 @@ export async function unstable_getStaticProps({ params }) {
return {
props: {
+ params,
post: params.post,
time: (await import('perf_hooks')).performance.now(),
},
@@ -34,11 +35,12 @@ export async function unstable_getStaticProps({ params }) {
}
}
-export default ({ post, time }) => {
+export default ({ post, time, params }) => {
return (
<>
Post: {post}
time: {time}
+ {JSON.stringify(params)}
{JSON.stringify(useRouter().query)}
to home
diff --git a/test/integration/prerender/pages/something.js b/test/integration/prerender/pages/something.js
index af6e396167..afa6fdbde2 100644
--- a/test/integration/prerender/pages/something.js
+++ b/test/integration/prerender/pages/something.js
@@ -1,22 +1,26 @@
import React from 'react'
import Link from 'next/link'
+import { useRouter } from 'next/router'
// eslint-disable-next-line camelcase
-export async function unstable_getStaticProps() {
+export async function unstable_getStaticProps({ params }) {
return {
props: {
world: 'world',
+ params: params || {},
time: new Date().getTime(),
},
revalidate: false,
}
}
-export default ({ world, time }) => {
+export default ({ world, time, params }) => {
return (
<>
hello: {world}
time: {time}
+ {JSON.stringify(params)}
+ {JSON.stringify(useRouter().query)}
to home
diff --git a/test/integration/prerender/test/index.test.js b/test/integration/prerender/test/index.test.js
index a8d50e157a..a884d17589 100644
--- a/test/integration/prerender/test/index.test.js
+++ b/test/integration/prerender/test/index.test.js
@@ -3,6 +3,7 @@
import fs from 'fs-extra'
import { join } from 'path'
import webdriver from 'next-webdriver'
+import cheerio from 'cheerio'
import {
renderViaHTTP,
fetchViaHTTP,
@@ -190,6 +191,24 @@ const runTests = (dev = false) => {
expect(html).toMatch(/Post:.*?post-1/)
})
+ it('should not supply query values to params or useRouter non-dynamic page SSR', async () => {
+ const html = await renderViaHTTP(appPort, '/something?hello=world')
+ const $ = cheerio.load(html)
+ const query = $('#query').text()
+ expect(JSON.parse(query)).toEqual({})
+ const params = $('#params').text()
+ expect(JSON.parse(params)).toEqual({})
+ })
+
+ it('should not supply query values to params or useRouter dynamic page SSR', async () => {
+ const html = await renderViaHTTP(appPort, '/blog/post-1?hello=world')
+ const $ = cheerio.load(html)
+ const params = $('#params').text()
+ expect(JSON.parse(params)).toEqual({ post: 'post-1' })
+ const query = $('#query').text()
+ expect(JSON.parse(query)).toEqual({ post: 'post-1' })
+ })
+
it('should return data correctly', async () => {
const data = JSON.parse(
await renderViaHTTP(