MUI 导航选项卡不适用于 react-router

Posted

技术标签:

【中文标题】MUI 导航选项卡不适用于 react-router【英文标题】:MUI Nav Tabs does not work with react-router 【发布时间】:2021-12-15 09:30:10 【问题描述】:

以下是四个组成部分:

App.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;

Nav.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>
    )

Home.js:

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

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

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

在这里,我希望当我切换选项卡时,它也会更改组件和地址 URL。我该怎么做?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

一切正常。谢谢。您在路线中使用选项卡组件。但我想在 Home 或 Contact 组件中使用 tab 组件。这可能吗?

以上是关于MUI 导航选项卡不适用于 react-router的主要内容,如果未能解决你的问题,请参考以下文章

猫头鹰轮播不适用于引导选项卡导航

禁用的字段集内的引导选项卡不适用于Firefox

hbuild mui 开发的webapp 怎么实现切换选项卡,然后执行一次下拉刷新更新数据,求各位大神指教

MUI顶部选项卡的用法(tab-top-webview-main)

如何使用 React Router 维护路由之间的状态?

MUI 自动完成功能不适用于 react-hook-form