2016-04-30 72 views
18

我在我的控制檯此消息:我不能使用材料的UI組件更新後[email protected]

Failed Context Types: Required context muiTheme was not specified in AppBar

AppBar.js:158 Uncaught TypeError: Cannot read property 'prepareStyles' of undefined

我只是有一個AppBar在我的組件 我想它應該工作,但... 這裏我非常簡單的代碼:

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


    export class MyComponent extends React.Component { 

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

       </div> 
      ); 
     } 

    } 

感謝幫助...

回答

32

隨着[email protected]一些事情發生了變化。

你可以看看下面的鏈接瞭解更多詳情。 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, 
     }; 
+0

好吧,我明白了!非常感謝! –

+0

它解決了我的問題。謝謝! –

+4

爲什麼他們使它更復雜?如果我可以編寫更少的代碼來實現它,那將是非常好的。 – newguy

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> 
) 

... 

所以你不必向兒童提供上下文manualy 。 更多的信息在documentation

+0

你自己試過這個嗎?我的工作還在繼續...... –

+0

@BruceSun是的,我在2個項目中使用它。 –

+2

我找到了原因 - 如果我使用React.createClass()定義組件,它不起作用,但如果我創建一個擴展React.Component的ES6類,則工作正常。我沒有找到任何關於此的文檔。 –

0

導入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; 
相關問題