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)
我通常用 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)
| 归档时间: |
|
| 查看次数: |
9063 次 |
| 最近记录: |