首页 > 解决方案 > MUI 导航选项卡不适用于 react-router

问题描述

以下是四个组成部分:

应用程序.js:

import React from 'react';
import { Route, Switch } from 'react-router-dom';
import About from './About';
import Home from './Home';

const App = () => {
  return <Switch>
    <Route path="/about">
      <About />
    </Route>
    <Route path="/">
      <Home />
    </Route>
  </Switch>
}

export default App;

导航.js:

import * as React from 'react';
import {Box,Tabs,Tab} from '@material-ui/core';

function LinkTab(props) {
  return (
    <Tab
      component="a"
      onClick={(event) => {
        event.preventDefault();
      }}
      {...props}
    />
  );
}

export default function NavTabs() {
  const [value, setValue] = React.useState(0);

  const handleChange = (event, newValue) => {
    setValue(newValue);
  };

  return (
    <Box sx={{ width: '100%' }}>
      <Tabs value={value} onChange={handleChange} aria-label="nav tabs example">
        <LinkTab label="Home" href="/" />
        <LinkTab label="About" href="/about" />
      </Tabs>
    </Box>
  );
}

关于.js:

import React from 'react'
import NavTabs from './Nav'

export default function About() {
    return (
        <div>
            <NavTabs/>
            About
        </div>
    )
}

主页.js:

import React from 'react'
import NavTabs from './Nav'

export default function Home() {
    return (
        <div>
            <NavTabs/>
            Home
        </div>
    )
}

在 Nav.js 中,当我想切换选项卡时,它不会切换到另一个选项卡。URL 链接也不会更新。它始终是第一个链接。

在这里,我希望当我切换选项卡时,它也会更改组件和地址 URL。我怎样才能做到这一点?

标签: reactjsreact-routermaterial-uireact-router-domreact-material

解决方案


element的href属性a使整个页面刷新,这违背了 react-router 的目的。在 react-router 中,您应该使用Link组件并提供toprop 来告诉 react-router 在不更改应用程序状态的情况下导航到不同的路由:

// <a href='/about' {...} />
<Link to='/about' {...} />

您可以通过将根组件替换为TabwithLink而不是来修复它,并将to属性a更改为:hrefto

// <Tab component='a' label="Home" href="/" />
<Tab component={Link} label="Home" to="/" />

Codesandbox 演示


推荐阅读