Some checks failed
CI / go (push) Waiting to run
CI / docker (push) Waiting to run
CI / lint-go (push) Waiting to run
CI / lint-docs (push) Waiting to run
CI / check-paperclip (push) Waiting to run
Deploy static site / Deploy to GitHub Pages (push) Has been cancelled
Deploy static site / Deploy via Docker to hatch.surf (push) Has been cancelled
Resolved conflicts by taking GitHub versions for: - .dockerignore, .gitignore, Dockerfile, README.md, docker-compose.yml Kept deploy.sh updated to: - Pull from GitHub (primary source) - Push to Gitea (push-mirror) - Build from site/ directory (GitHub structure) Co-Authored-By: Paperclip <noreply@paperclip.ing>
2.6 KiB
2.6 KiB
| title | description |
|---|---|
| connection | API Reference for the connection function. |
The connection() function allows you to indicate rendering should wait for an incoming user request before continuing.
It's useful when a component doesn't use Request-time APIs like cookies or headers, but still needs to produce different output per request, such as Math.random() or new Date().
import { connection } from 'next/server'
export default async function Page() {
await connection() // prerendering stops here
// the following code only runs at request time
const rand = Math.random()
return <span>{rand}</span>
}
import { connection } from 'next/server'
export default async function Page() {
await connection() // prerendering stops here
// the following code only runs at request time
const rand = Math.random()
return <span>{rand}</span>
}
Examples
Synchronous database drivers
Queries from synchronous database drivers like better-sqlite3 complete during prerendering. If you are not already using Request-time APIs, call connection() before your query to exclude them from prerendering:
import { connection } from 'next/server'
import Database from 'better-sqlite3'
const db = new Database('app.db')
export async function getVisitorCount() {
await connection()
return db.prepare('SELECT value FROM counters WHERE name = ?').get('visitors')
}
import { connection } from 'next/server'
import Database from 'better-sqlite3'
const db = new Database('app.db')
export async function getVisitorCount() {
await connection()
return db.prepare('SELECT value FROM counters WHERE name = ?').get('visitors')
}
Now any component that calls getVisitorCount() will be excluded from prerendering, along with the rest of its output.
Reference
Type
function connection(): Promise<void>
Parameters
- The function does not accept any parameters.
Returns
- The function returns a
voidPromise. It is not meant to be consumed.
Good to know
connectionreplacesunstable_noStoreto better align with the future of Next.js.- The function is only necessary when dynamic rendering is required and common Request-time APIs are not used.
Version History
| Version | Changes |
|---|---|
v15.0.0 |
connection stabilized. |
v15.0.0-RC |
connection introduced. |