使用 @Material-UI 选项卡作为导航栏

Posted

技术标签:

【中文标题】使用 @Material-UI 选项卡作为导航栏【英文标题】:Using @Material-UI Tabs as Navbar 【发布时间】:2018-12-21 04:14:10 【问题描述】:

对编码空间相当陌生。我尝试到处寻找这个问题的答案,虽然我找到了很多答案,但没有一个对我有用。

我的问题是我想将@Material-UI 选项卡组件用作导航栏,而我似乎只能 1. 将选项卡转换为可以工作但没有动画或指示器的静态链接,或者 2. 保留动画,但没有改变页面的功能。

我尝试了this、this、this 等,并在其中找到了许多答案。

编辑:Here 是一个 Git 存储库。

这是我的 NavBar 组件,目前处于状态 #2,它有动画但没有功能:

import React from 'react';
import  Paper, Tabs, Tab  from '@material-ui/core';

const navStyle= 
    backgroundColor: '#220000',
    color: '#fff',


export class NavBar extends React.Component 
    state = 
        value: 0,
    ;

handleChange = (event, value) => 
    event.preventDefault();
    this.setState( value );
    console.log(value)
;

render()       
    return (
        <div>
            <Paper>
                <Tabs
                    value=this.state.value
                    onChange=this.handleChange
                    indicatorColor="secondary"
                    // textColor="secondary"
                    centered
                    style=navStyle
                >
                    <Tab label="Home" href='/' />
                    <Tab label="About" href='/about' />
                </Tabs>
            </Paper> 
        </div>
    )
 

依赖:

"@material-ui/core": "^1.3.1",
"history": "^4.7.2",
"prop-types": "^15.6.2",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"react-router-dom": "^4.3.1",
"react-scripts": "1.1.4"

【问题讨论】:

【参考方案1】:

你可以将你的 Tab 组件变成 React Router Link 组件,就像在你链接的第一个示例中一样。

请确保不要在 handleChange 事件中使用 preventDefault,因为这会阻止链接工作。

示例

class App extends React.Component 
  state = 
    value: 0
  ;

  handleChange = (event, value) => 
    this.setState( value );
  ;

  render() 
    return (
      <BrowserRouter>
        <div>
          <Paper>
            <Tabs
              value=this.state.value
              onChange=this.handleChange
              indicatorColor="secondary"
              centered
              style=navStyle
            >
              <Tab label="Home" to="/" component=Link />
              <Tab label="About" to="/about" component=Link />
            </Tabs>
          </Paper>
          <Switch>
            <Route exact path="/" component=Home />
            <Route path="/about" component=About />
          </Switch>
        </div>
      </BrowserRouter>
    );
  

【讨论】:

以上是关于使用 @Material-UI 选项卡作为导航栏的主要内容,如果未能解决你的问题,请参考以下文章

Material-UI 的选项卡与反应路由器 4 集成?

根据选择的选项卡更改导航栏的标题?

在每个选项卡错误处使用导航控制器从视图控制器转换到选项卡栏控制器

如何在导航栏中舍入当前选项卡上方和下方的选项卡,除了当前选项卡之外,还隐藏导航栏

引导、导航选项卡、下拉菜单;如何根据 URI 设置活动选项卡

将导航选项卡添加到 Tailwind CSS 导航栏