首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在同一页上的两个组件之间切换?

问如何在同一页上的两个组件之间切换?
EN

Stack Overflow用户
提问于 2020-11-06 03:23:56
回答 3查看 3.4K关注 0票数 2

我试图在React中创建一个登录和注册页面,其想法是它们应该在同一个页面上呈现,并且用户应该能够在它们之间切换(类似于这个示例)

我可以在组件之间创建切换函数(使用useState),但问题是我也需要根据用户的选择更改url (如果用户想登录,url应该是"/login",如果注册=> "/signup")。我为Login和Signup创建了不同的组件,但它们是在不同的页面上打开的,我想要实现的是,它们都在同一个登录页面上。

我的CodeSandbox代码

代码语言:javascript
复制
import React from "react";
import "./styles.css";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import Login from "./Login";
import SignUp from "./SignUp";

export default function App() {
  return (
    <div className="App">
      <Router>
        <Switch>
          <Route exact path="/">
            <Login />
          </Route>
          <Route exact path="/sign-up" component={SignUp} />
        </Switch>
      </Router>
    </div>
  );
}
代码语言:javascript
复制
import React from "react";
import { Link } from "react-router-dom";

export default function Login() {
  return (
    <div style={{ display: "flex", flexDirection: "column" }}>
      <div style={{ display: "flex", justifyContent: "space-evenly" }}>
        <Link to="/">
          <h1>Login</h1>
        </Link>

        <Link to="/sign-up">
          <h1>Sign Up</h1>
        </Link>
      </div>

      <form
        style={{ display: "flex", flexDirection: "column", padding: "40px" }}
      >
        <input type="email" placeholder="email"></input>
        <input type="password" placeholder="password"></input>
      </form>
    </div>
  );
}
代码语言:javascript
复制
import React from "react";


export default function SignUp() {
  return (
    <div>

   <form style={{display:"flex", flexDirection:"column", padding:"40px"}}>
     <input type ="name" placeholder="Name"></input>
     <input type ="email" placeholder="email"></input>
     <input type ="password" placeholder="password"></input>
   </form>

   </div>
  );
}

我对Js的反应很新,所以我不知道这是否可能。如有任何建议和帮助我将不胜感激,谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-06 04:12:55

分别创建一个头组件,并在两个位置(登录和注册)组件中导入它。

示例

Header.js

代码语言:javascript
复制
export default function Header() {
  return (
    <div style={{ display: "flex", justifyContent: "space-evenly" }}>
    <Link to="/">
      <h1>Login</h1>
    </Link>

    <Link to="/sign-up">
      <h1>Sign Up</h1>
    </Link>
  </div>
  )
}

现在将其导入登录和注册组件中。

Login.js

代码语言:javascript
复制
<div style={{ display: "flex", flexDirection: "column" }}>
     <Header />

      <form
        style={{ display: "flex", flexDirection: "column", padding: "40px" }}
      >
        <input type="email" placeholder="email"></input>
        <input type="password" placeholder="password"></input>
      </form>
    </div>

SignUp.js

代码语言:javascript
复制
<div>
     <Header />
      <form
        style={{ display: "flex", flexDirection: "column", padding: "40px" }}
      >
        <input type="name" placeholder="Name"></input>
        <input type="email" placeholder="email"></input>
        <input type="password" placeholder="password"></input>
      </form>
    </div>

更新的现场工作演示

票数 1
EN

Stack Overflow用户

发布于 2020-11-06 03:40:21

首先,不要在登录组件中包含“登录”和“注册”链接。把它们移到你的App.js。

App.js

代码语言:javascript
复制
<div className="App">
  <Router>
    <Switch>
      <Route path="/">
        <div style={{ display: "flex", justifyContent: "space-evenly" }}>
          <Link to="/login">
            <h1>Login</h1>
          </Link>

          <Link to="/sign-up">
            <h1>Sign Up</h1>
          </Link>
        </div>

        <Route exact path="/sign-up" component={SignUp} />
        <Route exact path="/Login" component={Login} />
      </Route>
    </Switch>
  </Router>
</div>

请注意,必须删除exact中的<Route exact path='/'>,以便在路由更改时可以切换和呈现登录或注册页面。您可以始终引用反应-路由器教程。

对于Login组件,只需包含表单(就像您为注册组件所做的那样),这就足够了。

更新的代码沙箱

票数 2
EN

Stack Overflow用户

发布于 2020-11-06 03:48:08

从<Login />组件中删除<App />标记,并将其添加到component支柱中,就像添加了注册一样。您可以在"/“路由中查看登录页面。

然后从登录组件中删除<Link to="/">标记,只保留<Link to="/sign-up" >。然后,当您按照登录页面中的链接运行时,将被路由到注册组件。

但是,要做到这一点,你需要“反应路由器”的“历史”。从"react“导入"useHistory”,并将history = useHistory()放在登录组件中(以及在注册组件中进行回路由),并添加<Link to="sign-up" onClick = {() => history.push('/sign-up')}。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64708411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档