Как использовать стили на основе реквизитов внутри точки останова с помощью material-ui

#reactjs #material-ui

Вопрос:

Допустим, у меня есть очень простой props интерфейс, который определяет логическое свойство. Теперь, в моем useStyles случае , я хочу изменить способ отображения этого стиля на основе как условного свойства, так и точки останова. Вот очень простой пример:

 interface Props {
  isError: boolean;
}

const useStyles = makeStyles<Theme, Props>(theme => ({
  box: ({ isError}) => ({
    backgroundColor: isError? 'red' : 'green',

    [theme.breakpoints.up('md')]: {
      backgroundColor: isError ? 'maroon' : 'teal',
    }
  }),
}));
 

Когда я нахожусь под точкой md останова, это работает, как и ожидалось; но как только я перехожу точку md останова, цвет не меняется. Как так получилось?

Вот демонстрационная версия на StackBlitz, которая демонстрирует проблему.

Ответ №1:

Работая над примером для этого вопроса, я выяснил проблему. Значение свойства для создания стилей на основе точки останова также должно быть функцией:

 const useStyles = makeStyles<Theme, Props>(theme => ({
  box: (outerProps) => ({
    backgroundColor: outerProps.isError ? 'red' : 'green',

    [theme.breakpoints.up('md')]: (innerProps) => ({
      backgroundColor: innerProps.isError ? 'maroon' : 'aqua',
    }),
  })
}));
 

Вот обновленный StackBlitz, показывающий рабочий пример.