Цвет фона материала пользовательского интерфейса Snackbar не переопределяется

Я делаю ErrorHandler в React.JS, который выводит закусочную панель Material UI всякий раз, когда ErrorHandler обнаруживает ошибку. Проблема в том, что я хочу, чтобы атрибут стиля backgroundColor был красным, но он не меняет цвет на красный.

Может ли кто-нибудь подсказать мне, как я могу добиться изменения цвета?

Я пытался:

  1. Использование атрибута className в компоненте Snackbar.
  2. Используя опору ContentProps.
  3. Использование переопределяющих стилей CSS с классами.

ErrorHandler.jsx:

import React from "react";
import ErrorIcon from '@material-ui/icons/Error';
import CloseIcon from '@material-ui/icons/Close';
import Snackbar from '@material-ui/core/Snackbar';
import SnackbarContent from '@material-ui/core/SnackbarContent';
import IconButton from '@material-ui/core/IconButton';
import { withStyles } from '@material-ui/core/styles';
import styles from "./errorHandlerStyles";
import PropTypes from "prop-types";

class ErrorBoundary extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            hasError: false,
            error: ""
        };

        this.handleClose = this.handleClose.bind(this);
    }

    componentDidCatch(error) {
        this.setState({ 
            hasError: true, 
            error: error 
        });
    }

    handleClose() { this.setState({ hasError: false }); }

    render() {
        const { classes } = this.props;

        if (this.state.hasError) {
            return (
                <Snackbar
                    classes = {{
                        root: classes.root
                    }}
                    anchorOrigin = {{
                        vertical: "bottom",
                        horizontal: "left"
                    }} 
                    autoHideDuration = {5000}
                    onClose = {this.handleClose}
                    open = {this.state.hasError}
                >
                    <SnackbarContent 
                        message = {
                            <span className = {classes.message}>
                                <ErrorIcon className = {classes.icon} />
                                {this.state.error.toString()}
                            </span>
                        }
                        action = {
                        <IconButton key = "close" onClick = {this.handleClose} className = {classes.content}>
                            <CloseIcon />
                        </IconButton>
                    }
                    >
                    </SnackbarContent>
                </Snackbar>
            );
        }
        return this.props.children;
    }
}

ErrorBoundary.propTypes = {
    classes: PropTypes.object.isRequired
}

export default withStyles(styles)(ErrorBoundary);

ОшибкаHandlerStyles.js:

const styles = theme => ({
    message: {
        display: 'flex',
        alignItems: 'center',
        fontSize: 16
    },
    icon: {
        fontSize: 20,
        opacity: 0.9,
        marginRight: theme.spacing.unit * 1,
    },
    content: {
        margin: theme.spacing.unit * 1,
    },
    root: {
        backgroundColor: theme.palette.error.light
    }
});

export default styles;

Попробуйте импортировать стили, импортировав {styles} из "./errorHandlerStyles"

Hema Nandagopal 29.05.2019 11:50

@HemaNandagopal Только что попробовал. До сих пор не меняет цвет.

minus.273 29.05.2019 11:56

Можете ли вы добавить его в скрипке?

Hema Nandagopal 29.05.2019 11:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
4 450
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Ваш компонент <SnackbarContent> должен получить стиль background-color, а не <SnackBar/>:

<SnackbarContent className = {classes.root} />

Я пробовал это, и это не сработало. Я написал это в описании проблемы :)

minus.273 29.05.2019 11:54

@ минус.273 Обновленный ответ! Вам нужно оформить SnackbarContent вместо SnackBar, см. пример здесь: material-ui.com/components/snackbars/#customized-snackbars

Oscar 29.05.2019 12:23

Попробуйте использовать className = {classes.root} в компоненте SnackbarContent.

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