Material-UI:“提供给类属性的键未实现”

Posted

技术标签:

【中文标题】Material-UI:“提供给类属性的键未实现”【英文标题】:Material-UI: "The key provided to the classes property is not implemented" 【发布时间】:2018-08-02 20:06:30 【问题描述】:

我正在使用 withStyles() HOC 来覆盖一些 MUI 组件样式、主题和断点。

这里显然有一些我不明白的地方,因为我不断收到类似这样的错误:

警告:Material-UI:提供给 classes 属性的键 tab 没有在 Items 中实现。

您只能覆盖以下选项之一: 卡片,详情,内容,封面,头像,锁

示例代码:https://codesandbox.io/s/6xwz50kxn3

我有一个<List /> 组件及其子组件<Items />

我的意图是将 demo.js 文件中的样式仅应用于 <List /> 组件,并将 demoChild.js 中的样式应用于<Items /> 组件。

我真的很感激我做错了什么的解释,也许是一个解决方案?

注意:我发现 other posts 有相同的错误,但它们似乎与我的示例有所不同。

【问题讨论】:

我完全可以使用直接样式,没有覆盖,但我似乎无法使用 [theme.breakpoints.up('xs')]: ... 而不会出现这样的错误:Unsupported style property @media (min-width:0px). Did you mean @media (minWidth:0px)? 【参考方案1】:

警告是由您的 demo.js 文件中的这一行引起的:

<Items ...this.props items=items />

您正在将List 的所有道具传播到您的Items。其中一个道具是classes,包含您在 demo.js 中定义的所有 CSS 类。由于这些是为List 设计的,它们包括由List 实现但不是Items 实现的CSS 类。由于Items 正在接收此道具,它会在您尝试覆盖不可用的类时读取它并警告您。

您可以通过仅传播未使用的道具来解决此问题:

// Use other to capture only the props you're not using in List
const  classes, headerIsHidden, ...other  = this.props;

// Then spread only those unused props
<Items ...other items=items /

然后,您不会将classes 对象传播到Items,因此您不会收到有关未实现类的任何警告。

【讨论】:

现在我读到了你的答案,我因为没有看到它而自责!非常感谢! 非常感谢,它也解决了我的问题。【参考方案2】:

就我而言,我想在不同的文件中复用多个样式,所以我写了一个辅助函数

import  withStyles  from '@material-ui/core/styles'

// Fixed: material-ui "The key provided to the classes property is not implemented"
const withMultipleStyles = (...params) => 
    return withStyles((theme) => 
        var styles = 
        for (var len = params.length, key = 0; key < len; key++) 
            styles = Object.assign(styles, params[key](theme));
        

        return styles
    )


export default withMultipleStyles

用法:

import React from 'react'
import compose from 'recompose/compose'
import  connect  from 'react-redux'
import  style1, style2, withMultipleStyles  from '../../styles'

class your_class_name_here extends React.Component 
     // your implement


export default compose(
    withMultipleStyles(style1, style2),
    withWidth(),
    connect(mapStateToProps, mapDispatchToProps)
)(your_class_name_here)

【讨论】:

能否提供一个简单的代码沙箱示例? @dauffret ,我在上面的代码沙箱中添加了演示

以上是关于Material-UI:“提供给类属性的键未实现”的主要内容,如果未能解决你的问题,请参考以下文章

@material-ui 与 material-ui 之间的区别(无符号)

Material-UI 无法解析 '@material-ui/core/styles/createMuiTheme

ReactJS + Material-UI:如何减小 Material-UI 的 <TableRow/> 的列宽?

ReactJS + Material-UI:如何在每个 TableRow 中使用 Material-UI 的 FlatButton 和 Dialog?

material-ui:找不到模块:'./AccessAlarm'

ReactJS + Material-UI:如何使用 Material-UI 的 <DatePicker> 将当前日期设置为默认值?