zoukankan      html  css  js  c++  java
  • react-router4.0的使用

    近来很忙,学了一波react,特来记一笔,分享下react-router的使用方式

    第一步引入内部组件

    import {Route,BrowserRouter as Router,Switch,Link } from "react-router-dom"

    1)配置路由文件,一个路由对应一个组件,平级路由

    import SelfHeader from './components/pc/selfHeder'
    import ModuleParts from './components/pc/modulePart'
    import PCAddModule from './components/pc/addModules'
    import detail from './components/pc/detail'
    class App extends Component {
      render() {
        return (
          <div className="App">
            {/* pc */}
              <SelfHeader/>
           <Link to='/' className="clearfix">addModule</Link>
           <Link to='/addModule' className="clearfix">addModule</Link>
              <Router>
                <Switch >
                  <Route exact path="/" component={ModuleParts}></Route>
                  <Route path="/addModule" component={PCAddModule}></Route>
                  {/*
                  <Route path="/usercenter" component={PCUserCenter}></Route> */}
                </Switch >
              </Router>
          </div>
        );
      }
    }
    export default App;

    可以看到Link就是路由触发标签,相当于angularJS的ui-sref,vue中的route-link,在react中我们可以把Route组件当作是一个容器,对应装载入组件,类似于angularJS的ui-view(ui-router),vue中的route-view

    2)路由的嵌套

    经常遇到的情况是需要使用到路由嵌套,就是父子级路由

    在angularJS(mvc)中我们会使用多个views,例如:

    define(['app'], function (myapp) {
        myapp.config(['$stateProvider', '$urlRouterProvider',
            function ($stateProvider, $urlRouterProvider) {
                $stateProvider.state('editor', {
                    url: '/editor',
                    //templateUrl: 'html/login.html',
                    //constroller: 'loginCtrl',
                    //resolve: {
                    //    deps: $requireProvider.requireJS(['js/ctrls/login.js'])
                    //}
                    views: {
                        "main": {
                            templateUrl: 'html/editor.html',
                            controller: 'editorCtrl',
                        }
                    }
                });
            }
        ]);
    
    })

    在vue2.0中这样的,不要忘记在父级组件中加上一个<router-view/>

    {
        path: '/v_next_tick', 
        name: 'v_next_tick',
        component: VNextTick,
        children:[
          { path: '/aaa', 
          name: 'aa',
          component: aa,}
        ],
        meta:{
          tabNum: 0
        }

    在react中,下面的addModules组件承接就是上面例子中的addModules组件

    class addModules extends Component {
        constructor(props){
            super(props)
            this.state= {
                a:33
            }
        };
        render () {
            return (
                <div className="add-module-wrapper">
              <Link to={`${this.props.match.url}/ee/22`} className="clearfix">detailBtn</Link>
                    <Route exact path={`${this.props.match.url}`} component={detail}></Route>
                    <Route path={`${this.props.match.url}/ee/:id`} component={detail}></Route>
                    <Link to='/' className="clearfix">addModule</Link> {/*返回顶级默认路由对应页面*/}
                </div>
            )
        } 
    }
    export default addModules;
    

      

    a)需要补充说明的是在react中子级路由是随父级组件一起配置的

  • 相关阅读:
    python之shutil模块
    python的os模块
    python的map函数
    Web基础知识
    Web基础知识 --- html中的meta元素有什么用?
    使用技巧 --- 与 FireFox 相关
    基础知识之WIN32 API
    资料索引
    基础知识之C++篇
    使用技巧 --- 与 Visual Studio 有关
  • 原文地址:https://www.cnblogs.com/evaling/p/9276802.html
Copyright © 2011-2022 走看看