【问题标题】:How pass Emotion styling through Material UI MenuProps to override paper root classes如何通过 Material UI MenuProps 传递情感样式以覆盖纸张根类
【发布时间】:2021-06-08 02:32:00
【问题描述】:

我正在使用Material UI for a Select 菜单和Emotion 进行样式设置。

单击“选择”菜单中的菜单项后,我需要覆盖菜单弹出框的根类(MuiPaper-rootMuiMenu-paper)。

我有一个 Select 组件:

<Select
  value={selectValue}
  onChange={handleChange}
  css={styles.select}
  MenuProps={{
    css: { paper: styles.popover },
  }}
>
  {items?.map(({ item, label }) => {
    return (
      <MenuItem
        key={item}
        value={item}
        css={styles.menuItem}
      >
        {label}
      </MenuItem>
    );
  })}
</Select>

在我的样式文件中,我在下面尝试过但不起作用?

popover: css`
  background-color: red !important; 
`,

或者这个:

   popover: css`
     .MuiPaper-root {
       background-color: red !important;
    }
`,

我还尝试使用classes prop 而不是css prop:

MenuProps={{
 classes: { paper: styles.popover },
}}

然后我得到这个 linting:

(属性)纸?:字符串 |未定义类型“SerializedStyles”不是 可分配给类型“字符串”。

有人知道如何通过 MenuProps 传递情感样式吗?

【问题讨论】:

    标签: css reactjs material-ui emotion


    【解决方案1】:

    您的错误在于MenuProps 声明。要覆盖MuiMenu-paper,你应该写:

    <Select
       ...
       MenuProps={{
          classes: {
             paper: classes.menuPaper
          }
       }}
    >
    ...
    </Select>
    

    那么风格:

    const useStyles = makeStyles((theme) => ({
      menuPaper: {
        backgroundColor: "red"
      }
    }));
    

    Here 一个工作示例。

    【讨论】:

    • 谢谢,但我可以不使用 makeStyles() 并使用我自己的情感风格吗?
    • 您应该将 classes.menuPaper 替换为 styles.menuPaperimport 样式表。抱歉,我通常将 makeStyle 与 MUI 一起使用。
    • 谢谢,我已经尝试过了,但是我得到了(property) paper?: string | undefined Type 'SerializedStyles' is not assignable to type 'string'.. 当我检查 HTML 时,我看到:MuiPaper-root MuiMenu-paper 您试图对从css 函数返回的对象进行字符串化。它不应该直接使用(例如,作为className 道具的值),而是交给情感以便它可以处理它(例如,作为css 道具的值)。
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 2019-03-07
    • 2018-11-22
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2020-06-13
    相关资源
    最近更新 更多