【问题标题】:React Material-UI with RouterReact Material-UI 与路由器
【发布时间】:2018-04-04 19:55:43
【问题描述】:

我正在尝试使用 Material-UI 库构建简单的 React 应用程序。
我使用了example app for create-react-app 并尝试将路由器添加到它,以便我可以在组件之间导航,但似乎 Material-UI 库添加的组件与 React-Router 库不能很好地配合。

有没有同时使用 react-router 和 material-ui 库的例子?

【问题讨论】:

  • 查看我在 GitHub 上的 config-server 项目。它具有最新的 material-ui 1.0x 和 react-router v4。

标签: reactjs react-router material-ui


【解决方案1】:

我最近在我的项目中使用了 material-ui 和 react-route-dom。 我的项目正在使用

1.create-react-app [react 16.5.2]

  1. 材质-UI [3.2.2]

  2. react-router-dom [4.3.2]

index.js

import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(<BrowserRouter><App /></BrowserRouter>, 
document.getElementById('root'));

App.js

import React, { Component } from 'react';
import ThemeDefault from './Theme/Theme';
import Layout from './components/Layout/Layout';

class App extends Component {

  render() {
    return (
      <ThemeDefault>
        <Layout></Layout>
      </ThemeDefault>
    );
}
}

export default App;

Routes.js

const ReactRouter = () => {
return (
        <Fragment>
            <Switch>
                <Route exact path="/" component={Home} />
                <Route path="/home" component={Home} />
                <Route path="/login" component={Login} />
            </Switch>
        </Fragment>

   )
 }
 export default ReactRouter;

Layout.js

     import ReactRouter from '../../routes';
       class Layout extends Component {

         render() {
          const { classes } = this.props;

          return (
            <div className={classes.root}>
             <CssBaseline></CssBaseline>
               <Header clicked={this.handleDrawerToggle} classes= . 
                   {classNames(classes.appBar, this.state.openSideDrawer && 
                     classes.appBarShift)}>
                </Header>
               <SideDrawer open={this.state.openSideDrawer}></SideDrawer>
               <main className={classNames(classes.content, 
                 this.state.openSideDrawer && classes.contentShift)}>
                    <ReactRouter></ReactRouter>
                 </main>
             </div>
           )

       }
     }


    Layout.propTypes = {
       classes: PropTypes.object.isRequired,
       theme: PropTypes.object.isRequired,
      };

       export default withStyles(styles, { withTheme: true })(Layout);

在我的示例中,我只是更新了主要内容的一部分。所以我添加了 Layout.js 中 main 中的 ReactRouter

 <Header>  will have app bar
 <SideDrawer>  For side navigation menu
  <main>     will contain the different components content

【讨论】:

    【解决方案2】:

    我有一个基本的boilerplate project 示例,你可以克隆,我试一试。

    项目正在使用:
    - 创建反应应用程序
    - 反应路由器 3.0.2
    - 材料-ui 0.19.4

    MaterialUI 示例:

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

    旋转示例:

    const Routes = (props) => (
        <Router {...props}>
            <Route path="/" component={App}>
                <IndexRoute component={Login} />
                <Route path="/login" component={Login} />
                <Route path="/register" component={Register} />
                <Route path="*" component={NotFound} />
            </Route>
        </Router>
    )
    

    【讨论】:

    猜你喜欢
    • 2019-09-11
    • 2018-07-04
    • 2020-08-12
    • 2015-08-05
    • 2017-05-29
    • 2019-07-19
    • 1970-01-01
    • 2020-03-23
    • 2019-01-10
    相关资源
    最近更新 更多