React Material Theme 不被外部依赖继承

Posted

技术标签:

【中文标题】React Material Theme 不被外部依赖继承【英文标题】:React Material Theme is not inherited by external dependency 【发布时间】:2021-05-20 12:45:24 【问题描述】:

我们有一个共享的 npm 包,它可以自定义反应材质按钮,以便它可以被多个应用程序使用。

例如,如果我的 npm 包名是 custom-npm-package

import React from 'react'
import  Button  from '@material-ui/core';

function CustomButton(props, ref) 
   return <Button ...props ref=ref />;


export default React.forwardRef(CustomButton)

我们使用 webpack@material-ui/core 作为外部依赖捆绑了这个包,并将它发布到 npm。

但是当我们尝试在主应用程序中使用它时,主题并没有传递给自定义按钮。

例如:

import  MuiThemeProvider, createMuiTheme  from '@material-ui/core/styles';
import  CustomButton  from 'custom-npm-package';

export default createMuiTheme(
  palette: 
    primary: 
      main: '#006649',
      light: '#004930',
      dark: '#006649'
    
  ,
  typography: 
    primary: 
      main: '#006649',
      light: '#004930',
      dark: '#006649'
    
  
);

function App() 
  return <MuiThemeProvider theme=theme>
    <CustomButton color='primary' />
  </MuiThemeProvider>

如果我这样做,我应该会看到颜色为 #006649 的按钮,但我得到的是一个带有材质默认主题颜色的按钮。

npm 包中的组件似乎没有继承自定义主题。有人可以帮助我如何实现这一目标。

【问题讨论】:

【参考方案1】:

如果您在 npm 包中安装了 @material-ui/core 作为依赖项(甚至作为 dev 依赖项),这可能会导致加载多个 @material-ui/core 副本,从而覆盖主题。

如果您将@material-ui/core 列为peer dependency,则它应该加载一次,并且会在您的主应用程序中从您的主题提供程序读取主题。


  // package.json
  "peerDependencies": 
    "@material-ui/core": "1.2.3"
  

【讨论】:

我仅添加为对等依赖项。但看起来它不起作用。

以上是关于React Material Theme 不被外部依赖继承的主要内容,如果未能解决你的问题,请参考以下文章

React Native 错误 - yarn' 不被识别为内部或外部命令

使用 React Material 使表格适合页面

React Material-UI无法调整表格大小

分隔线颜色变化 React Material Ui

如何将borderTop添加到React Material UI Table?

React Material UI 自定义工具提示和快速拨号样式