reactjs - 如何使用带有 react-router 的选项卡重定向到另一条路由?
问题描述
我有这个组件:index.js
const Routes = () => (
<Switch>
<Tab panes={[
{
menuItem: {
as NavLink,
content : 'un',
key: "un",
to: "${match.url}/un"
},
render: () => <Route path="${match.url}/un" component={un} />
},
{
menuItem: {
as NavLink,
content : 'deux',
key: "deux",
to: "${match.url}/deux"
},
render: () => <Route path="${match.url}/deux" component={deux} />
}]}
/>
</Switch>
);
我想以编程方式"deux"
从组件中调用组件"un"
,如下所示:
<Button onClick={() => history.push("/deux") } />
它不是这样工作的,url 改变了但组件没有加载。
它使用Tab
从semantic-ui-react
解决方案
import React, { useEffect, useState } from "react";
import { Route, RouteComponentProps, Switch } from "react-router";
import { Link, NavLink } from "react-router-dom";
import { Label, List, Tab } from "semantic-ui-react";
interface DetailParams {
id: string;
}
export const TabExample: React.FC<RouteComponentProps<DetailParams>> = ({
match,
history,
}) => {
const [counter, setCounter] = useState(60);
useEffect(() => {
setTimeout(() => setCounter(counter - 1), 1000);
});
const Profile = () => <div>{counter}</div>;
const Comments = () => <div>You're on the Comments Tab</div>;
const Contact = () => <div>You're on the Contact Tab</div>;
const [tabs, setTab] = useState([
{
menuItem: {
as: NavLink,
id: "tab1",
content: "tab1",
to: `${match.path}/tab1`,
exact: true,
key: "tab1",
},
pane: (
<Route
path={`${match.path}/tab1`}
exact
render={() => (
<Tab.Pane>
<Profile/>
</Tab.Pane>
)}
/>
)
},
{
menuItem: {
as: NavLink,
id: "tab2",
content: "tab2",
to: `${match.path}/tab2`,
exact: true,
key: "tab2",
},
pane: (
<Route
path={`${match.path}/tab2`}
exact
render={() => (
<Tab.Pane>
<Contact/>
</Tab.Pane>
)}
/>
)
},
{
menuItem: {
as: NavLink,
id: "tab3",
content: "tab3",
to: `${match.path}/tab3`,
exact: true,
key: "tab3",
},
pane: (
<Route
path={`${match.path}/tab3`}
exact
render={() => (
<Tab.Pane>
<Comments/>
</Tab.Pane>
)}
/>
)
},
]);
const ekle = () => {
debugger;
setTab((names) => [
...tabs,
{
menuItem: {
as: NavLink,
id: "tab33",
content: "Config Lists",
to: `${match.path}/tab33`,
exact: true,
key: "configs",
},
pane: (
<Route
path={`${match.path}/tab33`}
exact
render={() => (
<Tab.Pane>
<Comments/>
</Tab.Pane>
)}
/>
)
},
]);
};
return (
<div>
<Switch>
<Tab panes={tabs} activeIndex={-1} renderActiveOnly={false} />
</Switch>
<button onClick={() => ekle()}>Ekle</button>
</div>
);
};
推荐阅读
- google-apps-script - 数据不会正确发布
- java - 如何使用中间证书创建 PKCS12 文件?
- sql-server - 当我检查 SentryIO 时,'CAST' 附近的语法不正确,预期为 'AS'
- java - 来自 Kafka 的消息未发送到 Clickhouse
- oracle - 使用 IDE 工具(如 SQL Developer 或 Toad)的 Oracle 并行查询行为
- django - Django中状态管理的最佳实践
- c++ - 如何使用 nvcc 将共享库 (.so) 链接到 CUDA 源文件 (.cu)?
- javascript - 将更改的参数从挂钩传递到 setInterval()
- listview - Xamarin:标签在 ListView 中消失
- swift - 在 Swift 中减少 Result 数组