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中子级路由是随父级组件一起配置的

  • 相关阅读:
    linux开机启动详细流程图
    linux kernel map
    超全整理!Linux性能分析工具汇总合集
    MySQL 数据类型简介 创建数据表及其字段约束
    利用PyMySQL模块操作数据库
    数据表修改详细版
    数据库一对一、一对多、多对多关系
    web前端开发浅析
    前端开发感悟:日常工作与新技术
    请问有哪些前端技术可以提高页面加载速度?
  • 原文地址:https://www.cnblogs.com/evaling/p/9276802.html
Copyright © 2011-2022 走看看