当前位置: 首页 > 知识库问答 >
问题:

是否可以在react路由器上使用物料ui按钮导航?

蓟浩旷
2023-03-14

我有一个用material UI设计的web应用程序,正如你们在下面看到的,我使用按钮导航来浏览我的基本登录页组件。

<div className="footer">
  <BottomNavigation value={value} onChange={this.handleChange} className={classes.root}>
    <BottomNavigationAction label="signal" value="signal" icon={<ShowChart />} className={classes.content}/>
    <BottomNavigationAction label="hotlist" value="hotlist" icon={<HotList />} className={classes.content}/>
    <BottomNavigationAction label="analyze" value="analyze" icon={<PieChart />} className={classes.content}/>
    <BottomNavigationAction label="learn" value="learn" icon={<LibraryBooks/>} className={classes.content}/>
    <BottomNavigationAction label="dashboard" value="dashboard" icon={<PermIdentity/>} className={classes.content}/>
  </BottomNavigation>
  </div>

我曾尝试将React Router与这些预定义的导航组件一起使用,但没有成功,有没有可能将Router与材质UI的按钮导航一起使用?物料界面中的按钮导航文章ButtonNavigation API

共有2个答案

左博学
2023-03-14

再加上@thirtydot的精彩答案,如果用户输入搜索并直接访问特定网页(默认除外),例如“www.yoursite.com/tab2”,而不是单击第二个按钮,这可能会导致显示的网站与聚焦的底部导航按钮(通常是第一个按钮)不匹配。

以下是我所做的:
我使用window.location.pathname直接获取当前路径“/tab2”。
以下是我针对特定用例的代码。。。。

function BottomNavBar(){
    const pathname = window.location.pathname; // in case user visits the path directly. The BottomNavBar is able to follow suit.
    const [value, setValue] = React.useState(pathname);
    const handleChange = (event, newValue) => {
      setValue(newValue);
    };

    return (
        <BottomNavigation value={value} onChange={handleChange} showLabels={true} >
          <BottomNavigationAction label="home" value="/" icon={<HomeIcon />} component={Link} to='/'/>
          <BottomNavigationAction label="resources" value="/resources" icon={<ResourcesIcon /> } component={Link} to='/resources'/>                
          <BottomNavigationAction label="Q&A" value="/qna" icon={<QnAIcon />}  component={Link} to='/qna'/>
          <BottomNavigationAction label="profile" value="/profile" icon={<ProfileIcon />} component={Link} to='/profile'/>
        </BottomNavigation>
      );
}

杜烨伟
2023-03-14

是的,有可能。您需要使用组件道具:

import { Link } from 'react-router-dom';

import BottomNavigation from '@material-ui/core/BottomNavigation';
import BottomNavigationAction from '@material-ui/core/BottomNavigationAction';

// ....

<BottomNavigation value={value} onChange={this.handleChange}>
    <BottomNavigationAction
        component={Link}
        to="/signal"
        label="signal"
        value="signal"
        icon={<ShowChart />}
        className={classes.content}
    />
</BottomNavigation>

toprop是用于React路由器的Link组件)

这适用于从按钮库继承的任何材质UI组件。

https://material-ui.com/api/bottom-navigation-action/

ButtonBase组件的属性也可用。可以利用此行为以嵌套组件为目标。

https://material-ui.com/api/button-base/

component-用于根节点的组件。使用DOM元素或组件的字符串。

 类似资料:
  • 我想从API中读取要显示的产品。然后,当我按下其中一个显示的产品时,它应该使用url中的产品ID和要在页面上查看的产品详细信息将我路由到一个组件,以获取有关该产品的详细信息。我在这里读取了API中的数据,并详细显示了产品。 我想通过产品ID添加一个路由链接。如何将详细信息作为其他组件的道具发送?

  • 我用 react 写了一个页面,在这个页面里有几个模块,其中一些模块都有 a 标签,比如 footer.jsx 我想实现的是,当点击这里的 blog 或者 help 后会访问对应的页面,blog 访问 /blog,help 访问 /help。 然后在各自的页面里,可以重定向到其它的页面去,比如 blog -> /blog -> https://blog.domain.com help -> /he

  • 我正在使用react路由器(2.4.1),我有一个通配符(path=“*”)回退路由来显示“未找到”组件。 我的其中一条路线定义如下: 我可以以任何方式验证路由参数,以检查该类别是否存在于我的类别列表中?如果没有,我希望路由器下降到通配符,以便显示未找到组件

  • 问题内容: 基本路线是这样的: 是否可以命名该路由并在任何模板中使用它,以便可以像这样使用它: 灵感来自Django :) 问题答案: 没有开箱即用的机制。但是,您可以模仿Django的样式:定义文件,该文件将包含URL数组。首先开始: myviews.js urls.js 现在在 app.js (或任何主文件)中,您需要将URL绑定到Express。例如这样: app.js 现在,您可以定义自定

  • 我正在使用Vue2和Vue Router 3.5构建SPA应用程序 应用程序有两个身份验证路径,“admin”和“organization” 我设置了路由器,这样每个授权保护在url中都有自己的前缀 '/auth/:防护' '/组织' /admin 路由器文件如下所示: 在组织文件内部,我返回一个对象: 在以前的项目中,我使用router.beforeEach来处理系统中的导航。 路由器的问题。b