WithStyles()HOCを使用して、MUIコンポーネントのスタイル、テーマ、ブレークポイントをオーバーライドしています。
このようなエラーが発生し続けるため、ここでは理解できないことが明らかにあります。
警告:Material-UI:classesプロパティに提供されるキー
tab
はItemsに実装されていません。オーバーライドできるのは、カード、詳細、コンテンツ、カバー、アバター、ロックのいずれかのみです。
サンプルコード: https://codesandbox.io/s/6xwz50kxn
<List />
コンポーネントとその子<Items />
があります。
私の意図は、demo.jsファイルのスタイルを<List />
コンポーネントにのみ適用し、demoChild.jsのスタイルを<Items />
コンポーネントに適用することです。
私が間違っていることの説明、そしておそらく解決策を本当に感謝していますか?
注: 他の投稿 が同じエラーで見つかりましたが、私の例とは異なるものがあるようです。
警告は、demo.jsファイルの次の行が原因です。
<Items {...this.props} items={items} />
List
のすべてのプロップをItems
に広げています。これらの小道具の1つは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
に拡散することはないため、実装されていないクラスに関する警告は表示されません。
私の場合、異なるファイルで複数のスタイルを再利用したいので、ヘルパー関数を作成しました
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)