IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react实现路由跳转 -> 正文阅读

[JavaScript知识库]react实现路由跳转

react通过路由实现页面跳转:

? 函数式路由(withRouter)使用原生js方法实现路由功能。

? eg:export default withRouter(Home) Home是组件名称。

	示例:
    class Home extends Component{
 		<button onClick={this.goForward}>下一级</button>
        goForward = () => {
            this.props.history.goForward()  //函数式路由
            {/* 
                this.props.history.go(0)   //正数表示调用几次goForward,负数表示调用几次goBack(),0表示刷新当前页面;
                this.props.history.goBack()  //返回上一级
                this.props.history.push('/home') //到哪去
                this.props.history.replace()  //替换当前路径 历史记录不再会有替换之前的路径
            */}
        }
    }
	
	export default withRouter(Home) 
	

一、准备工作:

? 1、创建myProject05-router目录

? 2、创建清单文件, npm init -y

? 3、安装第三方依赖包,npm install react react-dom react-scripts react-router-dom@5 --save

? 4、创建public文件夹,在该文件夹下创建index.html

? 5、创建src文件夹,在该文件夹下创建:

? (1)入口文件index.js

? (2)组件App.js和App.css文件

? (3)创建pages文件夹,在该文件夹下创建Home文件夹,在Home文件夹下创建Cates文件夹(Cates.jsx)和Goods文件夹(Goods.jsx、Goods.css),Home.jsx,Home.css;并在该文件夹下创建About.jsx和Resovle.jsx。

? 9、src目录:

请添加图片描述

二、编写代码:

? 1、index.html:

    <div id="root"></div>

? 2、index.js:

import ReactDOM from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom'
import App from './App'

const root = ReactDOM.createRoot(document.getElementById('root'))

root.render(
    <BrowserRouter>
        <App/>
    </BrowserRouter>
)

? 3、App.js:

import React, { Component } from 'react'
import {NavLink, Redirect, Route, Switch} from 'react-router-dom'
import About from './pages/About'
import Home from './pages/Home/Home'
import Resovle from './pages/Resovle'
import './App.css'

export default class App extends Component {
  render() {
    return (
      <div className='app'>
          {/* 制作导航菜单 */}
          <div className='tabs'>
              <NavLink to='/home'>首页</NavLink>
              <NavLink to='/resovle'>解决方案</NavLink>
              <NavLink to='/about'>关于我们</NavLink>
          </div>


        {/* 注册路由(其实就是路径和组件的映射关系) */}
        {/* 精准匹配 */}
          <Switch>
            <Route path='/home' component={Home}/>
            <Route path='/resovle' component={Resovle}/>
            <Route path='/about' component={About}/>
            <Redirect to='/home'/>
          </Switch>
      </div>
    )
  }
}

? 4、App.css:

.app {
    width: 400px;
    margin: 10px auto;
}

.tabs {
    display: flex;
    flex-direction: rows;

}

.tabs a{
    flex: auto;
    padding: 10px 30px ;
    background-color: #777;
    color: white;
    margin-right: 1px;
    text-decoration: none;
}

? 5、Home.jsx

import React, { Component } from 'react'
import { NavLink, Redirect, Route, Switch } from 'react-router-dom'
import Cates from './Cates/Cates'
import Goods from './Goods/Goods'
import './Home.css'

export default class Home extends Component {
  render() {
    return (
      <div className='home'>
        <div className='left'>
          <NavLink to='/home/cates'>分类</NavLink>
          <NavLink to='/home/goods'>商品</NavLink>
        </div>

        <div className='right'>
          <Switch>
            <Route path='/home/cates' component={Cates}/>
            <Route path='/home/goods' component={Goods}/>
            <Redirect to='/home/goods'/>
          </Switch>
        </div>
      </div>
    )
  }
}

? 6、Home.css:

.home {
    margin-top: 10px;
    display: flex;
    flex-direction: rows;
    height: 200px;
}

.home .left {
    display: flex;
    width: 120px;
    flex-direction: column;
    background-color: skyblue;
    margin-right: 1px;
}

.home .left a {
    text-decoration: none;
    color: #333;
    padding: 10px 0;
    text-align: center;
}

.home .left .active {
    background-color: orange;
}

.home .right {
    flex: auto;
    background-color: greenyellow;
}

? 7、Cates.jsx:

import React, { Component } from 'react'

export default class Cates extends Component {
  goForward = () => {
    this.props.history.goForward()  
  }

  render() {
    return (
      <div>
         <button onClick={this.goForward}>下一级</button>
      </div>
    )
  }
}

? 8、Goods.jsx:

import React, { Component } from 'react'

import './Goods.css'

export default class Goods extends Component {
  push = () => {
    console.log(this.props); 
    // this.props.history.push('/about')
    // this.props.history.replace('/about')  //替换当前路径记录 少一条记录
  }
  goBack = () => {
    this.props.history.goBack()
  }

  render() {
    return (
      <div className='goods'>
          <button onClick={this.push}>跳转到about</button>
          <button onClick={this.goBack}>上一级</button>

      </div>
    )
  }
}

? 9、Goods.css:

.goods .list{
    display: flex;
    justify-content: space-around;
    background-color: plum;
}

.goods .list a {
    text-decoration: none;
    color: #333;
    margin: 10px;
}

? 10、About.jsx:

import React, { Component } from 'react'

export default class About extends Component {
  render() {
    return (
      <div>这是关于我们内容</div>
    )
  }
}

? 11、Resolve.jsx:

import React, { Component } from 'react'

export default class Resovle extends Component {
  render() {
    return (
      <div>这是解决方案内容</div>
    )
  }
}

三、运行命令:

? npm react-scripts start

? 也可以在清单文件中设置简写命令:“start”: “react-scripts start”

 "scripts": {
    "start": "react-scripts start",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

) {
return (

这是解决方案内容

)
}
}


## `三、运行命令:`

?			[npm react-scripts start]()

?			也可以在清单文件中设置简写命令:["start": "react-scripts start"]()

```json
 "scripts": {
    "start": "react-scripts start",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:55:10  更:2022-08-19 18:58:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:49:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码