📜  如何在 Next.js 中获取当前路线?

📅  最后修改于: 2022-05-13 01:56:31.817000             🧑  作者: Mango

如何在 Next.js 中获取当前路线?

在本文中,我们将学习如何在 NextJS 项目中获取当前路由。

NextJS 是一个基于 React 的框架。它有能力为 Windows、Linux 和 mac 等不同平台开发漂亮的 Web 应用程序。动态路径的链接有助于有条件地渲染 NextJS 组件。

创建 NextJS 应用程序:您可以使用以下命令创建一个新的 NextJs 项目:

npx create-next-app gfg

项目结构:它看起来像这样。

在本文中,我们将研究在 NextJs 中获取当前路由的 3 种方法。

  • 使用用户路由器()。
  • 使用 withRouter()。
  • 在 getInitialProps 中使用 Context 道具。

让我们通过实现来了解所有三种方法。

方法一:使用 useRouter() 方法:在 NextJs 中我们可以很容易地使用 useRouter()函数获取当前路由的值。要使用它,我们将在 pages 目录中创建一个名为“ get-route.js ”的新页面。之后,我们将在 get-route.js 页面中添加以下代码。在下面的代码中,我们首先从下一个/路由器导入我们的 useRouter函数,然后我们创建一个名为 getRoute 的新函数,在其中,我们调用我们的 useRouter() 并将该变量存储在一个新的常量变量中命名路由器。之后,我们将显示路径名、asPath 和来自路由变量的查询。

Javascript
import React from 'react'
import {useRouter} from 'next/router';
  
export default function getRoute() {
    // Calling useRouter() hook
    const router = useRouter()
    return (
        
            

GeeksforGeeks

            

pathname:- {router.pathname}

            

query:- {router.query}

            

asPath:- {router.asPath}

        
    ) }


Javascript
import React from 'react'
import {useRouter} from 'next/router';
  
export class getRoute extends React.Component {
      
    render() {
        // Calling useRouter() hook
        const router = useRouter()
        console.log(router.pathname)
        console.log(router.query)
        console.log(router.asPath)
        return (
            
                

GeeksforGeeks

            
        )     } }    export default getRoute


Javascript
import React from 'react'
import {withRouter} from 'next/router';
  
export class getRoute extends React.Component {
      
    render() {
        console.log(this.props.router.pathname)
        console.log(this.props.router.query)
        console.log(this.props.router.asPath)
        return (
            
                

GeeksforGeeks

                

Using withRouter

            
        )     } }    export default withRouter(getRoute)


Javascript
import React from 'react'
import {withRouter} from 'next/router';
  
export class getRoute extends React.Component {
  
    static async getInitialProps(context) {
        // Using context prop to get asPath, query, context
        const {asPath, query, pathname} = context 
        return{asPath, query, pathname}
    }
      
    render() {
        // Consoling the values
        console.log(this.props.pathname)
        console.log(this.props.query)
        console.log(this.props.asPath)
        return (
            
                

GeeksforGeeks

                

Using Context prop in getInitialProps

            
        )     } }    export default getRoute


运行应用程序的步骤:通过在终端中键入以下命令来启动开发服务器。

npm run dev

输出:

在上面的例子中,首先,我们调用了我们的 useRouter() 钩子,然后,我们在控制台中显示了我们路由器的对象。

  • 路径名:当前路线。那是'/pages'中页面的路径。
  • query:解析为对象的查询字符串。
  • asPath:浏览器中显示的路径(包括查询)。

但是 useRouter() 是一个反应钩子,所以如果你在类组件中使用它,这会出错。因此,如果我们将 getRoute()函数更改为具有相同内容的类,那么我们将得到以下输出。

在下面的代码中,我们只是将函数更改为类组件。

Javascript

import React from 'react'
import {useRouter} from 'next/router';
  
export class getRoute extends React.Component {
      
    render() {
        // Calling useRouter() hook
        const router = useRouter()
        console.log(router.pathname)
        console.log(router.query)
        console.log(router.asPath)
        return (
            
                

GeeksforGeeks

            
        )     } }    export default getRoute

运行应用程序的步骤:通过在终端中键入以下命令来启动开发服务器。

npm run dev

输出:

所以要解决这个问题,我们可以使用 withRouter()。

方法二:使用 withRouter() 方法:使用 withRouter()可以方便的获取 react 类组件中当前路由的值。要使用它,您只需在 withRouter() 中导出您的类组件。在下面的代码中,首先,我们从 next/router 导入我们的 withRouter函数,然后我们创建一个名为 getRoute 的新类组件,在其中,在我们的渲染函数中,我们显示路径名、asPath 和查询从我们班收到的道具。之后,我们将导出我们的类 u=inside withRouter()函数。

Javascript

import React from 'react'
import {withRouter} from 'next/router';
  
export class getRoute extends React.Component {
      
    render() {
        console.log(this.props.router.pathname)
        console.log(this.props.router.query)
        console.log(this.props.router.asPath)
        return (
            
                

GeeksforGeeks

                

Using withRouter

            
        )     } }    export default withRouter(getRoute)

运行应用程序的步骤:通过在终端中键入以下命令来启动开发服务器。

npm run dev

输出:

方法3:使用getInitialProps() 方法:你也可以在getInitialProps()里面访问上下文props的路由值。 Context 属性包含你的路由信息,如 asPath、query 和 Pathname。在下面的代码中,首先,我们从 next/router 导入我们的 withRouter函数,然后我们创建一个名为 getRoute 的新类组件,并在其中创建一个包含上下文作为道具的异步 getIntitalProps函数。然后我们将上下文的值存储在一个新变量中并返回它们。然后在我们的渲染函数中,我们将显示路径名、asPath 和来自类中接收到的 props 的查询。

Javascript

import React from 'react'
import {withRouter} from 'next/router';
  
export class getRoute extends React.Component {
  
    static async getInitialProps(context) {
        // Using context prop to get asPath, query, context
        const {asPath, query, pathname} = context 
        return{asPath, query, pathname}
    }
      
    render() {
        // Consoling the values
        console.log(this.props.pathname)
        console.log(this.props.query)
        console.log(this.props.asPath)
        return (
            
                

GeeksforGeeks

                

Using Context prop in getInitialProps

            
        )     } }    export default getRoute

运行应用程序的步骤:通过在终端中键入以下命令来启动开发服务器。

npm run dev

输出: