51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

React 路由的使用方法

文章已同步至掘金:https://juejin.cn/post/6844903975897006093
欢迎访问?,有任何问题都可留言评论哦~

安装依赖 {#%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96}

安装路由模块:npm i react-router-dom -S

基本路由 {#%E5%9F%BA%E6%9C%AC%E8%B7%AF%E7%94%B1}

首先我们新创建一个react项目(create-react-app demo)用来演示

并且删去不需要的代码,新建几个JS页面用来测试,如下:

react-router-1

接着我们需要在index.js文件中引入我们安装的依赖(如果你觉得名字长的话,可以使用as起一个别名)
记得一定要把根组件(<App />)包起来才可以,这样其他组件才可以使用路由

index.js代码:

import React from "react"
import ReactDOM from 'react-dom'
import App from './App'
//引入路由依赖,并起一个别名,因为原先的名字太长了
import {BrowserRouter as Router} from 'react-router-dom'
`ReactDOM.render(
//把根组件用BrowserRouter包起来,这里我用了别名
<Router>
<App />
</Router>
,document.getElementById('app'))
`

接着在App.js中引入所需要的依赖和要使用的组件,
并配置路由规则,设置点击跳转

App.js代码:

import React, { Component } from 'react';
//导入路由依赖和组件
import { Route, Link } from "react-router-dom"
import Home from "./Home"
import List from "./List"
import User from "./User"

class App extends Component { render() { return ( &lt;&gt; &lt;ul&gt; &lt;li&gt; &lt;Link to="/"&gt;首页&lt;/Link&gt; &lt;/li&gt; &lt;li&gt; &lt;Link to="/list"&gt;列表页&lt;/Link&gt; &lt;/li&gt; &lt;li&gt; &lt;Link to="/user"&gt;用户中心&lt;/Link&gt; &lt;/li&gt; &lt;/ul&gt;

            {/* 配置路由规则  exact表示精确匹配,防止匹配其他页面的时候匹配到/,也就是首页*/}
            &amp;lt;Route path='/' exact component={Home}&amp;gt;&amp;lt;/Route&amp;gt;
            &amp;lt;Route path='/list' component={List}&amp;gt;&amp;lt;/Route&amp;gt;
            &amp;lt;Route path='/user' component={User}&amp;gt;&amp;lt;/Route&amp;gt;

        &amp;lt;/&amp;gt;
    )
}

} export default App;


效果演示:

react-router-2

嵌套路由 {#%E5%B5%8C%E5%A5%97%E8%B7%AF%E7%94%B1}

在上面的基础上,我们在src下新建一个user文件夹,用来存放 注册和登录页面,如下:

react-router-3

我们想要在哪个页面下嵌套的话,那么就在该页面下配置路由

我们想要在用户中心页面中嵌套页面,则在User.js文件中导入路由依赖和组件并配置路由

修改User.js文件代码:

import React,{Component} from 'react';
//导入路由依赖和组件
import { Route, Link } from "react-router-dom"
import Reg from "./user/Reg"
import Login from "./user/Login"

class User extends Component{ render(){ return( &lt;&gt; &lt;h1&gt;用户中心&lt;/h1&gt; &lt;ul&gt; &lt;li&gt; &lt;Link to="/user/reg"&gt;注册&lt;/Link&gt; &lt;/li&gt; &lt;li&gt; &lt;Link to="/user/login"&gt;登录&lt;/Link&gt; &lt;/li&gt; &lt;/ul&gt;

            {/* 配置路由 */}
            &amp;lt;Route path=&quot;/user/reg&quot; component={Reg}&amp;gt;&amp;lt;/Route&amp;gt;
            &amp;lt;Route path=&quot;/user/login&quot; component={Login}&amp;gt;&amp;lt;/Route&amp;gt;
        &amp;lt;/&amp;gt;
    )
}

} export default User;


效果演示:

react-router-4

动态路由 {#%E5%8A%A8%E6%80%81%E8%B7%AF%E7%94%B1}

src下新建一个Detail.js文件,用来展示列表详情:

import React from "react"

// 得到id,发起axios请求,获取详情的数据 class Detail extends React.Component { componentDidMount(){ console.log(this.props.match.params.id) } render() { return ( &lt;div&gt; &lt;h2&gt;商品详情页面&lt;/h2&gt; &lt;h4&gt;{"发起axios请求获取"+this.props.match.params.id+"号商品的数据"}&lt;/h4&gt; &lt;/div&gt; ) } }

export default Detail


接着修改List.js中的代码:

import React,{Component} from 'react';
//使用Link
import {Link} from 'react-router-dom'
class List extends Component{
    render(){
        return(
            <>
                <h1>列表页</h1>
                <ul>
                    <li><Link to='/detail/1'>第一号商品</Link></li>
                    <li><Link to='/detail/2'>第二号商品</Link></li>
                    <li><Link to='/detail/3'>第三号商品</Link></li>
                </ul>
            </>
        )
    }
}
export default List;

最后我们需要在App.js中引入Detail.js文件,并配置路由:

import Detail from './Detail'
`//记得在/detail后面加/:id
<Route path='/detail/:id' component={Detail}></Route>
`

运行效果:

react-router-5

编程式路由 {#%E7%BC%96%E7%A8%8B%E5%BC%8F%E8%B7%AF%E7%94%B1}

修改List.js文件,
引入 history 依赖,生成history,并配置history,
定义按钮,实现跳转:

import React,{Component} from 'react';
//使用Link
import {Link} from 'react-router-dom'
//引入
import {createBrowserHistory} from 'history'
//生成history
let history = createBrowserHistory({
    //配置强制刷新,如果不刷新,则没反应,需要手动刷新才会跳转
    forceRefresh:true
})
class List extends Component{
    render(){
        return(
            <>
                <h1>列表页</h1>
                <ul>
                    <li><Link to='/detail/1'>第一号商品</Link></li>
                    <li><Link to='/detail/2'>第二号商品</Link></li>
                    <li><Link to='/detail/3'>第三号商品</Link></li>
                    <p>......</p>
                    {/* 在history中可以使用push方法进行跳转 */}
                    <button onClick={()=>history.push('/detail/100')}>第一百号商品</button>
                </ul>
            </>
        )
    }
}
export default List;

接着我们在Detail.js文件中也引入并生成history
在这里我们定义一个返回按钮,可以返回上一级:

import React from "react"
//引入
import { createBrowserHistory } from 'history';
// 生成history 
let history = createBrowserHistory();

class Detail extends React.Component { componentDidMount(){ console.log(this.props.match.params.id) } render() { return ( &lt;div&gt; &lt;h2&gt;商品详情页面&lt;/h2&gt; &lt;h4&gt;{"发起axios请求获取"+this.props.match.params.id+"号商品的数据"}&lt;/h4&gt; {/* 这两种方法都可以实现返回上一级 /} {/ &lt;button onClick={()=&gt;history.goBack()}&gt;返回&lt;/button&gt; */} &lt;button onClick={()=&gt;history.go(-1)}&gt;返回&lt;/button&gt; &lt;/div&gt; ) } }

export default Detail


运行效果:

react-router-6

重定向与Switch {#%E9%87%8D%E5%AE%9A%E5%90%91%E4%B8%8Eswitch}

一般重定向需要搭配Switch一起使用

我们需要在src下面新建一个404页面,如果匹配不到页面的话,就跳到404页面

import React,{Component} from 'react';
class Error extends Component{
    render(){
        return(
            <><h1>页面飞走了</h1></>
        )
    }
}
export default Error;

接下来我们需要修改App.js文件的代码
引入所需要的依赖和页面,并修改配置路由规则的代码:

import React, { Component } from 'react';
//导入路由依赖和组件
import { Route, Link, Redirect, Switch } from "react-router-dom"
import Home from "./Home"
import List from "./List"
import User from "./User"
import Detail from './Detail'
import Error from './404'

class App extends Component { render() { return ( &lt;&gt; &lt;ul&gt; &lt;li&gt; &lt;Link to="/"&gt;首页&lt;/Link&gt; &lt;/li&gt; &lt;li&gt; &lt;Link to="/list"&gt;列表页&lt;/Link&gt; &lt;/li&gt; &lt;li&gt; &lt;Link to="/user"&gt;用户中心&lt;/Link&gt; &lt;/li&gt; &lt;/ul&gt;

            {/* 配置路由规则  exact表示精确匹配,防止匹配其他页面的时候匹配到/,也就是首页*/}
            {/* Switch表示如果匹配到了路由,就不再往下面匹配了,如果不写Switch,则一直会匹配到404页面 */}
            &amp;lt;Switch&amp;gt;
                {/* 如果访问个人中心页面,则重定向到列表页面 */}
                &amp;lt;Redirect from='/user' to='/list'&amp;gt;&amp;lt;/Redirect&amp;gt;
                &amp;lt;Route path='/' exact component={Home}&amp;gt;&amp;lt;/Route&amp;gt;
                &amp;lt;Route path='/list' component={List}&amp;gt;&amp;lt;/Route&amp;gt;
                &amp;lt;Route path='/user' component={User}&amp;gt;&amp;lt;/Route&amp;gt;
                &amp;lt;Route path='/detail/:id' component={Detail}&amp;gt;&amp;lt;/Route&amp;gt;
                {/* 没有写path表示匹配到所有的路径 */}
                &amp;lt;Route component={Error}&amp;gt;&amp;lt;/Route&amp;gt;
            &amp;lt;/Switch&amp;gt;
        &amp;lt;/&amp;gt;
    )
}

} export default App;


运行效果:

react-router-7


QAQ {#qaq}

赞(4)
未经允许不得转载:工具盒子 » React 路由的使用方法