【问题标题】:React Material UI - Override using withStylesReact Material UI - 使用 withStyles 覆盖
【发布时间】:2020-04-03 16:19:20
【问题描述】:

我正在开发一个项目并利用 React Material UI,并且需要在焦点状态下覆盖 Select 组件的边框底部颜色。这是我现在正在使用的

import { Select as MuiSelect, withStyles } from '@material-ui/core';
import { BRAND_COLORS } from '../../constants/colors';

const FONT_SIZE = 20;

const Select = withStyles({
  root: {
    fontSize: FONT_SIZE,
    '&:focus': {
      backgroundColor: 'transparent',
    },
    '& .MuiInput-underline:after': {
      borderBottomColor: BRAND_COLORS.blue,
    },
  },
})(MuiSelect);

export default Select;

<Select
  native
  startAdornment={<InputAdornment position="start"><FilterListIcon /></InputAdornment>}
  value={service.regionalFocus}
  onChange={(event) => this.props.changeSelectedRegionalFocus({
      providerId, serviceId: service.service_id, regionalFocus: 
event.target.value})
      }
    >
      {regionalFocus.map((region, index) => service.service_regions[region.value].length ? (
        <option key={index} value={region.value}>
          {region.label}
        </option>
      ) : null)}
    </Select>

我可以覆盖字体大小,但是,borderBottomColor 没有注册。有什么想法吗?

【问题讨论】:

  • 选择组件在其中安装一个输入。您能否提供实际呈现选择的方式?
  • 我只是查看了正在安装的内容,但没有输入。这只是呈现一个包含选项的选择。
  • 实际上是一个 mui 输入。请提供您如何使用选择
  • 下面是我如何实现 Select

标签: reactjs material-ui react-with-styles


【解决方案1】:

您似乎正在尝试设置Input 的样式,它是Select 的子代。要覆盖 Input 道具,包括样式,您需要在 Select 上的 inputProps 道具中将它们作为覆盖传递。

类似:

const MySelect = (props) => {
  return (
    <Select {...props} inputProps={{ classes: { underline: props.classes.inputOverride } }}
  );
};

export default withStyles({
  root: {
    fontSize: FONT_SIZE,
    '&:focus': {
      backgroundColor: 'transparent',
    }
  },
  inputOverride: {
    '&:after': {
      borderBottomColor: BRAND_COLORS.blue,
    }
  }
})(MySelect);

SelectInput 的文档将在这里为您提供帮助: https://material-ui.com/api/select/ https://material-ui.com/api/input/

以及真正了解其工作原理的源代码: https://github.com/mui-org/material-ui/blob/d956b40539d7b724ca6026aeae96e1f42dd22331/packages/material-ui/src/Select/Select.js#L230

【讨论】:

  • 我试了一下,它实际上并没有覆盖。
  • 感谢您提请我注意。我认为我的语法不太正确。 withStylesclasses 属性添加到组件中,然后您可以使用它来覆盖事物。这会让你更接近吗?
  • 仍然没有让它覆盖 .MuiInput-underline:after css
  • 我最终通过以类为目标并添加 !important 以我的常用样式覆盖它来解决此问题。然而并不理想 - 我很想用 withStyles api 解决这个问题
猜你喜欢
  • 2019-10-06
  • 2020-04-06
  • 2021-04-14
  • 2018-04-11
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多