如何让 Material-UI 选项卡与 React-router 一起使用?

2024-01-23

我正在尝试让 Material-UI 选项卡与路由一起使用,当路由正在工作并显示所选选项卡时,选项卡之间导航的流畅动画不再起作用。如何将 React Router 与 Material-UI 选项卡一起使用,以保持选项卡动画正常工作?

截至目前,我的 HomeHeader.js 中有选项卡,并且我正在使用此组件将 vale 作为 props 传递下去,以便更改值,从而更改所选选项卡。

为了简单起见,我简化了代码以显示我想要链接的选项卡。

这是我的代码:

header.js(带选项卡的组件):

import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { Link } from 'react-router-dom'

class HomeHeader extends Component {

  state = {
    value: false
  };

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

  render() {
    const { classes, value } = this.props

    return (
        <AppBar className={classes.appBar} elevation={this.props.elevation}>
          <Hidden smDown>
            <Grid container justify="space-between" alignItems="center">
              <Tabs value={value} onChange={this.handleChange}>
                <Tab label="monitor" component={Link} to="/monitor" />
                <Tab label="sensor" component={Link} to="/sensor" />
              </Tabs>
            </Grid>
          </Hidden>
        </AppBar>
    )
  }
}

export default withStyles(styles)(HomeHeader)

Tab 1 组件(将值作为 props 传递到 HomeHeader.js):

import React from 'react'

import HomeHeader from '../components/HomeHeader'

class SensorProductPage extends React.PureComponent { // eslint-disable-line react/prefer-stateless-function

  render() {
    return (
      <div>
        <HomeHeader value={1} />
        <div> Hello </div>
      </div>
    );
  }
}

export default SensorProductPage

Tab 2 组件(将值作为 props 传递到 HomeHeader.js):

import React from 'react'

import HomeHeader from '../components/HomeHeader'

class MonitorProductPage extends React.PureComponent {

  render() {
    return (
      <div>
        <HomeHeader value={0} />
        <div> Hello </div>
      </div>
    );
  }
}

export default MonitorProductPage

您在这里使用路由的方式效率很低。

应该是选项卡在一个地方实现,并且只在一个地方实现,如下所示(根本不需要在每个页面中使用 HomeHeader):

 <BrowserRouter>
    <div className={classes.root}>
      <AppBar position="static" color="default">
        <Tabs
          value={this.state.value}
          onChange={this.handleChange}
          indicatorColor="primary"
          textColor="primary"
          fullWidth
        >
          <Tab label="Item One" component={Link} to="/one" />
          <Tab label="Item Two" component={Link} to="/two" />
        </Tabs>
      </AppBar>

      <Switch>
        <Route path="/one" component={PageShell(ItemOne)} />
        <Route path="/two" component={PageShell(ItemTwo)} />
      </Switch>
    </div>
  </BrowserRouter>

如您所见,选项卡要求切换渲染组件中的链接和路由

对于我使用这篇文章的动画:https://blog.logrocket.com/routes-animation-transitions-in-react-router-v4-9f4788deb964 https://blog.logrocket.com/routes-animation-transitions-in-react-router-v4-9f4788deb964

他们在这里使用React-addons-css-transition-group

请在demo中找到动画index.css文件

我包装了如何使路由更容易的页面(appShell 组件)

这是一个工作示例:https://codesandbox.io/s/04p1v46qww https://codesandbox.io/s/04p1v46qww

希望这会给你一个良好的开端

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 Material-UI 选项卡与 React-router 一起使用? 的相关文章

  • Pug 从模板内的另一个文件调用 js 函数

    我花了将近四个小时都无法解决这个问题 而且我找不到任何针对此类问题的有用文档 这就是问题 我正在使用 pug jade 模板 我想调用 pug 模板内的函数来转换一些数据 这是主要模板 main template section each
  • 网络上的等角柱状图

    我计划为游戏的标记 图钉 构建在线地图 但我无法设置标记的正确纬度 原始地图是一个2048 2048px 的正方形 然后我得到了标记 数千个 地图坐标使用 0 到 100 之间的 x y 表示法设置 0 0 是top left角和100 1
  • 如何正确地将节点从引用传递到上下文?

    我正在尝试将节点从引用传递到上下文 但是因为我在第一次渲染后没有重新渲染 所以传递的节 点是null 我考虑了两种变体 但我认为它们不是最好的 To pass ref代替ref current 但在用例中 我将被迫使用类似的东西contex
  • 从 puppeteer PDF 中删除分页符?

    我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
  • 如何在 Windows 网络中的 Intranet Web 应用程序中获取用户的用户名

    我内部有一个简单的 HTML 页面 它只显示一个表单并要求用户填写 我想自动捕获Windows域用户名和机器名 并将其与表单中收集的数据一起提交 我可以在客户端这样做吗 HTML JavaScript 或者我被迫在服务器端执行此操作 我还不
  • ASP.NET 验证控件和 Javascript 确认框

    我有一个使用 NET 服务器端输入验证控件的页面 此页面还有一个 javascript 确认框 在提交表单时会触发该确认框 当前 当选择 提交 按钮时 会出现 javascript 确认框 一旦确认 就会触发 ASP NET 服务器端验证控
  • 无需重定向的 HTML 页面提交

    有没有什么方法可以在不使用ajax的情况下提交html表单而无需从当前页面重定向 你可以设置一个target 为您form 这样您就可以将表单提交到新选项卡 target blank 或一个小的 隐藏的iframe target nameo
  • 替换img路径jquery

    我正在尝试替换 jquery 中的 img 路径 注入远程页面 replaceexample com thumbs withexample com images 我已经尝试过这个 但似乎不起作用 img attr src replace t
  • 如何跨多个 React Redux 组件使用 requestAnimationFrame 实现游戏循环?

    努力思考最好的解决办法 我可以使用递归调用requestAnimationFrame有一个游戏循环 export interface Props name string points number onIncrement gt void o
  • JS:修改 JS 对象中的值/对

    我正在尝试找出修改对象的最佳方法 而无需三次写出类似的对象 所以我有这三个对象 var object1 start start end end type 1 var object2 start start end end type 2 va
  • 如何在MUI GridList中实现图块的水平滚动?

    这是我的 JS 页面 我需要在其中实现GridList组件显示多个图块 并且在列表大小超出屏幕限制后可水平滚动 import React useState from react import Header from common heade
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • JavaScript setTimeout 和更改系统时间会导致问题

    我注意到如果我设置setTimeout未来1分钟 然后将我的系统时间更改为过去5分钟 setTimeout功能将在 6 分钟后触发 我这样做是因为我想看看夏令时系统时钟更改期间会发生什么 我的 JavaScript 网页使用setTimeo
  • jQuery:向左滑动和向右滑动

    我见过slideUp and slideDown在 jQuery 中 左右滑动的功能 方式怎么样 您可以使用 jQuery UI 中的附加效果来做到这一点 详情请参阅此处 http docs jquery com UI Effects Sl
  • eventSources 到事件 Json,完整日历

    我正在尝试从 eventSources 获取 json 调用到我的事件 我在 eventSources 中返回的 json 是 title Title Test start 1305841052 当我将此字符串传递到事件中时 它会正确显示日
  • 从json中获取所有子节点

    我有以下 json var source k 01 k 02 children k 05 k 06 children k ABC k PQR k 07 k 03 我希望能够指定 k 的值并取回所有孩子 以及孙
  • YouTube 点击时禁用 HTML5

    有没有办法让我们通过javascript禁用HTML5视频的 播放 暂停 点击全屏 功能 然后在我们再次需要时将其放回去 我不知道你是否可以禁用它们 但你可以使用 css 删除它们 video webkit media controls f
  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已

随机推荐

  • 通过 tqdm.write() 重定向 python 脚本中的打印命令

    我在用着tqdm在 Python 中显示脚本中的控制台进度条 但是 我必须调用函数print消息也发送到控制台 我无法更改 一般来说 在控制台中显示进度条时写入控制台会弄乱显示 如下所示 from time import sleep fro
  • 将 tqdm 与并发.futures 一起使用吗?

    我有一个多线程函数 我想要一个状态栏来使用tqdm 有没有一种简单的方法来显示状态栏ThreadPoolExecutor 让我困惑的是并行化部分 import concurrent futures def f x return f 2 my
  • 检查引荐来源网址

    我用它来检查某人是否来自 Reddit 但它不起作用 var ref document referrer if ref match http www reddit com gi alert You came from Reddit else
  • JavaScript 类型的最大大小?

    通过研究 javascript 类型 我试图找出某些数据类型的最大存储大小是多少 例如 我设置了一个快速递归算法来增加 var 大小 直到浏览器崩溃 最终在我现有的 chrome 版本上 字符串接近 128mb 或者可能是 256 我一直在
  • DynamoDb 如何查询全局二级索引?

    我创建了一个如下表 其中全局二级索引为 Em 代表电子邮件 TableName Users KeySchema AttributeName Ai KeyType HASH Partition key AttributeName Ui Key
  • 如何使用 Identity 在 ASP.NET Core 项目中禁用 HTTPS?

    我最近在 Visual Studio 2019 中创建了一个 ASP NET Core 3 0 Web 应用程序项目 启用了 Docker 但我认为这不相关 并且在包含 ASP NET Identity 时似乎无法禁用 HTTPS个人用户帐
  • 找不到目标“x86_64-apple-ios-simulator”的模块

    我有我的自定义框架 它在 XCode 10 中正常工作 我在 XCode 11 beta 3 中重建它 然后集成到应用程序中 并收到以下错误 找不到目标 x86 64 apple ios simulator 的模块 MyCustomFram
  • 生成7位随机数

    如何产生 100 万到 1000 万之间的随机数 rand 10 有效 我试过了rand 1 10 但这不起作用 取你的基数 1 000 000 并添加一个从 0 到最大起始数的随机数 1 000 000 Random rand 10 00
  • Log4Net配置日志级别

    我该如何制作Log4net http logging apache org log4net index html只记录Info级别的日志 这可能吗 只能设置一个阈值吗 这就是我所拥有的 它按照我的预期记录了信息及以上内容 我能做些什么让它只
  • 无法导入Pytorch [WinError 126]找不到指定的模块

    我正在尝试在 Windows 10 上进行 Pytorch Torchvision 的基本安装和导入 我安装了 Anaconda 并创建了一个名为 photo 的新虚拟环境 我打开 Anaconda 提示符 激活环境 然后运行 photo
  • 如何在 jQuery 中获取前一个 `` 的值?

    如何获取上级的ID td s td
  • 如何在谷歌计算引擎上打开端口

    在谷歌计算引擎上 我可以通过 localhost 访问服务器上的端口 但我无法使用来自同一服务器或外部客户端计算机的 IP 地址访问同一端口 我尝试在Web控制台页面上创建新的防火墙规则 并且可以从Linux命令中看到它 但端口8888仍然
  • 是否可以在不使用助手的情况下在车把模板中分配参数值?

    我正在尝试在模板中分配值 想法是执行以下操作 if author className classA lt trying to implement this line else className classB if div class di
  • 如何在 HTML 中嵌入流媒体视频 (rtmp)

    如何在 HTML 中嵌入流媒体视频 rtmp 链接rtmp http 42 116 119 44 4022 udp 225 1 2 244 30120 http 42 116 119 44 4022 udp 225 1 2 244 3012
  • 将 (u)int64_t 转换为 NSNumber

    所以本质上我的问题是这样的 我正在使用 uint64 t 对象作为键创建一个 NSMutableDictionary 还有比这样做更好的方法来创建它们吗 uint64 t bob 7 NSNumber bobsNumber if LP64
  • Android Studio 插件 Fabric 中出现异常

    我已经安装了最新的面料插件 https get fabric io beta对于 Android Studio 它运行良好一段时间 更新到 Android Studio 1 1 0 后 我在事件日志中看到以下内容 以及 NullPointe
  • 括号:如何使自动完成/自动缩进工作?

    括号看起来不错 但我在使用它时遇到两个问题 First 我通常这样自动完成标签 div class PRESS TAB becomes div class class div 我无法实现这一点 我尝试下载一堆插件 但没有任何作用 Secon
  • 使用 ActiveMQ/Stomp 在 PHP 和 Java 之间进行通信

    背景 我有两个服务需要通过消息队列相互通信 一种是用 PHP 编写的遗留服务 另一种是用 Java 编写的 迟早 PHP 服务将被 Java 重写 它们当前相互通信的方式是写入共享数据库 由其他服务轮询 这就是我试图摆脱并用消息队列替换的内
  • 仅限 AJAX 的 Javascript 库

    我正在寻找一个只有 AJAX 没有其他功能的 Javascript 库 例如一个小型的简单 XMLHttp 包装器 微贾克斯 http code google com p microajax 这是我决定的
  • 如何让 Material-UI 选项卡与 React-router 一起使用?

    我正在尝试让 Material UI 选项卡与路由一起使用 当路由正在工作并显示所选选项卡时 选项卡之间导航的流畅动画不再起作用 如何将 React Router 与 Material UI 选项卡一起使用 以保持选项卡动画正常工作 截至目