javascript - Wie bekomme ich URL-Parameter bei der Verwendung eines benutzerdefinierten Dokuments in NextJS
Ich verwende NextJS, um SSR-Seiten zu erstellen, und diese Seiten sind sprachspezifisch. Ich möchte die Eigenschaft lang festlegen, um die Sprache des Textes anzugeben.
Bisher habe ich:
import Document, { Html, Head, Main, NextScript } from "next/document"
import Router from "next/router"
class MyDocument extends Document {
render() {
const { lanaguage } = Router.router.query
return (
<Html lang={language}>
<Head />
<body className="antialiased text-white text-base font-sans">
<Main />
<NextScript />
</body>
</Html>
)
}
}
export default MyDocument
Allerdings ist Router.router immer null, wenn ein benutzerdefiniertes Dokument (_document.js) verwendet wird. Gibt es eine andere Möglichkeit, die URL-Parameter/Abfragen zu erhalten, wenn ein benutzerdefiniertes Dokument verwendet wird?
Antwort #1
Ich konnte dies lösen, indem ich Folgendes verwendet habe:
import Document, { Html, Head, Main, NextScript } from "next/document"
class MyDocument extends Document {
render() {
const { lanaguage } = this.props.__NEXT_DATA__.query
return (
<Html lang={lanaguage}>
<Head />
<body className="antialiased text-white text-base font-sans">
<Main />
<NextScript />
</body>
</Html>
)
}
}
export default MyDocument
Ich bin unsicher, ob es eine schlechte Praxis ist, this.props.__NEXT_DATA__ zu verwenden. Allerdings enthält es die Informationen, die ich benötige.
Antwort #2
Seit Next.js v10 wird, wenn Sie das integrierte i18n-Routing verwenden, Next automatisch das lang-Attribut des Dokuments setzen.
Aus der Dokumentation:
Da Next.js weiß, welche Sprache der Benutzer besucht, wird es automatisch das
lang-Attribut zum<html>-Tag hinzufügen.Next.js weiß nichts über Varianten einer Seite, daher liegt es an Ihnen, die
hreflang-Meta-Tags mitnext/headhinzuzufügen. Sie können mehr überhreflangin der Google-Webmaster-Dokumentation erfahren.
