首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React router v6使用javaScript对象和material-ui选项卡

React router v6使用javaScript对象和material-ui选项卡
EN

Stack Overflow用户
提问于 2021-02-17 02:10:39
回答 1查看 347关注 0票数 0

最近,我开始开发一个react应用程序,我有一个任务需要创建一些标签。当单击任何选项卡时,我必须加载所选选项卡应显示的页面。我还必须根据选择的选项卡更改url (我的区域不在客户端技术周围,所以我只是卡住了)

布局应该是这样的

我要做的是,在选择Menu2项目时,我必须显示选项卡,在选择选项卡时,我应该加载其内容。

url格式应该是这样的(本地主机:80/menu2- item /tab1/ {item1},其中{item1}可以是从内容中选择的项。

在应用程序中,我看到useRoutes钩子使用了类似这样的东西。

代码语言:javascript
复制
const routes = [
  {
    path: '',
    element: <DashboardLayout />,
    children: [
      { path: '/', element: <AccountView /> },
      { path: 'account', element: <AccountView /> },
      { path: 'control-center', element: <ControlCenterLayout /> },
      { path: '*', element: <Navigate to="/404" /> }
    ]
  }
];


const App = () => {
  const routing = useRoutes(routes);

  return (
    <ThemeProvider theme={theme}>
      <GlobalStyles />
      {routing}
    </ThemeProvider>
  );
};

DashboardLayout中有一个Outlet元素,据我所知,它用于显示子路由,我猜这是在routes对象中指定的“子路由”。我要做的是ControlCenterLayout部分。

我已经更新了routes对象中的ControlCenterLayout部分,以及它看起来像这样

代码语言:javascript
复制
 {
    path: 'control-center',
    element: <ControlCenterLayout />,
    children: [
      { path: 'item1', element: <Item1View/> },
      { path: 'item2', element: <Item2View/> },
    ]
  },

创建了一个TopBar元素

代码语言:javascript
复制
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import { Paper, Tabs, Tab} from '@material-ui/core';

const useStyles = makeStyles({
  root: {
    flexGrow: 1,
  },
});

const TopBar = ({ className, ...rest }) => {
  const classes = useStyles();
  const [tab, setTab] = React.useState(0);

  const handleChange = (event, newTab) => {
    setTab(newTab);
  };

  return (
    <Paper square className={classes.root}>
      <Tabs value={tab} onChange={handleChange} >
        <Tab label="Item1View"  />
        <Tab label="Item2View" />
      </Tabs>    
    </Paper>
  );
};

引用TopBar的index.js

代码语言:javascript
复制
const ControlCenterLayout = () => {
    const classes = useStyles();

    return (
      <div className={classes.root}>
        <TopBar />
        <div className={classes.wrapper}>
          <div className={classes.contentContainer}>
            <div className={classes.content}>
              <Outlet />
            </div>
          </div>
        </div>
      </div>
    );
}

但我不知道如何使用工艺路线和物料-ui标签来获得结果,也不知道我是否在正确的轨道上。

EN

回答 1

Stack Overflow用户

发布于 2021-02-17 04:37:46

基本上,您需要在BrowserRouter中添加AppBar

代码语言:javascript
复制
      <BrowserRouter>
        <AppBar position="static">
          <Tabs
            variant="fullWidth"
            value={value}
            onChange={handleChange}
            aria-label="nav tabs example"
          >
            <LinkTab label="Main" pathname="/" {...a11yProps(0)} />
            <LinkTab label="Users" pathname="/users" {...a11yProps(0)} />
            <LinkTab label="Me" pathname="/users/me" {...a11yProps(1)} />
          </Tabs>
        </AppBar>
        <Routes>
          <Route path="/" element={<Main />} />
          <Route path="users" element={<Users />}>
            <Route path="/" element={<UsersIndex />} />
            <Route path="me" element={<OwnUserProfile />} />
          </Route>
          <Route path="*" element={<Other />} />
        </Routes>
      </BrowserRouter>

另外,配置Material UI选项卡组件,使其行为类似于链接组件与component={Link}属性链接。

检查附加的工作沙箱Url。https://codesandbox.io/s/muitabs-v6routing-5odvz?file=/src/index.js

修正了左侧抽屉导航的问题。我希望这能帮到你

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

https://stackoverflow.com/questions/66229872

复制
相关文章

相似问题

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