首页 > 其他分享 >路由react-router-dom的使用

路由react-router-dom的使用

时间:2023-02-01 23:56:09浏览次数:42  
标签:dom react 组件 router 路由 页面

react-router-dom路由简介 现代的前端页面大多是SPA(单页面应用程序), 也就是只有一个HTML页面的程序,这样用户体验好,服务器压力小,所以更受欢迎。路由是使用单页面来管理原来多页面的功能。 路由的功能:从一个页面,跳转到另一个页面。 在React中,路由是一套映射规则,是URL路径与组件的对应关系。 使用React路由,就是配置路径和组件的对应关系。 React的一切都是组件,可以像思考组件一样看待路由。   react-router-dom路由的基本使用

//1.安装库
npm i react-router-dom
//2.<Router>在根组件上包裹所有内容组件
<Router>
//3.<Link点击跳转到目标组件页面
<Link to="/first">页面一</Link>定义一个跳转链接
//4.<Routes>包裹具体的路由定义
 <Routes>
  <Route path="/first" element={<First/>}/>
</Routes>
import React from "react";
import {BrowserRouter as Router, Route, Link, Routes} from "react-router-dom"

// import {HashRouter as Router, Route, Link, Routes} from "react-router-dom"

const First = () => {
  return (
      <p>这是First组件页面</p>
  )
}

class RouterApp extends React.Component{
  render() {
    return (
        <Router>
          <div>
            路由主页
            <Link to="/first">页面一</Link>
            <Routes>
              <Route path="/first" element={<First/>}/>
            </Routes>
          </div>
        </Router>
    );
  }
}
设置默认路由 一进入这个页面,就展示这个组件,通过将路径设置成"/"来实现。 <Route path={"/"} element={<Login/>}/>
class RouterApp extends React.Component{
  render() {
    return (
        <Router>
          <div>
            路由主页
            <Link to="/first">页面一</Link>
            <Routes>
              <Route path="/first" element={<First/>}/>
              <Route path={"/"} element={<Login/>}/>
            </Routes>
          </div>
        </Router>
    );
  }
}

 

常用组件介绍 Router组件 包裹整个应用,在根组件上添加,一个React应用只添加一次。 Router有两种,HashRouter和BrowserRouter HashRouter使用URL的hash值实现 (http://localhost:3000/#/first) BrowserRouter使用H5的history API实现 (http://localhost:3000/first) HashRouter和BrowserRouter是无缝切换的
import {BrowserRouter as Router, Route, Link, Routes} from "react-router-dom"

// import {HashRouter as Router, Route, Link, Routes} from "react-router-dom"
Link组件 在页面中最终会转换成a标签。to中设置的值是浏览器上面的路由地址
location.pathname
'/first'
<Link to="/first">页面一</Link>
Route组件 指定路由展示组件的相关信息 path属性:路由规则 element属性:展示的组件 Route写在哪,路由渲染出来的组件就展示在哪。
<Routes>
  <Route path="/first" element={<First/>}/>
</Routes>

 

路由的执行过程 1.当点击页面中的Link标签时,修改浏览器地址中的url 2.React路由监听地址栏url的变化 3.React遍历所有的Route组件,使用路由规则(path)与pathname进行匹配 4.当路由规则path能够匹配地址栏中的pathname时,就展示这个Route对应组件的内容。
import React from "react";
import {BrowserRouter as Router, Route, Link, Routes} from "react-router-dom"

// import {HashRouter as Router, Route, Link, Routes} from "react-router-dom"


const First = () => <p>这是First组件页面</p>
const Home = () => <h2>这是home主页</h2>

class RouterApp extends React.Component{
  render() {
    return (
        <Router>
          <div>

            <Routes>
              <Route path="/first" element={<First/>}/>
              <Route path={"/home"} element={<Home/>}/>
            </Routes>
            路由主页
            <br/>
            <Link to="/first">页面一</Link>
            <br/>
            <Link to={"/home"}>Home主页</Link>
          </div>
        </Router>
    );
  }
}

 

编程式导航 编程式导航是使用js代码的形式实现的导航。
class Login extends React.Component{
  handleClick = () => {
    //history是在Routes选择route展示组件时,自动传入的。  
    //this.props.history.push("/manager")  
      
    let history = useHistory()
    history.push("/manager")
  }

  render() {
    return (
        <div>
          登录页面
          <button onClick={this.handleClick}>点击登录</button>
        </div>
    );
  }
}

const Manager = (props) => {
  let history = useHistory()

  const handleClick = () => {
    history.go(-1)
  }

  return (
      <div>
        管理后台
        <button onClick={handleClick}>返回到登录页面</button>
      </div>
  )
}

 

匹配模式 模糊匹配-默认 React的路由匹配模式是模糊匹配的 匹配规则是:只要pathname以path开头,那么这个path对应的组件就会被匹配成功,就会展示出来。直白说,只要跳转的路由页面的路由比较长/login/a/b, 那么这个对应组件的父级,祖父级组件都能匹配到,并展示出来。如:/, /login, /login/a, /login/a/b。 子级组件展示了,它的上级组件直到根组件都会展示出来。   好像新版本v6这个匹配规则无效了 0 精确匹配 只有当pathname和path完全一样时,才会展示。 在Route标签中加exact进行修饰
<Route exact path={"/"} element={<Login/>}/>

 

版本变迁 useHistory使用方式变化: react-router-dom v4 可以使 withRouter (函数组件里可以用这个方法), class组件里可以直接  this.props.history.push react-router-dom v5 是使用 useHistory  react-router-dom v6开始 useNavigate取代了原先版本中的useHistory    方法使用对比
useHistory用法
import { useHistory } from "react-router-dom";  //引入

 //使用:
// history.push({path:"/home"}); 也可以是对象 还可以传值 params,state,search 都能传 。
 const history = useHistory();
 history.push("/home"); 

useNavigate用法
import { useNavigate } from "react-router-dom"; 
  

const navigate = useNavigate();
navigate.push("/home"); 

 

             

标签:dom,react,组件,router,路由,页面
From: https://www.cnblogs.com/zhou--fei/p/17084530.html

相关文章

  • Vue、React 区分生产环境和开发环境
    1.手动切换exportconstBASE_URL='http://codercba.com:9002'//exportconstBASE_URL='http://codercba.prod:9002'exportconstTIME_OUT=100002.依赖当前......
  • React的受控组件与非受控组件
    收集表单数据受控组件在HTML中,表单元素(如input、textarea和select)通常自己维护state,并根据用户输入进行更新。而在React中,可变状态(mutablestate)通常保存在组件......
  • cra react18 ts 自定义hooks 单元测试
    首先创建cra项目如果报错说最新的create-react-app版本是5.x,而你的是4.x的话需要先卸载,再重新安装sudonpmuninstall-gcreate-react-appsudonpminst......
  • react的合成事件
    react自己有一套自己的事件机制,它在DOM事件体系基础上做了改进,减少了内存消耗,并且最大程度的消除了ie等浏览器的不兼容问题。它的特点有以下几个:react上注册的事件最终会......
  • jsDOM操作之获取元素
    1 根据id名获取document.getElementById(idName)2根据标签名获取document.getElementsByTagName(tagName)//返回一个集合(类数组对象)从整个文档获取element.getElem......
  • js之DOM简介
    1什么是DOM1)DOM英文全称“DocumentObjectModel”,译为“文档对象模型”。2)DOM是一个与平台和编程语言无关的接口,通过这个接口程序和脚本可以动态的访问和修改文档的内......
  • DOM属性操作中CRUD操作
    CRUD操作1.append():父元素将子元素追加到末尾对象1.append(对象2):将对象2添加到对象1元素内部,并且在末尾2.prepend():父元素将子元素追加到开头对象1.appen......
  • react-vant 使用
    react-vant是vantUI针对react的UI版本,可以帮助我们搭建react移动端页面安装:npminstallreact-vantlist组件使用import{List}from'react-vant';例子/*eslint-d......
  • React框架运行机制
    React框架运行主流程1.JSX是JS语言的扩展,被babel编译后,会转换成React.creatElement(),这个方法返回的是一个虚拟DOM。2.将虚拟DOM渲染到真实DOM的方法是ReactDom.render()......
  • JavaScript学习笔记—DOM:事件
    事件(event)事件就是用户和页面之间发生的交互行为比如:点击按钮,鼠标移动,双击按钮,敲击键盘,松开按键...可以通过为事件绑定响应函数(回调函数),来完成和用户之间的交互绑定响......