提问人:Hazal Kaya 提问时间:8/30/2022 最后编辑:Hazal Kaya 更新时间:9/1/2022 访问量:1155
在 React 中为两个不同的页面制作选项卡
making tabs in react for two different pages
问:
我正在尝试在 reactjs 中制作选项卡,但做不到
我想要的是登录页面和注册页面之间有选项卡
这两个页面都有一个单独的组件
我知道我错过了一些东西,但不确定它在哪里
这是我的代码
import React, { useState } from "react";
import Login from "./Login";
import SignUp from "./SignUp";
const Tabs = () => {
const [login, setLogin] = useState(true);
const [signup, setSignUp] = useState(true);
const handleLogin = () => {
setLogin(true);
setSignUp(false);
};
return (
<>
<div className="tabs">
<button onClick={() => setLogin(true)}> Üyelik Girişi</button>
<button onClick={() => setLogin(false)}>Yeni Uyelik</button>
{signup && <SignUp />}
{/* {login && <Login />} */}
</div>
</>
);
};
export default Tabs;
所以,我无法弄清楚的是,如何将函数定向到所需的页面
答:
1赞
Yasin Tazeoglu
8/30/2022
#1
你的问题有点绝对,但我尽可能多地回答。
我认为您正在使用 react-router,您可以使用 react-router useNavigate 钩子。
它看起来像
const navigate = useNavigate();
const handleLogin = ()=> {
navigate('/login');
};
如果你没有使用 react-router 并通过状态管理路由;
它看起来像
const handleLogin = ()=> {
setLogin(true);
setSignup(false);
};
// do something for signup hanlder
return (
<div>
{
// your tab buttons
}
{signup && <SignupPage />}
{login && <LoginPage />}
</div>
)
评论
0赞
Hazal Kaya
8/30/2022
谢谢你的回答,我正在使用路由器,它运行良好,但他们要求我使用需要成为状态的选项卡来做到这一点
0赞
Hazal Kaya
8/30/2022
你能检查一下我编辑的代码吗?
0赞
Hazal Kaya
9/1/2022
您的代码运行良好,但它将两个组件呈现在彼此之下!
0赞
Hazal Kaya
9/1/2022
你能检查一下我编辑的代码吗?
0赞
Yasin Tazeoglu
9/1/2022
我有点困惑。“你的代码运行良好,但它将两个组件呈现在彼此之下!”是什么意思?
0赞
Alpha
8/30/2022
#2
如果你想使用状态来实现这种行为,你可以做这样的事情。我在代码中添加了注释,以便您更好地理解代码。
const App = () => {
// depending upon this state you can show different JSX
const [pageIndex, setPageIndex] = useState(0);
/// function that return JSX FOR LOGIN
const handleLoginJSX = () => {
return <div>... login JSX </div>;
};
/// function that return JSX FOR SINGUP
const handleSingUpJSX = () => {
return <div>... sing up JSX </div>;
};
return (
<div>
{/* tab code */}
<ul>
<li onClick={() => setPageIndex(0)}>Login </li>
<li onClick={() => setPageIndex(1)}>Sing up</li>
</ul>
{/* tab code end */}
{/* YOUR JSX */}
{pageIndex == 0 ? handleLoginJSX() : handleSingUpJSX()}
{/* YOUR JSX END*/}
</div>
);
};
0赞
David-T-John
8/30/2022
#3
你所指的概念称为路由。在 React 中添加多个“页面”或“视图”的最佳方法是使用预构建的库,即 而不是那样处理它。react-router-dom
然后,您可以使用元素将您路由到不同的页面(例如,从导航到 ),它将保留浏览器历史记录,以便您的用户可以像您期望的那样使用后退和前进按钮。Link
yoursite.com/login
yoursite.com/signup
在此处查看此库的文档:https://reactrouter.com/en/main/getting-started/tutorial
0赞
Hazal Kaya
9/1/2022
#4
所以,这段代码对我来说效果很好 将两个组件呈现在彼此之下的问题是因为在 App.js 中使用路由器
在我删除它之后,它对我来说工作正常
import { Tab, Tabs, TabList, TabPanel } from "react-tabs";
// import "react-tabs/style/react-tabs.css";
import "./Tabs.css";
import React from "react";
import Login from "./Login";
import SignUp from "./SignUp";
const LoginTabs = () => {
return (
<>
<Tabs>
<TabList>
<Tab>Üyelik Girişi</Tab>
<Tab>Yeni Üyelik</Tab>
</TabList>
<TabPanel>
<h2>
{" "}
<Login />{" "}
</h2>
</TabPanel>
<TabPanel>
<h2>
{" "}
<SignUp />{" "}
</h2>
</TabPanel>
</Tabs>
</>
);
};
export default LoginTabs;
下一个:需要循环来简化组件
评论