我应该把 MuiThemeProvider 组件放在哪里?

4 javascript reactjs material-ui

嗨,我目前正在使用 Material Ui 开发一个新的 React 应用程序,以便我选择一个 css 库。我试图让它与 react-router 一起玩得很好。我不确定应该把 MuiThemeProvider 放在哪里。docs 示例将主要的应用程序组件包装在它周围。

这在没有来自 react-router 的任何额外组件的情况下工作正常。但是当我想从 react router 渲染其余的子组件时,它会引发错误。

索引.js

  import React from "react";
  import ReactDOM from "react-dom";
  import injectTapEventPlugin from "react-tap-event-plugin";
  import routes from "./routes";
  import { Router, browserHistory} from "react-router";
  import "../public/css/index.css";
  import MuiThemeProvider from "material-ui/styles/MuiThemeProvider";

  injectTapEventPlugin();

  ReactDOM.render(
       <MuiThemeProvider>
          <Router history={browserHistory} routes={routes} />
      </MuiThemeProvider>,
       document.getElementById("root")
  );
Run Code Online (Sandbox Code Playgroud)

和 App.js

import React, { Component } from "react";
import NavigationBar from "./NavigationBar";

class App extends Component {
  render() {
    return (
      <div>
        <NavigationBar />
        {this.props.children}
      </div>
     );
  }
}   

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

被抛出的错误是这个

warning.js:36Warning: React.createElement: 类型无效——需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:未定义。您可能忘记从定义组件的文件中导出组件。检查 WelcomePage.

未捕获的错误:元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件)但得到:未定义。您可能忘记从它定义的文件中导出您的组件。检查的渲染方法WelcomePage. 在 invariant (invariant.js:44) at instantiateReactComponent (instantiateReactComponent.js:77) at instantiateChild (ReactChildReconciler.js:44) at ReactChildReconciler.js:71 at traverseAllChildrenImpl (traverseAllChildren.js:77) at traverseAllChildren (traverseAllChildren.js:17AllChildren.js:44) ) 在 Object.instantiateChildren (ReactChildReconciler.js:70) 在 ReactDOMComponent._reconcilerInstantiateChildren (ReactMultiChild.js:187) 在 ReactDOMComponent.mountChildren (ReactMultiChild.js:226) 在 ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:697)

Can*_*tro 5

我通常用 MuiThemeProvider 组件包装我的主容器的内容。

例如在我的路由器中我有(注意 AppContainer 作为基本组件):

<Router history={browserHistory}>
    <Route path="/" component={AppContainer}>
        <IndexRoute
            getComponent={(nextState, cb) => {
                System.import('./containers/home/home')
                    .then(loadRoute(cb))
                    .catch(errorLoading);
            }}
        />
    </Route>
</Router>
Run Code Online (Sandbox Code Playgroud)

在这个 AppContainer 中,我有:

class AppContainer extends Component {
    render() {
        return (
            <MuiThemeProvider muiTheme={muiTheme}>
                <div className="content">
                    <h1>Here is my app</h1>
                    {this.props.children}
                </div>
            </MuiThemeProvider>
        );
    }
}
Run Code Online (Sandbox Code Playgroud)