Как переопределить Typography colorPrimary в пользовательском интерфейсе компонента Link Material

#reactjs #material-ui

#reactjs #материал-пользовательский интерфейс

Вопрос:

Я хочу использовать компонент Link https://material-ui.com/api/link / и я хочу установить свои собственные цвета для основного и дополнительного, но я вижу, что для этого используется типография. Как его переопределить? Приведенный ниже код не работает

 const typographyStyle = withStyles({
    root: {
        colorPrimary: {
            color: ColorsTheme.primary.default
        }
    }
});

const StyledLink = withStyles(() => ({
}))(MaterialLink);

const Link = props => (
    <StyledLink TypographyClasses={typographyStyle} {...props} />
);

export default Link;
 

Ответ №1:

Ниже приведен пример, показывающий два разных способа сделать это. Первый подход ( CustomLink ) нацелен на глобальные имена классов Typography. Второй подход ( CustomLink2 ) используется makeStyles для создания классов, которые передаются в TypographyClasses prop of Link .

 import React from "react";
import MuiLink from "@material-ui/core/Link";
import { withStyles, makeStyles } from "@material-ui/core/styles";

const CustomLink = withStyles({
  root: {
    "amp;.MuiTypography-colorPrimary": {
      color: "green"
    },
    "amp;.MuiTypography-colorSecondary": {
      color: "purple"
    }
  }
})(MuiLink);

const useTypographyStyles = makeStyles({
  colorPrimary: {
    color: "orange"
  },
  colorSecondary: {
    color: "brown"
  }
});

const CustomLink2 = (props) => {
  const typographyClasses = useTypographyStyles();
  return <MuiLink TypographyClasses={typographyClasses} {...props} />;
};
export default function App() {
  return (
    <div className="App">
      <MuiLink color="primary">Default Primary</MuiLink>
      <br />
      <MuiLink color="secondary">Default Secondary</MuiLink>
      <br />
      <CustomLink color="primary">Custom Primary</CustomLink>
      <br />
      <CustomLink color="secondary">Custom Secondary</CustomLink>
      <br />
      <CustomLink2 color="primary">Custom 2 Primary</CustomLink2>
      <br />
      <CustomLink2 color="secondary">Custom 2 Secondary</CustomLink2>
    </div>
  );
}
 

Редактировать настраивать цвета ссылок

Соответствующая документация: https://cssinjs.org/jss-plugin-nested?v=v10.5.0#use—to-reference-selector-of-the-parent-rule

Комментарии:

1. Да, спасибо, это то, что я, наконец, сделал, но я надеялся, что существует другой способ 🙂

2. @user0810 Я добавил второй подход к своему ответу.

Ответ №2:

Одним из решений было бы переопределение правил css (не рекомендуется),

Лучшим способом сделать это было бы использовать палитру Mui (ссылка на документы)

Но будьте осторожны, если вы измените свою палитру, это отразится на всем вашем приложении, то есть цвет других компонентов mui изменится

Комментарии:

1. Вот почему я не хочу использовать всю палитру, только в этом компоненте

2. Вы можете просто проверить конкретный элемент и проверить className , а затем переопределить правила css, используя !important

3. Это то, что я начинаю делать, но я надеялся, что есть более приятный способ

4. То же самое здесь, как будто в палитре должно быть что-то вроде опции пользовательских цветов. Может быть, вы можете попробовать использовать createStyles метод, а затем использовать useStyles . Теперь вы можете изменять цвет напрямую.