在next.js中获取客户端的当前url

balp4ylt  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(209)

因此,我正在开发一个nodejs应用程序,我将在这个应用程序上安装我的新网站,我想让我的用户在客户端显示不同的东西,re-renderd取决于用户按下的内容。我的想法是,例如,首先用户会看到“请先选择一个工具”,然后用户将选择导航栏中的工具,然后页面将被重新渲染。renderd并在一个大屏幕内显示所选的工具,并更改URL,例如/admin/[ToolSelected]。
唯一的一件事是,我不知道如何实现这一点。我认为,客户端代码可以检测到什么是网址,并作为一个页面变量放置,然后该工具将显示一个IF语句取决于什么是页面变量。

我的理论是否有效,或者如何有效地实现这一点?

下面是我的主页代码:

// Including Navbar and css
import AdminLayout from '../comps/admin/adminLayout'

// the so called "tools" more will exist in the future
import Passform from '../comps/admin/tools/passform'

// Fetching the current url the user is on
var page = CURRENT_URL;

const jumbotron = {
  background: 'white'
}

const Admin = (page) => (

  <AdminLayout>

  <style global jsx>
  {
    `body {
      background: #eff0f3;
    }`
  }
  </style>
    <div className="jumbotron" style={jumbotron}>

    {(page == "passform") ? (
      <Passform/>
    ) : (
      <h3>Something is wrong :/ . {page}</h3>
    )}

    </div>
  </AdminLayout>
)

export default Admin

字符串

z9smfwbn

z9smfwbn1#

您可以使用withRouter HOC Package 组件,这将注入router对象,该对象具有当前pathname

import { withRouter } from 'next/router';

const Admin = ({ router }) => (
  <AdminLayout>
    <style global jsx>
      {`
        body {
          background: #eff0f3;
        }
      `}
    </style>
    <div className="jumbotron" style={jumbotron}>
      {router.pathname == 'passform' ? <Passform /> : <h3>Something is wrong :/ . {page}</h3>}
    </div>
  </AdminLayout>
);

export default withRouter(Admin);

字符串

使用Hooks

如果你喜欢钩子,你可以使用useRouter钩子。

import { useRouter } from 'next/router';

const Admin = () => {
const router = useRouter();

return (
  <AdminLayout>
    <style global jsx>
      {`
        body {
          background: #eff0f3;
        }
      `}
    </style>
    <div className="jumbotron" style={jumbotron}>
      {router.pathname == 'passform' ? <Passform /> : <h3>Something is wrong :/ . {page}</h3>}
    </div>
  </AdminLayout>);
};

export default Admin;


router.pathname将包含“config”URL,因此对于动态路由,它将包含[paramName]部分。

动态路由

您可以检查router.query是否存在动态部分。

import { useRouter } from 'next/router';

// assume that your dynamic route us `/static/[dynamicPart]`

const Admin = () => {
const router = useRouter();

return (
  <AdminLayout>
    <style global jsx>
      {`
        body {
          background: #eff0f3;
        }
      `}
    </style>
    <div className="jumbotron" style={jumbotron}>
      {router.query.dynamicPart == 'passform' ? <Passform /> : <h3>Something is wrong :/ . {page}</h3>}
    </div>
  </AdminLayout>);
};

export default Admin;

ljo96ir5

ljo96ir52#

使用AppDir路由器的NextJS 13

https://nextjs.org/docs/app/api-reference/functions/use-pathname

'use client'
 
import { usePathname } from 'next/navigation'
 
export default function ExampleClientComponent() {
  const pathname = usePathname()
  return <p>Current pathname: {pathname}</p>
}

字符串

相关问题