vue-router和react-router

1,958 阅读4分钟

vue-router

1,创建项目

    vue create mine
    vue ui

2,创建组件并引用

首先,在src文件夹下创建XXX.vue 然后,在router.js中引入
import 模块名 from './XXX.vue'
xport default new Router({
  mode: 'history',//默认是hash区别:hash链接上面有#号
  base: process.env.BASE_URL,
  routes: [
    {
      path: '/',
      component:模块名
    }
})

3,路由

在App.vue中 利用
<router-link to="router.js中配置的路径"></router-link>//用于占位会把对应路径的组件的内容渲染在该位置

4,子路由

首先,需要在父组件中占位
例: About.vue

<template>
    <div class="">
    <router-view/>//利用router-view占位
    <router-link to="./about/a"></router-link>(可以写在App.vue或父组件中)
    </div>
</template>

然后,在router.js中进行配置

{
      path: '/about',
      component: About,
      name:'about'
      children: [
        {
          path: 'a',
          component: A
        }
    ]
}

3,传参

方法一:
例:
    App.vue
    <router-link :to="{name,params:{id:111,name:about}"相当于给名叫name的组件传入两个新的属性 分别是id和name
    (name是指在router,js中name属性所对应的value)  
    
* 在页面内渲染的方式
    {{$route.params.id}}

方法二: 利用url传参

例:
    App.vue
    <router-link to="path/111"//111也可以不写,直接在url链接上也可以获取
    同时需要在router.js中更改path:'/about/:id'id是给传递的参数取的属性名  
* 在页面内渲染的方式
    {{$route.params.id}} 更改网页链接也可以直接在页面内获取到更改后的值

4,重定向

在router.js中
{
    path:'./',
    redirect:'/about'
}
重定向的path路径也可以传递参数 
当访问/时会自动重定向到about组件的页面内

5,alias起别名

在router.js中
{
    path:'/'
    alias:'xs'
}
在url链接中直接访问别名也可以跳转到该组件页面中

6,起别名和重定向的区别

alias:只是path路径的名字被改变

重定向:重定向的路径需要真实存在

7,路由过渡

transition 
<transition name="fade">//fade是随意起的名字用于在css页面内设置过渡样式
    <router-view/>
</transtion>
<style>
    .fade-enter{
    }//进入过渡之前
    .fade-enter-to{
    }//结束状态
    .fade-enter-active{
    }//进入过渡时期的状态
    .fade-leave{
    }//离开过渡之前
    .fade-leave-to{
    }//离开时的结束状态
    .fade-leave-active{
    }//离开时的过渡时期的状态

8,mode&404

mode:'hash/history' 默认情况下时hash 链接上多了一个# 处理404
{
    path:'/*',
    component:Error
}用于访问没有配置的路径

9,路由钩子函数

在router.js中的export default new Router({
    router:[],
    1,beforeEnter:(to,from,next) =>{
        //to 是跳转后 from是跳转前 router是路由的控制参数
    }
    2,beforeRouterEnter
       beforeRouterUpdate
       beforeRouterLeave
})

10,编程式导航

在App.vue中
例:<button @click="gopage()">页面跳转</button>
    <button @click="go()">前进</button>
    <button @click="back()">后退</button>
    script>
  import hello from '@/components/hello.vue'
  export default {
    data() {
      return {
        msg: '放假啦'
      }
    },
    components: {
      tpl: hello
    },
    methods: {
      gopage() {
        this.$router.push('/about')//利用函数的方法进行了页面的跳转
      },
      go(){
        this.$router.go(2)
      },
      back(){
        this.$router.back() // this.$router.go(-1)
      }
    }
}
</script>

11,引入组件

在VUE中引入小组件
<script>
  import hello from '@/components/hello.vue'
  export default {
    data() {
      return {
        msg: '放假啦'
      }
    },
    components: {
      hello
    }
    }
</script>
在html内引用利用组件名称  驼峰式

react-router

1,创建项目

npm install -g create-react-app  

create-react-app react-app  

cd react-app

npm start  

npm install --save react-router-dom  

2,引入

    import {BrowserRoute ras Router, Route, Link} from ‘react-router-dom’
    //相当于引入了三个组件 
    BrowserRouter可以换成hashRourter 链接中多了一个#
    快捷键rcc等同于
    
        import React {component} from ‘react’;
        class App extends Component{
            render(){
                return(
                <div>
                </div>)
            }
        }
        export default App

3,渲染到html页面

方法一:
<Router>
    <Link to="/a">go to page A</Link><br/> //路由的跳转
    <Route path="/a" component={A} ></Route>//每引入一个组件都需要import
</Router>
方法二:
<Router>
    <Link to="/a">go to page A</Link><br/> //路由的跳转
    <Route path="/a"render={
        () =>{
            return(
            <div>
            page a
            </div>)
        }
    } ></Route>//render 是定义的一个方法
    可以简写成<Route path="/a" render={()=>{<div>page a</div>}}
</Router>
方法三:
<Router>
    <Link to="/a">go to page A</Link><br/> //路由的跳转
    <Route path="/a" children={A} ></Route>//每引入一个组件都需要import
</Router>

* 利用children定义组件无论是否匹配都会被渲染到每一个组件页面内

* 使用children定义组件时不能用在switch语句中,因为switch语句只能够匹配第一个符合条件的组件,不会把每一个children定义的组件渲染到页面中

* 引入的组件必须是利用const函数形式定义的

4,Switch语句

需要在App.js中引入
import {BrowserRoute ras Router, Route, Link,Switch} from "react-router-dom "   
<Switch>
    <Route path="/a" component={A}></Route>
    <Route path="/" component={Home}></Route>
</Switch>   

React 默认是模糊匹配,匹配的是第一个符合条件的组件,如果使用Switch,需要把path='/' 放到最后 或在路径path前加入exact 表示严格匹配路由

5,传参

<Link-to="/b/111"></Link>//传递参数111
<Route path="/b/:id"></Route>为传递过来的参数设置了形参名为id
在子页面渲染的方式
{this.props.match.params.id} 也可以通过解构赋值来简写
通过match来接收路由传递的信息