更新到material-ui@0.15.0-beta.1后,我无法使用material-ui组件

Yim*_*ing 21 reactjs material-ui

我在控制台中收到此消息:

失败的上下文类型:muiTheme未指定 必需的上下文AppBar

AppBar.js:158 Uncaught TypeError:无法读取未定义的属性'prepareStyles'

我在我的组件中只有一个AppBar我认为它应该可以工作但是...这里我的代码非常简单:

import React from 'react';
import {AppBar} from 'material-ui';


    export class MyComponent extends React.Component {

        render() {
            return (
                <div>
                    <AppBar
                        title="Title"
                    />

                </div>
            );
        }

    }
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助......

小智 33

使用material-ui@0.15.0.beta-1,一些事情发生了变化.

您可以在下面的链接中查看更多详细信息. https://github.com/callemall/material-ui/blob/master/CHANGELOG.md

因此,通过这些更改,您的代码变为

    import React from 'react';
    import AppBar from 'material-ui/AppBar';
    import baseTheme from 'material-ui/styles/baseThemes/lightBaseTheme';
    import getMuiTheme from 'material-ui/styles/getMuiTheme';

        export class MyComponent extends React.Component {

            getChildContext() {
                return { muiTheme: getMuiTheme(baseTheme) };
            }

            render() {
                return (
                    <div>
                        <AppBar
                            title="Title"
                        />

                    </div>
                );
            }        
        }

        MyComponent.childContextTypes = {
            muiTheme: React.PropTypes.object.isRequired,
        };
Run Code Online (Sandbox Code Playgroud)

  • 为什么它们会变得更复杂?如果我可以编写更少的代码来使其工作,那将是很棒的. (5认同)

Dus*_*vak 20

现在在0.15.0你可以使用muiThemeProvider:

...

import getMuiTheme from 'material-ui/styles/getMuiTheme';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import MyAwesomeReactComponent from './MyAwesomeReactComponent';

const App = () => (
 <MuiThemeProvider muiTheme={getMuiTheme()}>
    <MyAwesomeReactComponent />
 </MuiThemeProvider>
)

...
Run Code Online (Sandbox Code Playgroud)

因此,您不必为儿童提供上下文.更多信息在文档中.

  • 我找到了原因 - 如果我使用React.createClass()定义我的组件它不起作用,但是如果我创建一个扩展React.Component的ES6类就可以工作.我没有找到任何关于此的文档. (2认同)

Ian*_*mer 5

导入 MuiThemeProvider,然后用 MuiThemeProvider 包裹 material-ui 组件 AppBar。

import React, { Component } from 'react';
import AppBar from 'material-ui/AppBar';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import './App.css';

class App extends Component {

  render() {

    return ( 
      <MuiThemeProvider>
        <div>
          <AppBar title = "Title" />
        </div> 
      </MuiThemeProvider>
    );
  }
}

export default App;
Run Code Online (Sandbox Code Playgroud)