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

2024-06-26

因此,我正在开发一个 Nodejs 应用程序,我将在该应用程序上建立我的新网站,并且我想为客户端的用户提供一种显示不同内容的方法,根据用户按下的内容重新呈现。我的想法是,例如,首先用户会看到“请先选择一个工具”,然后用户将在导航栏中选择一个工具,然后页面将重新渲染并显示在大屏幕中选择的工具,其网址为例如更改/admin/[ToolSelected]。

唯一的问题是我不知道如何实现这一目标。我认为客户端代码可以检测 url 是什么,并将其作为页面变量放置,然后该工具将根据页面变量是什么显示 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

您可以用以下方式包装您的组件withRouter https://nextjs.org/docs/api-reference/next/router#withrouterHOC,这将注入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);

使用钩子

如果你喜欢钩子,你可以使用useRouter https://nextjs.org/docs/api-reference/next/router#userouter hook.

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] parts.

动态路线

您可以检查router.query https://nextjs.org/docs/pages/building-your-application/routing/dynamic-routes#example对于动态部分的存在。

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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在next.js中获取客户端当前的url 的相关文章

随机推荐

  • 将 WordPress 用户导入 Firebase 身份验证

    我正在将我的 Wordpress 网站迁移到 Firebase 我已成功将我的 Wordpress 用户导出为下面的 JSON 格式 如中所述文档 https firebase google com docs cli auth 我相信 Wo
  • 基于布尔 prop 的条件字段验证

    我想要favoriteAlcohol仅当以下情况时才需要验证 需要的字段props isAdult传递给组件的是true Yup object shape favoriteAlcohol Yup string when props isAd
  • wpf C# 中的内存泄漏

    我正在使用 GalaSoft MvvmLight 套件和 WPF Toolkit 开发 WPF MVVM v3 5 中 应用程序DataGrid and DatePicker 但是 每次加载应用程序时 我都会面临应用程序中的大量内存泄漏Us
  • socket.io 切换命名空间

    我目前正在与 socket io 进行简单的聊天 基础知识已经可以工作 但现在我正在尝试实现 2 个不同的命名空间 我希望客户端能够通过单击按钮从一个命名空间 支持聊天 切换到另一个命名空间 朋友聊天 服务器端 default namesp
  • Python select() 行为很奇怪

    我在理解 select select 的行为时遇到一些困难 请考虑以下 Python 程序 def str to hex s def dig n if n gt 9 return chr 65 10 n else return chr 48
  • 两种方式通信服务器/客户端架构?

    我试图找出我们的新应用程序使用哪种客户端 服务器技术 即 NET Framework 的哪一部分 我们将使用 NET 3 5 SP1 用 C 编写应用程序 它将由一个作为 服务器 运行的中央服务和分布在多台计算机上的多个客户端应用程序组成
  • 如何在 Coq 中将等式两边相加

    这似乎是一个非常简单的问题 但我找不到任何有用的东西 我有声明 n x n 并想证明 n x x n x 我还没有找到什么定理允许这样做 你应该看看rewrite策略 然后也许reflexivity 编辑 有关重写的更多信息 You can
  • 更改分页部分中显示项目的数量

    有没有什么方法可以更改 grails 2x 中用户将显示 bean 的数量更改为分页部分 我在 grails 文档中找不到这个 它的意思是 参见 itemsPerPage
  • 如何在 VBScript 中使用最少的分隔符和时区格式化日期时间?

    我在 C 中有以下代码 DateTime dt GetDateTime string formatted dt ToString yyyyMMddTHHmmsszz 它返回以下格式的日期 20100806T112917 01 我希望能够在
  • 部署.Net应用程序

    我在部署 net windows 应用程序时确实有某些疑问 部署机器是否需要安装 Net框架 如果不是这样 我的应用程序安装程序 exe 是否包含编译器或类库与设置集成 另外 我可以将我的 net 应用程序部署在除windows 是否支持s
  • Dynamics CRM - 用户登录时注册插件

    我想在用户登录 Dynamics CRM 上的帐户时触发事件 例如在 CRM 旁边打开一个 Web 应用程序 这可能吗 我知道我可以编写插件来增强某些业务流程 例如帐户创建 任何建议将被认真考虑 CRM 不会公开您可以在其上注册插件的 Us
  • 评估函数卷积时出错

    这是我第一次尝试用 matlab 编写任何东西 所以请耐心等待 我正在尝试评估以下 ODE 的解 w N w w f t 与柯西条件 w 0 w 0 0 这里 N 是给定的非线性函数 f 是给定的源 我也需要这个功能 其中 G 是以下 OD
  • 使用 SFTP 上传文件

    我已成功通过 ftp 上传文件 但现在需要通过 SFTP 上传 我可以成功连接到远程服务器 创建文件并写入文件 但无法将现有文件从本地服务器上传到远程服务器 ftp put 没有通过 sftp 连接触发吗 我的代码用来编写一个文件 Send
  • Firebase 函数 - FirebaseError:在非交互模式下运行时缺少必需的选项(强制)

    我有一个 Firebase 函数 当用户的帐户被删除时 它会删除 Firestore 数据库中用户的集合 const firebase tools require firebase tools const functions require
  • 如何在 Kotlin 中获取可绘制对象?

    I am working on a small project in Android Studio I have drawable added to res drawable folder 但是我无法从代码中获取它 我尝试过不同的方法 Co
  • android java.lang.OutOfMemoryError 错误

    当我从网站下载大数据时 我收到以下错误信息 I global 20094 Default buffer size used in BufferedInputStream constructor It would be better to b
  • 如何使用 Windows API 重置 USB 设备?

    您知道如何使用 Windows XP API 来重置 USB 总线吗 换句话说 我希望操作系统踢出当前连接的所有 USB 设备 然后重新自动检测所有设备 我知道devcon http support microsoft com kb 311
  • 在 Java 代码中存储加密密钥? [复制]

    这个问题在这里已经有答案了 我正在使用 JASYPT 在我们基于 Java 的软件中对密码进行加密解密 这就是我们加密密码的方法 StrongTextEncryptor textEncryptor new StrongTextEncrypt
  • 如何将 Windows 窗体应用程序 (C++) 设置为具有 Aero/Glass 背景?

    我正在使用 Visual Studio 2010 Pro 用 C 创建 Windows 窗体应用程序 我想创建一个透明背景 即使用 Aero Glass 效果 类似于它围绕 Windows 照片查看器中 UI 底部的方式 此时 我已经查看了
  • 在next.js中获取客户端当前的url

    因此 我正在开发一个 Nodejs 应用程序 我将在该应用程序上建立我的新网站 并且我想为客户端的用户提供一种显示不同内容的方法 根据用户按下的内容重新呈现 我的想法是 例如 首先用户会看到 请先选择一个工具 然后用户将在导航栏中选择一个工