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

posted @ 2018-07-07 11:36  BuleDog  阅读(918)  评论(0编辑  收藏  举报