gpt4 book ai didi

javascript - MuiThemeProvider 组件应该放在哪里?

转载 作者:行者123 更新时间:2023-11-29 10:06:26 24 4
gpt4 key购买 nike

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

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

索引.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>
);
}
}

关于javascript - MuiThemeProvider 组件应该放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42468550/

24 4 0