MuiThemeProvider 组件应该放在哪里?
Where Do I put the MuiThemeProvider Component?
您好,我目前正在使用 Material Ui 开发一个新的 React 应用程序,我选择了 css 库。我试图让它与 react-router 一起玩得很好。我不确定应该将 MuiThemeProvider 放在哪里。文档示例将主要应用程序组件包裹在它周围。
这在没有来自 react-router 的任何额外组件的情况下工作正常。但是当我想从反应路由器渲染其余的子组件时,它会抛出一个错误。
Index.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")
);
和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;
抛出的错误是这样的
warning.js:36Warning: React.createElement: type is invalid -- expected
a string (for built-in components) or a class/function (for composite
components) but got: undefined. You likely forgot to export your
component from the file it's defined in. Check the render method of
WelcomePage
.
和
Uncaught Error: Element type is invalid: expected a string (for
built-in components) or a class/function (for composite components)
but got: undefined. You likely forgot to export your component from
the file it's defined in. Check the render method of WelcomePage
.
at 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:172)
at Object.instantiateChildren (ReactChildReconciler.js:70)
at ReactDOMComponent._reconcilerInstantiateChildren (ReactMultiChild.js:187)
at ReactDOMComponent.mountChildren (ReactMultiChild.js:226)
at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:697)
我通常用 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>
在这个 AppContainer 中我有:
class AppContainer extends Component {
render() {
return (
<MuiThemeProvider muiTheme={muiTheme}>
<div className="content">
<h1>Here is my app</h1>
{this.props.children}
</div>
</MuiThemeProvider>
);
}
}
您好,我目前正在使用 Material Ui 开发一个新的 React 应用程序,我选择了 css 库。我试图让它与 react-router 一起玩得很好。我不确定应该将 MuiThemeProvider 放在哪里。文档示例将主要应用程序组件包裹在它周围。
这在没有来自 react-router 的任何额外组件的情况下工作正常。但是当我想从反应路由器渲染其余的子组件时,它会抛出一个错误。
Index.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")
);
和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;
抛出的错误是这样的
warning.js:36Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in. Check the render method of
WelcomePage
.
和
Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in. Check the render method of
WelcomePage
. at 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:172) at Object.instantiateChildren (ReactChildReconciler.js:70) at ReactDOMComponent._reconcilerInstantiateChildren (ReactMultiChild.js:187) at ReactDOMComponent.mountChildren (ReactMultiChild.js:226) at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:697)
我通常用 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>
在这个 AppContainer 中我有:
class AppContainer extends Component {
render() {
return (
<MuiThemeProvider muiTheme={muiTheme}>
<div className="content">
<h1>Here is my app</h1>
{this.props.children}
</div>
</MuiThemeProvider>
);
}
}