React Routing - 如何使用路由加载弹出窗口

React Routing - How to load pop up using Routes

我有: 1.登录组件 2.注册组件

在登录组件中,有一个link叫注册器。它将它路由到注册页面。代码很简单:

<Link to='/register' className='links align-left'>Register</Link>

我想改为在弹出窗口中显示注册组件。我知道,我可以使用对话框组件并在该对话框中显示注册组件。很简单,但我不明白的是如何设置我的路由,以便它在后面显示登录 window,并在弹出窗口中加载注册组件。让我用一个例子来解释。在以下屏幕截图中查看 trello board 的工作原理。 url 是 https://trello.com/b/i1QoQatf/

现在当我点击一个项目时,它会显示一个弹出窗口,如下面的屏幕截图所示。请注意 URL 现在是 https://trello.com/c/QisVDEgX/639-sort-all-dropdowns-alphaetically

现在我的困惑是,如何为我的登录和注册组件实现相同的功能。如果我这样加载路由:

<Route path='/register' component={RegisterComponent} />

会调用注册组件的render方法,然后只加载注册组件。我如何将它路由到注册组件,并且仍然在后台使用登录。有什么帮助吗?

我认为要实现这一点,您的 RegisterComponent 必须呈现登录组件和注册弹出窗口。

在您的呈现函数中,您将 return 其中 RegisterPopup 是您在弹出窗口中呈现的注册表单(假设反应模式)

<React.Fragment>
    <LoginComponent/>
    <RegisterPopup/>
</React.Fragment>

在这里添加我的解决方案,以便人们理解路由的概念。

如果您使用的是 NextJS,这实际上非常简单。在 NextJS 中,我们需要使用服务器(如 express)进行路由。 NextJS 路由器非常强大并提供了很大的灵活性。此外,NextJS Link 标签同样强大。以下是如何在不加载页面的情况下实现url路由的说明。

一般来说,您可以通过两种方式到达页面。 1. 单击 link/button(例如立即注册) 2. 直接在浏览器中粘贴 URL。比方说,我有两个 URLs:

  1. https://example.com/login
  2. https://example.com/register

现在,我想要实现的是,当我在我的登录页面中单击 "Register Now" link 时,它应该将我的页面路由到 /register 但仍然在后台显示登录页面,和弹出窗口中的注册表。但请记住,我想通过确保登录组件不会加载两次来实现此目的。

使用 NextJS,以下是实现它的方法:

  1. 我们将创建下一个名为 account.js
  2. 的 js 页面
  3. 为了路由到我们的登录页面,登录屏幕的 link 将类似于以下内容:
    <Link href={{pathname: '/account', query: { mode: 'login' }}} as {'/login}>
    <a>Login</a>
    </Link> 

link 页面会将我们引导至帐户页面。

  1. 如果您注意到,link 标签不是普通的 href。上面的 link 标签表示 "we want to go to account page, but show url as "/login",当我们呈现帐户页面时,将查询 {mode: 'login'} 发送到帐户页面的路由器对象。

  2. 在account page的render函数中,我们可以根据router的query object轻松在运行时间内做出决定。

      render() {
        const mode = this.props.router.query.mode;


        return (
          <div>
            <LoginComponent></LoginComponent>
            {/* the following line will open the register component in a popup */}
            {mode === 'registration' && <PopUp><RegisterComponent></RegisterComponent></PopUp>}
          </div>
        )

      }
  1. 在登录组件中,我们将添加注册link,如下所示:
        <Link href={{pathname: '/account', query: { mode: 'registration' }}} as={`/`}>
          <a>Register Now</a>
        </Link>

在上面的示例中,我们所做的只是创建了一个名为 accounts.js 的页面。我们确保当我们路由到登录 window 时,我们将它路由到帐户页面,但我们发送模式:'login'。当我们点击注册 link 时,我们正在加载相同的页面 - accounts.js 但使用不同的模式:'registration'。 render 函数会在 popup 中打开 register 组件,因为 mode 是 === 'registration'。在url中,它将显示地址为'/register'

请注意:该示例代码仅供参考,绝不是经过测试的代码,因此请牢记。