React.js Material-UI 中的 BottomNavigation 样式

2023-11-26

如何将所选链接(本例中为主页)的图标和文本颜色更改为红色,并将非活动链接(本例中为课程和作者)的图标和文本颜色更改为绿色?文档非常薄。

enter image description here

class MyBottomNavigation extends Component {

  render() {
    return (
      <Paper zDepth={1}>
        <BottomNavigation selectedIndex={this.state.selectedIndex}>

          <BottomNavigationItem
            label="Home"
            icon={recentsIcon}
          />

          <BottomNavigationItem
            label="Course"
            icon={favoritesIcon}
          />

          <BottomNavigationItem
            label="Authors"
            icon={nearbyIcon}
          />
        </BottomNavigation>
      </Paper>
    )
  }
}

export default MyBottomNavigation

大多数 Material-UI 组件都有三个独立的信息源:

  • The Component Demos
    • https://mui.com/components/bottom-navigation/
  • The API documentation for the component and related components. The links for this will appear at the bottom of the corresponding demos.
    • https://mui.com/api/bottom-navigation/
    • https://mui.com/api/bottom-navigation-action/
  • The source code
    • https://github.com/mui-org/material-ui/blob/master/packages/mui-material/src/BottomNavigation/BottomNavigation.js
    • https://github.com/mui-org/material-ui/blob/master/packages/mui-material/src/BottomNavigationAction/BottomNavigationAction.js

API 文档中的每个组件都记录了您可以通过以下方式传入的类:classes属性来覆盖组件不同方面的样式。

在这种情况下,我们关心的组件是BottomNavigationAction。在里面CSS您将找到 API 文档的一部分:

root应用于根元素的样式。

selected如果选择,样式将应用于根元素。

看到这个你可能首先尝试:

const styles = {
  root: {
    color: "green"
  },
  selected: {
     color: "red"
  }
};

这几乎就成功了。非活动操作为绿色,但所选操作具有红色文本,但图标颜色不受影响。当样式不能完全按照您的预期工作时,下一个要查看的地方是源代码,以了解样式在组件中是如何完成的。

下面是一个简化版本BottomNavigationAction样式(我只包含与控制这两种颜色相关的部分):

export const styles = theme => ({
  /* Styles applied to the root element. */
  root: {
    color: theme.palette.text.secondary,
    '&$selected': {
      color: theme.palette.primary.main,
    },
  },
  /* Styles applied to the root element if selected. */
  selected: {},
});

如果我们根据其结构来建模我们的覆盖,我们就会取得成功。如果使用的话,最终结果如下所示withStyles使用 MUI v4(下面是 v5 示例):

import React from "react";
import Paper from "@material-ui/core/Paper";
import BottomNavigation from "@material-ui/core/BottomNavigation";
import BottomNavigationAction from "@material-ui/core/BottomNavigationAction";
import RestoreIcon from "@material-ui/icons/Restore";
import FavoriteIcon from "@material-ui/icons/Favorite";
import LocationOnIcon from "@material-ui/icons/LocationOn";
import { withStyles } from "@material-ui/core/styles";

const styles = {
  root: {
    color: "green",
    "&$selected": {
      color: "red"
    }
  },
  selected: {}
};

class MyBottomNavigation extends React.Component {
  render() {
    const actionClasses = this.props.classes;
    return (
      <Paper>
        <BottomNavigation value={1} showLabels={true}>
          <BottomNavigationAction
            classes={actionClasses}
            label="Home"
            icon={<RestoreIcon />}
          />

          <BottomNavigationAction
            classes={actionClasses}
            label="Course"
            icon={<FavoriteIcon />}
          />

          <BottomNavigationAction
            classes={actionClasses}
            label="Authors"
            icon={<LocationOnIcon />}
          />
        </BottomNavigation>
      </Paper>
    );
  }
}
export default withStyles(styles)(MyBottomNavigation);

Edit wq02759kk

这是 MUI v5 的等效示例,使用styled代替withStyles:

import React from "react";
import Paper from "@mui/material/Paper";
import BottomNavigation from "@mui/material/BottomNavigation";
import MuiBottomNavigationAction from "@mui/material/BottomNavigationAction";
import RestoreIcon from "@mui/icons-material/Restore";
import FavoriteIcon from "@mui/icons-material/Favorite";
import LocationOnIcon from "@mui/icons-material/LocationOn";
import { styled } from "@mui/material/styles";

const BottomNavigationAction = styled(MuiBottomNavigationAction)(`
  color: green;
  &.Mui-selected {
    color: red;
  }
`);

class MyBottomNavigation extends React.Component {
  render() {
    return (
      <Paper>
        <BottomNavigation value={1} showLabels={true}>
          <BottomNavigationAction label="Home" icon={<RestoreIcon />} />

          <BottomNavigationAction label="Course" icon={<FavoriteIcon />} />

          <BottomNavigationAction label="Authors" icon={<LocationOnIcon />} />
        </BottomNavigation>
      </Paper>
    );
  }
}
export default MyBottomNavigation;

Edit BottomNavigationAction color

以下是 Stack Overflow 中我回答过的有关其他 MUI 组件的一些类似问题的其他资源:

  • 使用 React Material-ui 更改 OutlinedInput 的大纲
  • 设置TextField高度material-ui
  • 如何在 JSS 中将样式应用于子类
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React.js Material-UI 中的 BottomNavigation 样式 的相关文章

  • 退出动画在下一个 js 帧器运动中不起作用?

    我在我的应用程序中使用 next js 在我的动画中使用成帧器运动 我可以设置介绍动画 但退出动画根本不起作用 我已将代码包装在动画效果下 但它没有执行任何操作 我在这里缺少什么 下面是我的示例代码
  • 在nextjs中获取URL路径名

    我有一个登录页面和布局组件 布局组件有标题 我不想在登录中显示标题 为此 我想获取 url 路径名 基于路径名显示标题 import as constlocalStorage from helpers localstorage import
  • axios在自调用函数内部只调用一次(Internet Explorer)

    我有一个函数每 2 5 秒调用自己一次来检查后台运行的任务 它调用 axiosget如果响应错误 则返回一个 url 如果响应成功 我将停止该函数 这在 Chrome 和 Mozilla 上完美运行 但由于某种原因 它在 IE 版本 11
  • 在我的反应应用程序中使用笑话,描述未定义

    我是开玩笑的新手 试图在下面的代码中找出一些基本的东西 import as actions from IncrementalSearchActions describe Incremental Search Actions gt it Sh
  • 为什么 React 组件会渲染两次?

    我已将调试器放置在组件的渲染中 并且看到它有时 如果不是大多数时间 运行两次 是因为第一次渲染是在组件接收任何道具之前吗 第二次是收到的时候 我认为组件会经历安装 接收道具 然后渲染的过程 或者它是否安装 渲染 检查道具 然后重新渲染 如果
  • 当鼠标悬停在上面时制作一个 React Bootstrap NavDropdown 下拉菜单

    我试图让 React Bootstrap 中的下拉菜单栏在您显示选项时hover超过它 我到处查看 所有解决方案似乎都已过时并且不起作用 如果您能够解决此问题 请告诉我 这是我尝试将更改应用到的下拉菜单
  • 如何在 Jest 测试中模拟 StatusBarManager.getHeight?

    我正在使用 expo 34 并且反应本机用户界面库 https www npmjs com package react native ui lib来自 wix 并且在为我的组件设置笑话测试时遇到问题 问题看起来出现在link https g
  • 在 React 中使用 setTimeout() 并测试它

    我意识到我一直在使用setTimeout 在我的项目中 也许 比我应该做的更多 我进行了快速研究并浏览了 Github 上的一些开源 React 项目 并决定我应该询问一下 I use setTimeout主要是为了更改类名或添加样式以对
  • React.js:参考在初始渲染时不可用

    我试图在组件的根 DOM 元素的中间放置一个圆圈 var App React createClass render function return
  • 如何过滤反应中的状态数组?

    我有阶数减速器 它有很多状态 const initialState channel null order fetching true menu categories subcategories currentCategoryId 1 cur
  • React - 基于计数的动态输入字段

    我想根据用户输入的计数创建文本字段 我查了很多相关问题 但找不到我想要的结果 例如 如果用户输入 5 作为输入 我想创建 5 个文本框来输入 5 个人的姓名和手机 我怎样才能实现这个目标 用于获取计数的 TextField
  • ReactJS 服务器端渲染与客户端渲染

    我刚刚开始研究ReactJS 发现它提供了两种渲染页面的方式 服务器端和客户端 但是 我不明白如何一起使用它 构建应用程序是两种不同的方法 还是可以一起使用 如果我们可以一起使用它 该怎么做 我们需要在服务器端和客户端复制相同的元素吗 或者
  • 如何在React Router 4中实现动态路由?

    我有一个这样的文章列表 div this props articles map article gt return div
  • 选择单选按钮来更改状态

    我如何设置input type radio 这样状态值就会根据用户的选择而改变 在这种情况下 我想要按钮name 1 成为默认选择的按钮 但如果按钮name 2 由用户选择 某些状态值应该改变 div div
  • react-dom/server 可以在客户端工作吗?

    我需要在客户端呈现顶级 html 标签 例如 结果将被注入到 iframe 中 在服务器上 我会使用renderToStaticMarkup函数来自react dom server 但仅限客户端react dom没有这个功能 Will re
  • 无法在使用 Azure B2C 访问受保护的 .NET Core API 的 React 应用程序中获取访问令牌

    我在从 React 应用程序获取访问令牌并尝试访问我自己的 NET Core 3 1 Web API 时遇到问题 我能够正常登录并可以访问用户数据 但是当我尝试获取访问令牌时 我不断收到以下错误 将不胜感激任何帮助或推动正确的方向 谢谢你
  • 带有 nextjs 的 Material-ui 选项卡?

    我有一个 Material ui nextjs 和 typescript 项目 我正在尝试让我的导航栏与 nextjs 一起使用 import as React from react import AppBar from material
  • 从“react-native-vector-icons/Ionicons”导入图标

    我可以在同一屏幕上导入react native vector icons font awesome 和react native vector icons Ionicons 吗 基本上我想在同一屏幕上为不同的图标使用 font awesome
  • 在react渲染函数中是否可以返回空?

    我有一个通知组件 并且有一个超时设置 超时后我打电话this setState isTimeout true 我想做的是 如果已经超时 我只想渲染任何内容 render let finalClasses this state classes
  • 在反应中循环图像的最佳方法

    我已经使用 create react app 创建了一个项目 并且在源代码中有一个名为 images 的文件夹 我想在图像文件夹内循环并显示它们 到目前为止我的代码如下所示 import React Component from react

随机推荐

  • .Net Core中间件-从请求中获取表单数据

    在 NET Core Web 应用程序中 我使用中间件 app UseMyMiddleware 在每个请求上添加一些日志记录 public void Configure IApplicationBuilder app IHostingEnv
  • 单击单元格外部后如何退出文本框

    我意外地在网上找到了这段代码 它解决了我的大部分问题 但是我想在这段代码中添加一件事 但我不知道我的问题是什么 如何在用户后退出文本框双击它还是在用户完成编辑之后
  • android edittext onchange监听器

    我知道一点点TextWatcher但这会触发您输入的每个角色 我想要一个在用户完成编辑时触发的侦听器 是否可以 也在TextWatcher我得到一个实例Editable但我需要一个实例EditText 我怎样才能得到它 EDIT 首先 您可
  • 如何打开以 JDesktopPane 为中心的 JInternalFrame?

    我正在添加一堆JInternalFrame变成一个JDesktopPane 当用户选择通过菜单打开各种功能时 但我希望内部框架在桌面窗格的中心打开 而不是在左上角 它们似乎是默认的 如何指定 JInternalFrames 居中打开 或打开
  • 如何拉伸图像以填充此 WPF / XAML 应用程序?

    当我的程序显示小于 XAML 中定义的图像 GUI 对象的图像时 它不会像我希望的那样拉伸以适合 例如 256x256 图像仅占据 512x512 图像 GUI 对象的左上象限 我很困惑 因为我在 XAML 代码中设置了 Stretch F
  • Flutter 中的 StreamBuilder 陷入 ConnectionState.waiting 并仅显示加载标记

    您好 我正在尝试将 Firebase 文档内的数据动态显示到我的 Flutter 中 并使用循环进行渲染 所以我做了一个List
  • cPickle - 对同一对象进行酸洗的不同结果

    有谁能解释一下下面的评论吗testLookups 在这个代码片段 我已经运行了代码 确实评论所说的是真的 不过我想了解为什么这是真的 即为什么 cPickle 根据引用方式为同一对象输出不同的值 它与引用计数有什么关系吗 如果是这样 这不是
  • C# 无法使用类型约束推断泛型类型参数,是否有解决方法?

    埃里克 利珀特 Eric Lippert 在他的博客文章中解释道 http blogs msdn com b ericlippert archive 2009 12 10 constraints are not part of the si
  • 删除/移动 Google Chrome 左下角状态栏(链接地址栏)

    我正在开发一个网站 其设计的左下角有一个关键的导航元素 在 Google Chrome 中 左下角有一个状态栏 当您将鼠标悬停在页面上的链接上时 会出现该状态栏并显示该页面的 URL 不过 如果你足够接近 它会移动到右下角 这妨碍了该导航元
  • 为什么Java 2D原点位于左上角?

    我不是抱怨 只是好奇 为什么Java使用绘图表面的左上角作为原点 我认为更自然的是选择左下角作为原点并随着它们向上和向右增加轴 类似于石英 自古以来 计算机图形学就起源于左上角 其中包括 QuickDraw 使用左下角 如在数学中 是 Po
  • 从 float 转换为 QByteArray

    有没有一种快速方法可以将浮点值转换为字节形式 十六进制 表示形式QByteArray 做过类似的事情memcpy 在使用数组之前 但这似乎不太适用QByteArray 例如 memcpy byteArrayData floatData si
  • 如何找到数组的维数?

    下面是一段代码 我需要通过遍历传递的消息来存储有关警告消息的一些信息 传递的参数本身是一个变体 由 API 调用设置SAPListOfMessages它返回一个数组String 然而我注意到 每当有超过 1 个警告时 列表都是二维的 mes
  • jQuery mobile:在 ListView 中启用自动换行

    我有一个列表视图 见下图 我想将所有内容自动换行 而不是添加 到长行 这是怎么做到的 您只需要更新 CSS ui li desc保存列表项中文本的元素 ui page ui content ui listview ui li desc wh
  • QtService 应用程序作为服务运行时无法连接到系统总线

    我已经重新编译了Qt与集成的dbus对于窗户 此外 我还实施了QtService应用程序在系统总线上注册服务和对象 如下所示 QDBusConnection systemBus registerService com mycompany C
  • 从 R 中的许多列中减去数据框中的一列

    我有一个数据框 我想从所有其他列中减去第二列 我可以循环执行此操作 但我想在一次调用中执行此操作 这是我的工作循环代码 df lt data frame x 100 101 y 2 3 z 3 4 a 1 0 b 4 5 for i in
  • 如何使用 PDO 在一个数据库行程中插入多条记录?

    我有一张桌子叫propAmenities其中包含两列amenity id and property id基本上该表保存外键 现在我必须使用以下语句的命名占位符生成 PDO 查询 INSERT INTO propAmenities ameni
  • 计算sql查询中的持续时间总和

    我有一个表 其中有两列开始时间和结束时间 我能够计算每行的持续时间 但我也想获得总持续时间 这个怎么做 Thanks 您的列的数据类型为 TIMESTAMP 如下所示 SQL gt create table mytable start ti
  • 数据聚合 mongodb vs mysql

    我目前正在研究用于具有严格数据聚合要求的项目的后端 项目主要要求如下 为每个用户存储数百万条记录 用户每年可能拥有超过 100 万个条目 因此即使有 100 个用户 我们每年也会有 1 亿个条目 这些条目的数据聚合必须即时执行 用户需要能够
  • 无法从 List 转换为 List

    我正在尝试传递一个列表DerivedClass一个函数 它接受一个列表BaseClass 但我收到错误 cannot convert from System Collections Generic List
  • React.js Material-UI 中的 BottomNavigation 样式

    如何将所选链接 本例中为主页 的图标和文本颜色更改为红色 并将非活动链接 本例中为课程和作者 的图标和文本颜色更改为绿色 文档非常薄 class MyBottomNavigation extends Component render ret