Пользовательский интерфейс React Material: как придать кнопке собственный цвет, когда она отключена?

Я создаю приложение React с использованием пользовательского интерфейса Material.

Если кнопка отключена, она серая и непрозрачная. Я бы хотел, чтобы в моих темах был основной цвет и непрозрачность.

Итак, вот что я пробовал:

import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import Button from "@material-ui/core/Button";

const styles = theme => ({
  button: {
    ":disabled": {
      backgroundColor: theme.palette.primary || 'red'
    }
  }
});

function ContainedButtons(props) {
  const { classes } = props;
  return (
    <div>
      <Button
        variant = "contained"
        color = "secondary"
        disabled
        className = {classes.button}
      >
        Disabled
      </Button>
    </div>
  );
}

ContainedButtons.propTypes = {
  classes: PropTypes.object.isRequired
};

export default withStyles(styles)(ContainedButtons);

Но кнопка остается серой. Как изменить стиль отключенного элемента?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
20
0
47 081
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Вы можете определить класс, который будет применяться для отключенных кнопок:

const styles = theme => ({
  disabledButton: {
    backgroundColor: theme.palette.primary || 'red'
  }
});

А затем используйте его следующим образом:

<Button
  variant = "contained"
  color = "secondary"
  disabled
  classes = {{ disabled: classes.disabledButton }}
>
  Disabled
</Button>

Вы можете найти в документировать все классы, что вы можете переопределить.

Мне нравится этот подход, но, к сожалению, я считаю, что на самом деле он не работает (хотя, если я ошибаюсь, я хотел бы увидеть песочницу). Чтобы заставить его работать, вам нужно следовать (неинтуитивному) методу здесь.

Nat Kuhn 20.01.2021 04:34

это не работает... нужно использовать метод jss-nested

ChumiestBucket 03.02.2021 17:02

Этот ответ датирован 2019 годом. Возможно, он больше не действует в текущей версии MUI.

Arnaud Christ 04.02.2021 18:05

Или вы можете попробовать createMuiTheme и настроить следующее свойство:

import { createMuiTheme } from '@material-ui/core/styles'

const theme = createMuiTheme({
  palette: {
    action: {
      disabledBackground: 'set color of background here',
      disabled: 'set color of text here'
    }
  }
}

Это верно! Я бы также добавил `палитра: {действие: {disabled: YourCustomColor} }`

Raphael Pinel 13.11.2019 09:58

Ответ Непса правильный, но я добавлю больше деталей.

Прежде всего, вы должны импортировать createMuiTheme и ThemeProvider:

import { createMuiTheme } from '@material-ui/core/styles'
import { ThemeProvider } from '@material-ui/styles';

Создать тему:

const theme = createMuiTheme({
  palette: {
    action: {
      disabledBackground: 'set color of background here',
      disabled: 'set color of text here'
    }
  }
});

И оберните свою кнопку:

<ThemeProvider theme = {theme}>
  <Button color = "primary">Primary</Button>
</ThemeProvider>

Как используется disabledBackground?

thodwris 13.01.2021 22:14

Вы можете добавить стиль к отключенному классу кнопок, например:

.Mui-disabled { background-color: blue; }

Вы также можете увидеть, какие другие классы можно использовать для стилизации кнопки на https://material-ui.com/api/button/.

Столкнулся с той же проблемой и сумел решить ее, изменив :disabled на &:disabled.

    const styles = theme => ({
      button: {
        "&:disabled": {
          backgroundColor: theme.palette.primary || 'red'
        }
      }
    });

Другие вопросы по теме